跳到内容

使用 Instructor 和 Together AI 生成结构化输出,完整指南

本指南演示如何将 Together AI 与 Instructor 结合使用来生成结构化输出。您将学习如何利用 Together 模型的功能调用(function calling)来创建类型安全的响应。

开源大型语言模型(LLMs)正日益流行,随着 Together 发布支持功能调用的模型,获取结构化输出变得前所未有的容易。

通过阅读本博客文章,您将学会如何有效地将 instructor 与 Together AI 结合使用。但在开始之前,我们先探讨一下“补丁”(patching)的概念。

其他语言

本博客文章以 Python 编写,但其概念也适用于其他语言,目前我们已支持 JavascriptElixirPHP

补丁

Instructor 的补丁通过以下特性增强了 openai API:

  • create 调用中使用 response_model 参数,返回一个 pydantic 模型。
  • create 调用中使用 max_retries 参数,在调用失败时使用指数回退策略进行重试。

了解更多

欲了解更多信息,请参阅文档。要理解将 Pydantic 与 Instructor 结合使用的好处,请访问为何使用 Pydantic 页面的技巧和窍门部分。

Together AI

好消息是 Together 使用相同的 OpenAI 客户端,并且其模型也支持其中的一些输出模式!

获取访问权限

如果您想亲自尝试,请访问 Together AI 网站。您可以在此开始使用。

import os
import openai
from pydantic import BaseModel
import instructor

client = openai.OpenAI(
    base_url="https://api.together.xyz/v1",
    api_key=os.environ["TOGETHER_API_KEY"],
)


# By default, the patch function will patch the ChatCompletion.create and ChatCompletion.create methods to support the response_model parameter
client = instructor.from_openai(client, mode=instructor.Mode.TOOLS)


# Now, we can use the response_model parameter using only a base model
# rather than having to use the OpenAISchema class
class UserExtract(BaseModel):
    name: str
    age: int


user: UserExtract = client.chat.completions.create(
    model="mistralai/Mixtral-8x7B-Instruct-v0.1",
    response_model=UserExtract,
    messages=[
        {"role": "user", "content": "Extract jason is 25 years old"},
    ],
)

assert isinstance(user, UserExtract), "Should be instance of UserExtract"
assert user.name.lower() == "jason"
assert user.age == 25

print(user.model_dump_json(indent=2))
"""
{
  "name": "jason",
  "age": 25
}
"""
{
    "name": "Jason",
    "age": 25,
}

您可以在此处找到更多关于 Together 功能调用支持的信息。