發布日期:2025 年 5 月 13 日
大型語言模型 (LLM) 有時會回覆冗長的回覆,這點眾所皆知。即使您要求模型只回答「是」或「否」,模型仍可能會回覆友善的輸出內容,並提供您要求以外的資訊,例如:「當然,答案是:是。」
為解決這個問題,提示 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 結構定義驗證工具,驗證 JSON 物件是否符合產生的 JSON 結構定義,例如線上的 Newtonsoft JSON 結構定義驗證工具。
將 JSON 結構定義傳遞至 Prompt API
為確保模型遵循要求的 JSON 結構定義,您必須將 JSON 結構定義做為引數傳遞至 prompt()
或 promptStreaming()
方法的選項物件,做為 responseConstraint
欄位的值。
以下是 JSON 結構定義的簡單範例,可確保模型在分類時會以 true
或 false
回應,判斷這類 Mastodon 貼文是否與陶藝有關。
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 提供結構化輸出支援,可讓大型語言模型的回覆更容易預測。開發人員現在可以假設模型回應是有效的 JSON,而非從 Markdown 回應或其他後續處理中擷取物件。
這可讓內建 AI 更接近雲端 API,並享有執行本機用戶端 AI 的所有優點。