使用 Ollama 的结构化输出¶
开源大型语言模型 (LLM) 在 AI 社区中迅速普及。随着 Ollama 最近发布的 OpenAI 兼容层,现在可以利用这些开源模型通过 JSON schema 获取结构化输出。这一进展为开发者和研究人员带来了令人兴奋的可能性。
在这篇博客文章中,我们将探讨如何有效利用 Instructor 库和 Ollama,通过 Pydantic 模型 来驾驭结构化输出的力量。我们将涵盖从设置到实现的所有内容,为您提供实用的见解和代码示例。
为什么要使用 Instructor?¶
Instructor 提供了几个关键优势:
-
简单的 API 和完整的提示控制:Instructor 提供了一个直接的 API,让您完全拥有和控制您的提示。这使得您可以对 LLM 交互进行精细的定制和优化。 探索概念
-
重试和验证:当验证失败时自动要求模型重试,确保高质量的输出。利用 Pydantic 的验证功能实现强大的错误处理。 了解重试
-
流式传输支持:轻松流式传输部分结果和可迭代对象,实现应用的实时处理和响应能力提升。 了解流式传输
-
基于类型提示:利用 Pydantic 进行 schema 验证、提示控制、减少代码和 IDE 集成。 了解更多
-
简化 LLM 交互:支持各种 LLM 提供商,包括 OpenAI、Anthropic、Google、Vertex AI、Mistral/Mixtral、Anyscale、Ollama、llama-cpp-python、Cohere 和 LiteLLM。 查看示例
有关这些功能的更多详细信息,请查看文档的概念部分。
Patching¶
Instructor 的 patch 使用以下功能增强了 OpenAI API:
create
调用中的response_model
,返回一个 Pydantic 模型。create
调用中的max_retries
,通过指数退避策略在调用失败时进行重试。
了解更多
要了解更多信息,请参考文档。要理解将 Pydantic 与 Instructor 结合使用的优势,请访问为什么要使用 Pydantic页面的提示和技巧部分。
Ollama¶
首先下载 Ollama,然后拉取一个模型,例如 Llama 3 或 Mistral。
确保您的 ollama
已更新到最新版本!
from openai import OpenAI
from pydantic import BaseModel, Field
from typing import List
import instructor
class Character(BaseModel):
name: str
age: int
fact: List[str] = Field(..., description="A list of facts about the character")
# enables `response_model` in create call
client = instructor.from_openai(
OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # required, but unused
),
mode=instructor.Mode.JSON,
)
resp = client.chat.completions.create(
model="llama3",
messages=[
{
"role": "user",
"content": "Tell me about the Harry Potter",
}
],
response_model=Character,
)
print(resp.model_dump_json(indent=2))
"""
{
"name": "Harry James Potter",
"age": 37,
"fact": [
"He is the chosen one.",
"He has a lightning-shaped scar on his forehead.",
"He is the son of James and Lily Potter.",
"He attended Hogwarts School of Witchcraft and Wizardry.",
"He is a skilled wizard and sorcerer.",
"He fought against Lord Voldemort and his followers.",
"He has a pet owl named Snowy."
]
}
"""
本示例演示了如何将 Instructor 与 Ollama(一个本地 LLM 服务器)结合使用来生成结构化输出。通过利用 Instructor 的功能,我们可以轻松地从 LLM 的响应中提取结构化信息,从而更简单地在我们的应用程序中处理生成的数据。
进一步阅读¶
要了解更多关于 Instructor 及其各种应用的信息,请查看以下资源:
-
为什么要使用 Instructor? - 了解 Instructor 的优点和用例。
-
概念 - 深入了解 Instructor 的核心概念,包括模型、重试和验证。
-
示例 - 探索我们与各种 LLM 提供商集成的综合示例集合。
-
教程 - 循序渐进的教程,帮助您入门 Instructor。
-
学习提示 - 使用 Instructor 进行有效提示工程的技术和策略。
通过探索这些资源,您将全面了解 Instructor 的功能以及如何在您的项目中利用它们。