跳到内容

使用 Together 和 Zod 的结构化输出

开源 LLM 正变得越来越流行,Together 发布 Mistral 模型使得使用 JSON schema 获取结构化输出成为可能。您无需依赖模型的默认输出模式,而是可以利用 JSON schema 获取结构化输出。这种方法比大量的提示工程更省时。

阅读完这篇博文后,您将学习如何有效地将 instructor 与 Togethers 结合使用。但在继续之前,我们首先探讨一下“补丁(patching)”的概念。

理解模式

Instructor 的补丁增强了 OpenAI API 的以下功能,您可以在这里了解更多详情。对于 Togethers,它们支持 JSON_SCHEMATOOLS 模式。通过 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 输出模式支持的更多信息。