Instructor 为何是获取 LLMs JSON 输出的最佳方式¶
像 GPT 这样的大型语言模型 (LLMs) 功能强大,但让它们返回格式良好的 JSON 可能颇具挑战性。这正是 Instructor 库的用武之地。Instructor 允许您使用 Python 类型注解和 Pydantic 模型,轻松地将 LLM 输出映射到 JSON 数据。
Instructor 使得从 GPT-3.5、GPT-4、GPT-4-Vision 等 LLMs 以及包括 Mistral/Mixtral、Ollama 和 llama-cpp-python 在内的开源模型中获取 JSON 等结构化数据变得容易。
它以其简洁性、透明性和以用户为中心的设计而脱颖而出,构建在 Pydantic 之上。Instructor 可帮助您管理验证上下文、使用 Tenacity 进行重试,以及流式处理 列表 和 部分 响应。
- Instructor 支持多种编程语言,包括
- Python
- TypeScript
- Ruby
- Go
- Elixir
LLM JSON 输出的简单补丁¶
Instructor 作为 OpenAI Python SDK 的轻量级补丁工作。要使用它,您只需将补丁应用于您的 OpenAI 客户端
然后,您可以将 response_model
参数传递给 completions.create
或 chat.completions.create
方法。此参数接受一个 Pydantic 模型类,该类定义了您希望 LLM 输出映射到的 JSON 结构。就像使用 FastAPI 时的 response_model
一样。
这是一个用于简单用户配置文件的 response_model
示例
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
email: str
client = instructor.from_openai(openai.OpenAI())
user = client.chat.completions.create(
model="gpt-3.5-turbo",
response_model=User,
messages=[
{
"role": "user",
"content": "Extract the user's name, age, and email from this: John Doe is 25 years old. His email is john@example.com",
}
],
)
print(user.model_dump())
#> {
# "name": "John Doe",
# "age": 25,
# "email": "john@example.com"
# }
Instructor 从 LLM 输出中提取 JSON 数据,并返回您指定的 Pydantic 模型实例。然后,您可以使用 model_dump()
方法将模型实例序列化为 JSON 字符串。
Instructor 的一些主要优势
- 无需学习新语法 - 它基于标准的 Python 类型提示
- 与现有的 OpenAI SDK 代码无缝集成
- 增量式、零开销的采用路径
- 直接访问
messages
参数,实现灵活的提示工程 - 与任何兼容 OpenAI SDK 的平台或提供商广泛兼容
Pydantic:比普通字典更强大¶
您可能想知道,为什么使用 Pydantic 模型而不是直接返回键值对字典?虽然字典可以存储 JSON 数据,但 Pydantic 模型提供了几个强大的优势
-
类型验证:Pydantic 模型强制执行字段的类型。如果 LLM 返回了不正确的类型(例如,整数字段返回了字符串),它将引发验证错误。
-
字段要求:您可以将字段标记为必需或可选。如果缺少必需字段,Pydantic 将引发错误。
-
默认值:您可以为并非总是存在的字段指定默认值。
-
高级类型:Pydantic 支持更高级的字段类型,如日期、UUID、URL、列表、嵌套模型等。
-
序列化:Pydantic 模型可以轻松序列化为 JSON,这对于保存结果或将它们传递给其他系统非常有用。
-
IDE 支持:因为 Pydantic 模型被定义为类,所以 IDE 在处理 JSON 数据时可以提供自动补全、类型检查和其他有用的功能。
因此,虽然字典可以用于非常简单的 JSON 结构,但 Pydantic 模型在以可维护的方式处理复杂、经过验证的 JSON 时功能更为强大。
轻松获取 LLMs 的 JSON 输出¶
Instructor 和 Pydantic 结合使用,提供了一种绝佳的方式来提取和处理来自 LLMs 的 JSON 数据。Instructor 的轻量级补丁与 Pydantic 模型强大的验证和类型检查功能相结合,使得将 JSON 输出集成到您的 LLM 驱动应用程序中变得非常容易。尝试一下 Instructor,看看它如何让从 LLMs 获取 JSON 变得如此简单!