發布日期: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 結構定義驗證器,根據產生的 JSON 結構定義驗證 JSON 物件,例如線上 Newtonsoft 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 的所有優點。