发布时间:2025 年 5 月 13 日
大型语言模型 (LLM) 有时会生成冗长的回答,这一点众所周知。即使您告知模型仅回答“true”或“false”,模型也可能会生成友好的输出,并且超出您的要求,例如:“当然,答案是:true。”
为了应对这一挑战,Prompt API 可让您通过将 JSON 架构 传递给 LanguageModel.prompt() 和 LanguageModel.promptStreaming() 方法,指定模型回答的 JSON 输出格式。从 Chrome 137 版开始,支持结构化输出。
什么是 JSON 架构
JSON 架构是一种词汇表,可大规模实现 JSON 数据的一致性、有效性和互操作性。在数据交换方面,JSON 架构是一种强大的标准,用于定义 JSON 数据的结构和规则。它使用一组关键字来定义数据的属性。
JSON 架构是确保结构化输出的行业标准, OpenAI API 和 Gemini API等都使用此标准。
例如,您提示模型为在线社交网络(例如 Mastodon)上的帖子分配最多三个主题标签。理想的输出可能类似于以下 JSON:
{
"hashtags": [
"#pottery",
"#dyi"
]
}
此请求的输出对象形状对应的 JSON 架构如下所示:
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
此 JSON 架构定义了对象的结构,该对象必须包含具有以下约束的 hashtags 字段:
"type": "object":根值必须是 JSON 对象。"properties": { "hashtags": ... }:该对象可以(并且在本例中 必须)具有名为hashtags的属性。"hashtags":"type": "array":值必须是数组。"maxItems": 3:该数组最多可以包含 3 个项。"items": { "type": "string", "pattern": "^#[^\\s#]+$" }:数组中的每个项都必须是与给定正则表达式模式^#[^\\s#]+$匹配的字符串:^#→ 必须以#开头。[^\\s#]+→ 后跟一个或多个不是空格 (\s) 或另一个#的字符。$→ 必须在此处结束。
"required": ["hashtags"]:该对象必须包含hashtags属性。"additionalProperties": false:不允许使用主题标签以外的其他属性 。
如需全面了解该格式的功能,请参阅 JSON 架构 基础知识 文档 。
事实上,LLM 非常擅长创建 JSON 架构。您只需在提示中用自然语言描述约束条件,并提供有效的 JSON 对象示例,就完成了一半的工作。然后,您可以使用 JSON 架构验证器(例如在线 Newtonsoft JSON 架构 验证器)针对生成的 JSON 架构验证 JSON 对象。

将 JSON 架构传递给 Prompt API
为了确保模型遵循请求的 JSON 架构,您需要将 JSON 架构作为实参传递给 prompt() 或 promptStreaming() 方法的选项对象,作为 responseConstraint 字段的值。
下面是一个非常基本的 JSON 架构示例,可确保模型在对给定的消息(例如此
Mastodon 帖子)是否与
陶器相关进行分类时,回答
true 或 false。
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
支持可预测的输出
Prompt API 的结构化输出支持使 LLM 的回答更具可预测性。开发者现在可以假定模型的回答是有效的 JSON,而无需从 Markdown 回答或其他后处理中提取对象。
这使内置 AI 更接近基于云的 API,并具有运行本地客户端 AI 的所有优势。