文档
结构化响应
您可以通过向 .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 模式强制实现结构化响应。
// 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 模式,您将收到一个不符合模式的无效字符串。
本页内容
使用 zod 模式进行强制
- 定义 zod 模式
- 生成结构化响应
使用 JSON 模式进行强制
- 定义 JSON 模式
- 生成结构化响应