推論與服務
文法引導解碼(guided decoding with grammars)
當你需要模型輸出是合法的 JSON、符合某個正規表達式、或遵循某個形式文法時,光靠提示去期望它守規矩並不可靠——一個跑掉的 token 就會弄壞剖析器。文法引導解碼則讓不合法的輸出在構造上就不可能發生。它在每個生成步驟計算哪些 token 能在目標結構下合法地延續目前的部分輸出,並在採樣前把其餘所有 token 的機率遮罩成零,於是模型只可能選到文法允許的延續。
機制上,這個結構——一條正規表達式、一個上下文無關文法、或一份 JSON schema——會被編譯成一台有限狀態機或下推自動機,其狀態隨著 token 被吐出而推進。難點在於合法的符號活在文法空間,而模型在 token 空間採樣,且單一個 token 可能橫跨好幾個文法符號、或把一個符號切開,所以約束必須投影到詞彙表上。現代引擎會預先算好這些 token 遮罩,使每一步的額外開銷趨近於零,讓結構化生成在推論時幾乎免費。
約束表面形式並不約束意義:輸出保證可被剖析,但裡面的值仍可能是錯的、或是幻覺。
文法引導解碼保證的是語法合法,從不保證語意正確——一個格式完美的 JSON 物件裡仍可能裝著幻覺出來的值。
又稱
另見