跳至内容

为何说 Instructor 是最适合结构化 LLM 输出的库

大型语言模型 (LLM),例如 GPTs,功能强大得令人难以置信,但处理其开放式文本输出可能具有挑战性。这正是 Instructor 库大放异彩的地方——它允许您使用 Python 类型注解轻松地将 LLM 输出映射到结构化数据。

Instructor 背后的核心思想非常简单:它只是对 OpenAI Python SDK 的一个补丁,增加了一个 response_model 参数。这个参数允许您传入一个 Pydantic 模型,该模型描述了您希望 LLM 输出映射到的结构。Pydantic 模型是使用标准的 Python 类型提示定义的,因此无需学习任何新语法。

这里是一个从 LLM 提取结构化用户数据的示例

from pydantic import BaseModel
import instructor


class User(BaseModel):
    name: str
    age: int


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

user = client.chat.completions.create(
    model="gpt-3.5-turbo",
    response_model=User,  # (1)!
    messages=[
        {
            "role": "user",
            "content": "Extract the user's name and age from this: John is 25 years old",
        }
    ],
)

print(user)  # (2)!
#> User(name='John', age=25)
  1. 请注意,现在我们有一个新的 response_model 参数,可以将其传递给 completions.create 方法。这个参数允许我们指定希望 LLM 输出映射到的结构。在本例中,我们正在使用一个名为 User 的 Pydantic 模型,它描述了用户的姓名和年龄。
  2. completions.create 方法的输出是一个 User 对象,与我们在 response_model 参数中指定的结构相匹配,而不是一个 ChatCompletion。

其他特性

Instructor 在库内外的其他特性包括

  1. 能够在重试逻辑中使用 Tenacity
  2. 能够使用 Pydantic 的验证上下文
  3. 具有正确类型的并行工具调用
  4. 流式传输部分可迭代数据。
  5. 还可以返回原始类型和联合类型!
  6. 在我们的集成指南中有大量的代码示例集教程和全面的文档

Instructor 的广泛适用性

Instructor 的主要优势之一是它被设计为对官方 OpenAI Python SDK 的轻量级补丁。这意味着它不仅可以轻松集成到 OpenAI 的托管 API 服务,还可以集成到任何公开与 OpenAI SDK 兼容接口的提供商或平台。

例如,像 TogetherOllamaGroqllama-cpp-python 等提供商都在底层使用或模仿 OpenAI Python SDK。通过 Instructor 的零开销补丁方法,团队可以立即开始从这些提供商中的任何一个获取结构化数据输出。无需进行定制集成工作。

直接访问 messages 数组

与其他抽象掉 messages=[...] 参数的库不同,Instructor 提供直接访问。这种直接方法有助于进行复杂的 Prompt 工程,确保与 OpenAI 不断发展的消息类型兼容,包括将来对图像、音频或视频的支持,而没有字符串格式化的限制。

低抽象

Instructor 之所以如此强大,在于它与现有的 OpenAI SDK 代码无缝集成。要使用它,您只需在您的 OpenAI 客户端实例上调用 instructor.from_openai(),然后就可以继续使用 response_model 参数了。无需进行复杂的重构或理解新的抽象概念。

这种渐进式、零开销的采用路径使得 Instructor 非常适合将结构化 LLM 输出注入到现有的基于 OpenAI 的应用程序中。您可以从简单的 Prompt 开始提取数据模型,然后逐步扩展到更复杂的层次模型、流式输出和自定义验证。

如果您最终认为 Instructor 不太适合,移除它也很简单,只需不应用该补丁即可!直接使用 OpenAI SDK 的熟悉度和灵活性是其核心优势。

Instructor 解决了非结构化 LLM 输出带来的“字符串地狱”。它允许团队通过将其文本映射到类型安全、经过验证的数据结构,轻松地发挥 GPTs 等工具的全部潜力。如果您希望从 LLM 中获得更结构化的价值,不妨试试 Instructor!