文档

代理流

文本嵌入

分词

管理模型

模型信息

API 参考

结构化响应

您可以通过向 .respond() 方法提供模式(JSON 或 zod)来强制 LLM 返回特定的响应格式。这确保了模型的输出符合您提供的模式。

使用 zod 模式进行强制

如果您希望模型生成符合给定模式的 JSON,建议使用 zod 提供该模式。当提供 zod 模式时,预测结果将包含一个额外的字段 parsed,其中包含已解析、已验证和已类型化的结果。

定义 zod 模式

import { z } from "zod";

// A zod schema for a book
const bookSchema = z.object({
  title: z.string(),
  author: z.string(),
  year: z.number().int(),
});

生成结构化响应

const result = await model.respond("Tell me about The Hobbit.",
  { structured: bookSchema },
  maxTokens: 100, // Recommended to avoid getting stuck
);

const book = result.parsed;
console.info(book);
//           ^
// Note that `book` is now correctly typed as { title: string, author: string, year: number }

使用 JSON 模式进行强制

您也可以使用 JSON 模式强制实现结构化响应。

定义 JSON 模式

// A JSON schema for a book
const schema = {
  type: "object",
  properties: {
    title: { type: "string" },
    author: { type: "string" },
    year: { type: "integer" },
  },
  required: ["title", "author", "year"],
};

生成结构化响应

const result = await model.respond("Tell me about The Hobbit.", {
  structured: {
    type: "json",
    jsonSchema: schema,
  },
  maxTokens: 100, // Recommended to avoid getting stuck
});

const book = JSON.parse(result.content);
console.info(book);
注意事项

结构化生成通过限制模型仅生成符合所提供模式的 token 来工作。这在正常情况下能确保有效输出,但存在两个重要的限制:

  • 模型(特别是较小的模型)有时可能会陷入未闭合的结构(如开放括号)中,当它们“忘记”自己处于此类结构中并且由于模式要求而无法停止时。因此,建议始终包含 maxTokens 参数以防止无限生成。

  • 模式符合性仅在完整、成功的生成中得到保证。如果生成中断(由于取消、达到 maxTokens 限制或其他原因),输出很可能会违反模式。对于 zod 模式输入,这将引发错误;对于 JSON 模式,您将收到一个不符合模式的无效字符串。