跳到内容

Instructor 为何是获取 LLMs JSON 输出的最佳方式

像 GPT 这样的大型语言模型 (LLMs) 功能强大,但让它们返回格式良好的 JSON 可能颇具挑战性。这正是 Instructor 库的用武之地。Instructor 允许您使用 Python 类型注解和 Pydantic 模型,轻松地将 LLM 输出映射到 JSON 数据。

Instructor 使得从 GPT-3.5、GPT-4、GPT-4-Vision 等 LLMs 以及包括 Mistral/MixtralOllamallama-cpp-python 在内的开源模型中获取 JSON 等结构化数据变得容易。

它以其简洁性、透明性和以用户为中心的设计而脱颖而出,构建在 Pydantic 之上。Instructor 可帮助您管理验证上下文、使用 Tenacity 进行重试,以及流式处理 列表部分 响应。

LLM JSON 输出的简单补丁

Instructor 作为 OpenAI Python SDK 的轻量级补丁工作。要使用它,您只需将补丁应用于您的 OpenAI 客户端

import instructor
import openai

client = instructor.from_openai(openai.OpenAI())

然后,您可以将 response_model 参数传递给 completions.createchat.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 模型提供了几个强大的优势

  1. 类型验证:Pydantic 模型强制执行字段的类型。如果 LLM 返回了不正确的类型(例如,整数字段返回了字符串),它将引发验证错误。

  2. 字段要求:您可以将字段标记为必需或可选。如果缺少必需字段,Pydantic 将引发错误。

  3. 默认值:您可以为并非总是存在的字段指定默认值。

  4. 高级类型:Pydantic 支持更高级的字段类型,如日期、UUID、URL、列表、嵌套模型等。

  5. 序列化:Pydantic 模型可以轻松序列化为 JSON,这对于保存结果或将它们传递给其他系统非常有用。

  6. IDE 支持:因为 Pydantic 模型被定义为类,所以 IDE 在处理 JSON 数据时可以提供自动补全、类型检查和其他有用的功能。

因此,虽然字典可以用于非常简单的 JSON 结构,但 Pydantic 模型在以可维护的方式处理复杂、经过验证的 JSON 时功能更为强大。

轻松获取 LLMs 的 JSON 输出

Instructor 和 Pydantic 结合使用,提供了一种绝佳的方式来提取和处理来自 LLMs 的 JSON 数据。Instructor 的轻量级补丁与 Pydantic 模型强大的验证和类型检查功能相结合,使得将 JSON 输出集成到您的 LLM 驱动应用程序中变得非常容易。尝试一下 Instructor,看看它如何让从 LLMs 获取 JSON 变得如此简单!