對回答本身的檢查
回答送出之前要過的那幾道檢查——每一道攔的是什麼、多久響一次,以及為什麼「經常響」的檢查是 bug 而不是盡責。
檢索決定模型能看到什麼。這一頁講的是它寫完之後的事:最後一個字生成完,到答案出現在別人螢幕上,中間的那一刻。
這一層之所以存在,來自一個不太舒服的觀察:提示詞裡的規則只是一個請求。 你可以在每一輪的開頭寫上「絕不給出材料裡沒有的數字」,多數輪次會照辦,而沒照辦的那幾輪,恰恰是一個細心的讀者本來能看出來的。所以真正管用的規則不寫成請求,而寫成對成品文字的檢查——在程式碼裡跑,那句話要麼在材料裡,要麼不在。
一道檢查的形狀
這裡每一道檢查都由三部分組成,順序固定,而順序正是它便宜的原因:
- 確定性前置。 對剛寫出來的回答做字串和樣式比對——不打模型、不走網路。絕大多數時候它說「沒有這個形狀」,檢查就此結束。
- 命中之後才花的那一次抽取呼叫。 讓模型從材料裡逐字抄出句子——不讓它判斷,也不讓它下結論。「把所有說明這件事准不准的句子抄出來」是一個可核對的問題;「這個回答對不對」不是。
- 判定回到程式碼。 抄出來的句子必須逐字出現在材料裡才算數。少了這一步比對,判官可以編一句話,用它推翻一個正確的回答——這不是假設,正是那一步存在的原因。
經常響的檢查是 bug。 這裡有一道曾經靠「大寫詞後面跟一個代號」來判斷回答有沒有提到某個分級。在法規文字裡,這個形狀會撞上條款引用、貨幣代碼、化學登記號、月份名——以及 within 這個詞,例如「必須在 30 個工作日內提出申請」。它在 100 輪裡響了 57 次,每響一次就是一次抽取呼叫加一次完整重答,而那些回答本來是對的。改成認真正的分級詞之後,它響 4 次。命中率高的檢查不是更盡責,是量錯了對象,而且是在拿你的回應時間去量。
它們各自攔什麼
每一道都是因為有一條不該送出去的回答送出去了才存在的。觸發率是在存下來的真實回答上量的,而且刻意壓得很低。
| 回答做了什麼 | 為什麼要緊 | 觸發率 |
|---|---|---|
| 說材料明確允許或明確禁止某件事,而材料裡沒有這樣一句話 | 「材料裡寫著 X」是一句關於原文的斷言,可以逐字核對 | 279 條裡 2 條 |
| 答**「會被接受」,而材料白紙黑字寫著不會被接受** | 這是這個產品最糟的一種錯:客戶照著它去準備申報,然後被退回 | 300 條裡 1 條 |
| 給出一個在任何召回片段裡都找不到的數字 | 一個旁邊帶著引註的數字,是智慧代理能給出的最有說服力的錯誤 | — |
| 給了數字卻沒說是哪個法域,而材料全部來自同一個法域 | 各國費率和時限不同,一個不帶歸屬的數字會被用錯地方 | — |
| 引的是唯一那片出自別的文件的材料,而問題點名的是另一份 | 兩份文件常有措辭幾乎一樣的條目,而措辭更像的往往是錯的那一份 | 399 條裡 2 條 |
| 引了材料裡的例外條款,然後用一般慣例把它推翻 | 材料讀對了,又被論證掉了 | 109 條裡 1 條 |
| 整段回答就是一次工具呼叫,而不是一個答案 | 原始呼叫語法絕不能到達讀者——見在開源模型上執行 | — |
表裡的破折號不是省略。那幾道檢查早於這裡說的這套測量紀律,觸發率沒有按同一種方式數過;把它們列出來是因為它們確實在跑,而不是因為能引一個數字。
命中之後會發生什麼
帶著同一份材料重答一次,外加一句說明第一次錯在哪。 不是刪掉,也不是換成一句道歉。
這是刻意的選擇。能回答這個問題的材料通常還在那兒——第一次是夠過去了、讀了相鄰那一行、或者含糊其辭。拿同樣的片段重答能把它撈回來,拒答不能。
那句糾正詞遵守一條用學費換來的規矩:它只說這一輪要交出什麼,絕不說不要做什麼。 早先有一版糾正詞把不該有的格式用三個例子擺了出來,然後請模型不要產出那種格式。它照著又寫了一次,讀者拿到的是一句道歉——而答案就在召回的材料裡,一字不差。
只說「你錯了」的糾正,往往什麼都改變不了。 有一道檢查攔的是「引了出自別的文件的那一片」。只這麼告訴模型,它三次裡三次照原樣再答一遍——因為它自認為用的就是那份文件。真正起作用的是把它推不出來的那個對應關係給它:這幾個片號出自你被問的那份文件,你引的那一片不是。 即便如此,它也只有大約三分之一的時候能改對。這道檢查如實說明自己是「改善」而不是「解決」。
這一層不做什麼
- 它不檢查回答是不是真的。 它檢查回答關於材料的斷言是不是真的。這是兩件事,而只有後一件在這裡判得出來。
- 它在多數輪次不響。 這是設計目標。上面那些低觸發率是設計的意義,不是它的侷限。
- 它不能替代材料本身是對的。 如果能定這道題的那一片從來沒被召回,任何對輸出的檢查都變不出它來。那是檢索那一層的問題,在那裡解決,或者根本不解決。
- 每一道檢查都「判不出來就放行」。 抽取呼叫出錯或者回傳看不懂的東西,回答照原樣送出去。一個會因為後端變慢而擋住回答的校驗層,比它要防的那件事更糟。