使用 Together 和 Zod 的结构化输出¶
开源 LLM 正变得越来越流行,Together 发布 Mistral 模型使得使用 JSON schema 获取结构化输出成为可能。您无需依赖模型的默认输出模式,而是可以利用 JSON schema 获取结构化输出。这种方法比大量的提示工程更省时。
阅读完这篇博文后,您将学习如何有效地将 instructor 与 Togethers 结合使用。但在继续之前,我们首先探讨一下“补丁(patching)”的概念。
理解模式¶
Instructor 的补丁增强了 OpenAI API 的以下功能,您可以在这里了解更多详情。对于 Togethers,它们支持 JSON_SCHEMA
和 TOOLS
模式。通过 instructor,我们将能够使用以下功能:
- 在
create
调用中使用response_model
返回 Zod schema。 - 在
create
调用中使用max_retries
,在调用失败时使用退避策略重试。
Anyscale¶
好消息是 Anyscale 使用与 OpenAI 相同的客户端,并且其模型也支持其中一些输出模式!
获取访问权限
如果您想亲自尝试,请访问 Together Compute 网站。您可以在这里开始。
让我们探索一下 Together 庞大模型库中的一个模型吧!
import Instructor from "@instructor-ai/instructor"
import OpenAI from "openai"
import { z } from "zod"
const property = z
.object({
name: z.string(),
value: z.string(),
})
.describe("A property defined by a name and value");
const UserSchema = z.object({
age: z.number(),
name: z.string(),
properties: z.array(property),
})
const oai = new OpenAI({
baseURL: "https://api.together.xyz",
apiKey: process.env.TOGETHER_API_KEY ?? undefined,
})
const client = Instructor({
client: oai,
mode: "JSON_SCHEMA",
})
const user = await client.chat.completions.create({
messages: [{ role: "user", content: "Harry Potter" }],
model: "mistralai/Mixtral-8x7B-Instruct-v0.1",
response_model: { schema: UserSchema, name: "UserSchema" },
max_retries: 3,
})
console.log(user);
/**
{
age: 17,
name: "Harry Potter",
properties: [
{
name: "House",
value: "Gryffindor",
}, {
name: "Wand",
value: "Holly and Phoenix feather",
}
],
}
**/
您可以在这里找到有关 Togethers 输出模式支持的更多信息。