使用 Instructor 和 Together AI 生成结构化输出,完整指南¶
本指南演示如何将 Together AI 与 Instructor 结合使用来生成结构化输出。您将学习如何利用 Together 模型的功能调用(function calling)来创建类型安全的响应。
开源大型语言模型(LLMs)正日益流行,随着 Together 发布支持功能调用的模型,获取结构化输出变得前所未有的容易。
通过阅读本博客文章,您将学会如何有效地将 instructor 与 Together AI 结合使用。但在开始之前,我们先探讨一下“补丁”(patching)的概念。
其他语言
本博客文章以 Python 编写,但其概念也适用于其他语言,目前我们已支持 Javascript、Elixir 和 PHP。
补丁¶
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 功能调用支持的信息。