大型語言模型工程

結構化輸出解碼(structured output decoding)

如果下游系統要求嚴格的 JSON 或特定語法,一個只是被好言相勸去配合的模型,偶爾會冒出一個多餘的逗號、一個漏掉的大括號、或在該放資料的地方放了散文,於是解析器就壞了。結構化輸出解碼從根本上消除這個風險。它不是期望模型守住格式,而是約束生成,使得只有能讓輸出維持合法的詞元才被允許——「產生格式錯誤輸出」這件事的可能性本身就被工程掉了。

其機制在解碼時作用於 logits。每一步,一個從目標綱要推導出的驗證器——一個上下文無關文法、一個正規表達式、或一個被編譯成有限狀態機的 JSON 綱要——會判定哪些下一詞元仍可能導向一個良構字串,而其餘每個詞元的 logit 在取樣前都被遮罩成負無窮。於是模型只在合法的續寫之間自由取樣。詞元邊界處需要留意,像詞元修復(token healing)這類技術會把分詞器的切塊與文法的字元層規則調和起來。

這保證了語法合法性,並支撐起可靠的工具呼叫與函式呼叫——那裡的引數必須精確可解析。兩個誠實的提醒:它約束的是形式、不是真相——一個符合綱要的物件仍可能事實錯誤——而強迫模型吐出它覺得不可能的詞元,可能微妙地扭曲它的分佈,偶爾使內容品質遜於一個單純被訓練好把自己格式化的模型。

約束解碼修的是語法、不是語意:它無法讓模型說對的事,只能讓它說出可被解析的東西。

又稱
constrained decodinggrammar-constrained decoding結構化輸出解碼