計思路與工程落地)
Co-Scientist 可靠性模塊能把論文結(jié)果幻覺率從 46% 降到 4%這個數(shù)據(jù)最值得關(guān)注的不是“AI 進(jìn)步了”而是它第一次把科研場景里的幻覺問題當(dāng)成一個可量化、可驗證、可攔截的工程問題來處理。對于正在做 RAG、智能體、自動報告生成或者任何用大模型產(chǎn)出嚴(yán)肅內(nèi)容的人來說這套思路比“換更大模型”更有參考價值。我準(zhǔn)備從問題根源、可靠性模塊的設(shè)計邏輯、評測方法和可遷移的工程經(jīng)驗四個角度拆開講。1. Co-Scientist 可靠性模塊到底解決什么問題1.1 AI 寫論文或研究結(jié)論時真正的風(fēng)險是“看起來合理但結(jié)果不存在”LLM 生成內(nèi)容時有一個天然特點它追求的是“文本層面的連貫和自洽”而不是“事實層面的成立”。在聊天場景里這種偏差最多讓你覺得回答不夠準(zhǔn)確。但到了科研場景問題會被放大很多倍模型可能引用一篇不存在的論文可能把兩個實驗的條件記混可能根據(jù)一個統(tǒng)計學(xué)上不顯著的數(shù)據(jù)點推出一個看起來很漂亮的結(jié)論。很多時候這種錯誤不是模型“沒有數(shù)據(jù)”而是它在組合已有知識時把相關(guān)性寫成了因果性把推測寫成了確定性。普通人閱讀一段文字時很難在看到結(jié)論的同時快速核對每一個出處、參數(shù)和樣本量。于是模型生成的研究結(jié)果就會披著“論文格式的外衣”通過人的初篩。Co-Scientist 這類系統(tǒng)之所以需要一個獨立的可靠性模塊核心原因就在這里生成能力越強格式越像論文越需要有一個不相信生成結(jié)果的檢查環(huán)節(jié)。1.2 46% 到 4%是一個工程化驗證層的收益不是模型能力提升的收益如果只看標(biāo)題容易誤以為這是換了更好的大模型所以幻覺率下降了。但更合理的理解是Co-Scientist 把“生成”和“驗證”分成兩個獨立階段。生成模塊負(fù)責(zé)提出假設(shè)、組織論證可靠性模塊負(fù)責(zé)對生成結(jié)果進(jìn)行懷疑、校驗和過濾。換個容易理解的說法你不能讓一個寫文章的人同時擔(dān)任自己的審稿人因為他在心理上會對自己的行文邏輯有很強的慣性。可靠性模塊要做的就是找另一個視角專門盯著論文里“結(jié)果數(shù)據(jù)是從哪里來的、能不能復(fù)現(xiàn)、參考文獻(xiàn)是否真實、推斷是否超過數(shù)據(jù)支持范圍”這些問題。46% 到 4% 的下降說明絕大多數(shù)被生成模塊“自信地寫出來”的不可靠結(jié)果是可以被一套針對性的驗證規(guī)則識別出來的。那些剩下 4% 的漏網(wǎng)之魚才是真正難處理的硬骨頭。1.3 先建立三個判斷標(biāo)準(zhǔn)再談相信 AI看這類系統(tǒng)時我一般會先問三個問題。第一這里的“幻覺率”是怎么定義的。是指生成的整篇論文完全虛構(gòu)還是指論文里存在一處不真實的數(shù)據(jù)引用這兩種定義下統(tǒng)計結(jié)果會差很多。第二下降后的 4% 是在什么測試集上得到的。如果測試集里主要是常見實驗范式可靠性模塊可以靠檢索知識庫攔截掉很多錯誤到了真正冷門的學(xué)科前沿知識庫里沒有答案攔截難度會明顯上升。第三可靠性模塊攔截后被刪掉的內(nèi)容里有沒有包含正確的創(chuàng)新點。如果為了追求低幻覺率把所有沒有依據(jù)的新想法都過濾掉那科研助手就變成了一個復(fù)讀機失去了輔助探索的價值。所以這篇文章里最值得吸收的不是“Co-Scientist 多厲害”而是它如何通過模塊化設(shè)計在生成結(jié)果和最終輸出之間加了一道可度量的防線。2. 可靠性模塊背后的工程鏈路從生成、自檢到證據(jù)核驗2.1 為什么要把生成與可靠性拆成兩個模塊把生成和驗證拆開是這套設(shè)計里最重要的一步。如果讓同一個模型在生成時同時自我檢查效果往往不穩(wěn)定。原因不難理解模型在生成后續(xù)內(nèi)容時已經(jīng)被前文帶入了固定的敘事方向它很難中途停下來質(zhì)疑自己剛剛寫出的樣本量是否正確、結(jié)論是否站得住腳。獨立的可靠性模塊則不同。它接收到的是一段完整的、已經(jīng)生成的文本它的任務(wù)只有一個嘗試證偽。證偽這個動作天然需要“外部知識”和“邏輯規(guī)則”參與而不是靠生成時的語言慣性。在工程落地時這種拆分還有一個好處生成模塊和可靠性模塊可以分別升級。生成模塊用更大更新的模型可靠性模塊則可以引入搜索引擎、知識圖譜、論文數(shù)據(jù)庫、領(lǐng)域規(guī)則甚至人工審閱。兩者耦合度低迭代和排障都更快。2.2 常見的可靠性校驗方式雖然原始材料沒有給出詳細(xì)實現(xiàn)但一個針對科研論文的可靠性模塊通常需要覆蓋至少四個層面的驗證。第一層是事實來源核驗。模型生成的內(nèi)容里出現(xiàn)實驗數(shù)據(jù)、論文引用、統(tǒng)計結(jié)果時系統(tǒng)會去檢索真實數(shù)據(jù)庫或可信知識源比較引用是否存在、數(shù)字是否一致。很多看起來驚人的結(jié)論在這一層就會被發(fā)現(xiàn)是“編造了參考文獻(xiàn)”或“張冠李戴”。第二層是內(nèi)部一致性核驗。模型可能會在一段話里說樣本量是 100在另一段話里又說整個實驗由 80 個樣本完成。這種矛盾不涉及外部知識是純文本層面的邏輯漏洞也最容易通過規(guī)則模型識別。第三層是統(tǒng)計推斷邊界核驗。即使實驗數(shù)據(jù)是真實的可靠性模塊也要檢查結(jié)論是否超出了數(shù)據(jù)能夠支持的范圍。比如相關(guān)數(shù)據(jù)不能直接寫成交互影響單組實驗結(jié)果不能直接推廣到全體人群。第四層是領(lǐng)域?qū)<乙?guī)則核驗??蒲蓄I(lǐng)域往往有很強的格式和專業(yè)規(guī)范比如對照組設(shè)置、效應(yīng)量報告、倫理審查號等。可靠性模塊可以把這些規(guī)則寫成檢查器對生成內(nèi)容做硬性約束。2.3 “論文結(jié)果幻覺率”怎么定義和評估幻覺率不是幻覺。評估它的第一步是把概念操作化也就是明確“什么樣的輸出算一次幻覺”。比較常見的定義有兩種一種是按論文粒度統(tǒng)計生成的論文若包含一個虛構(gòu)引用或關(guān)鍵數(shù)據(jù)錯誤就算一篇幻覺論文另一種是按語句粒度統(tǒng)計評估模型生成的每一個陳述句是否都能被真實資料或合理邏輯支持。按第一種計算更接近于題目中“論文結(jié)果幻覺率”的口徑按第二種計算能更細(xì)致地定位錯誤類型。評測時一般先準(zhǔn)備一個人工審核的測試集。把模型生成結(jié)果交給領(lǐng)域?qū)<覍<覍φ照鎸崝?shù)據(jù)和文獻(xiàn)來源逐條標(biāo)注哪些是可信的、哪些是編造的、哪些是推斷過度的。再將標(biāo)注結(jié)果作為金標(biāo)準(zhǔn)計算模型評價指標(biāo)與人類判斷的一致性最后算出幻覺率。2.4 判斷可靠性模塊是否有效不能只看下降率一個可靠性模塊如果把 100 條結(jié)果全部攔截掉幻覺率也可以降到 0但系統(tǒng)就變得沒有任何價值。所以評估時必須同時關(guān)注兩個方向精確率被判定為可靠的內(nèi)容是不是真的可靠。召回率真正可靠的創(chuàng)新內(nèi)容有沒有被錯誤誤殺。一個成熟的可靠性模塊在報告“幻覺率下降”時應(yīng)該同時報告誤殺率或保留率。如果幻覺率從 46% 降到 4%但有效假設(shè)的保留率也從 80% 掉到 40%那就說明驗證規(guī)則過嚴(yán)生產(chǎn)環(huán)境里沒法使用。指標(biāo)含義關(guān)注點幻覺率不可靠結(jié)果占總生成結(jié)果比例越低越好但要與保留率一起看可靠結(jié)果召回率可靠內(nèi)容中多少被保留下來防止把創(chuàng)新想法誤刪人工接受率人工審閱后認(rèn)可的結(jié)果比例能反映系統(tǒng)真實可用性單條驗證耗時每次驗證需要多長時間決定能否應(yīng)用于大規(guī)模生成3. 這種可靠性設(shè)計能遷移到日常 AI 工作流嗎3.1 不只是科研場景需要可靠性模塊很多人看到 Google 論文會覺得離自己太遠(yuǎn)。實際上任何讓 LLM 直接輸出“結(jié)論型內(nèi)容”的場景都存在類似的幻覺風(fēng)險。舉幾個常見例子開發(fā)者在項目里讓模型根據(jù)代碼倉庫生成技術(shù)方案模型很可能會虛構(gòu)不存在的 API 或過時的依賴版本。運營同學(xué)讓模型根據(jù)銷售數(shù)據(jù)寫復(fù)盤報告模型可能把一個未經(jīng)驗證的字段當(dāng)成核心指標(biāo)來解讀。產(chǎn)品經(jīng)理讓模型總結(jié)用戶訪談模型可能把不同受訪者的表述合并成“用戶普遍認(rèn)為”。這些場景都沒有論文那么嚴(yán)肅但錯誤邏輯是一樣的生成結(jié)果如果缺少一個外部核查環(huán)節(jié)輕則返工重則誤導(dǎo)決策??煽啃阅K要解決的不只是論文造假問題而是“生成式系統(tǒng)如何對現(xiàn)實負(fù)責(zé)”的問題。3.2 遷移思路一給答案加上依據(jù)、置信度和限制條件最容易落地的一步是強制要求模型在給出結(jié)論時列出依據(jù)來源和置信程度。我在實際使用中會這樣設(shè)置指令當(dāng)模型需要回答事實性內(nèi)容或做出推斷時先輸出“依據(jù)”再輸出“結(jié)論”最后輸出“可能的例外情況”。依據(jù)可以來自用戶輸入的上下文、本地數(shù)據(jù)庫或網(wǎng)絡(luò)檢索結(jié)果。如果模型找不到依據(jù)就明確標(biāo)注“當(dāng)前資料不足”而不是強行編一個。這條規(guī)則之所以有效是因為它把一個隱性問題變成了顯性問題。模型如果被迫說清楚“我為什么這么判斷”它自己就會減少很多無依據(jù)的編排。3.3 遷移思路二用另一種模型或規(guī)則做獨立的紅隊復(fù)核Google 把可靠性模塊從生成模型里拆出來思路同樣適用于日常工作流。一個比較直接的做法是讓模型 A 負(fù)責(zé)生成答案或報告讓模型 B 負(fù)責(zé)審校。模型 B 接收到的任務(wù)是專門找出模型 A 輸出里的錯誤比如引用不存在、數(shù)字與資料不符、結(jié)論超出依據(jù)范圍。兩個模型之間沒有共享生成鏈路相當(dāng)于做了一次交差驗證。這種方法不需要復(fù)現(xiàn) Google 的完整系統(tǒng)只需要在代碼里串聯(lián)兩次調(diào)用。如果為了控制成本也可以不讓模型 B 全部重新分析而是只用幾個規(guī)則檢查器比如“正則表達(dá)式檢查參考文獻(xiàn)格式”“調(diào)用搜索 API 檢查關(guān)鍵名詞是否存在”“用語言模型檢查前后文是否存在數(shù)字矛盾”。3.4 遷移思路三把輸出拆成可核驗的最小單元可靠性校驗最怕的是“整段判斷”。因為一段話可能包含六個事實點和兩個推斷如果只給整體一個可信度分?jǐn)?shù)很難判斷錯誤出在哪里。更合理的做法是把輸出內(nèi)容拆成最小斷言單元逐條核驗。舉個例子模型結(jié)論“A 方案的轉(zhuǎn)化率比 B 方案高 12%。”拆開后可核驗點包括是否存在 A 方案和 B 方案數(shù)據(jù)來源是否顯示 12% 這個差異統(tǒng)計口徑是否相同結(jié)論中的“高”是統(tǒng)計顯著還是有誤差范圍在我的經(jīng)驗里只要把輸出拆細(xì)可靠性模塊的設(shè)計思路就會清晰很多。每個斷言對應(yīng)一個驗證器整體幻覺率自然就會降低。Google 的可靠性模塊能產(chǎn)生顯著效果很可能也采用了類似的細(xì)粒度拆解方式。4. 從 46% 降到 4%有哪些容易踩的坑4.1 第一個坑只看下降率不看測試集有多難任何評測都要回到測試集本身。如果測試問題都比較簡單比如常見知識、公開論文、成熟領(lǐng)域的標(biāo)準(zhǔn)實驗?zāi)敲醋尶煽啃阅K檢索知識庫就能解決絕大多數(shù)幻覺。這種情況下20% 到 2% 的下降都算不上了不起。真正考驗系統(tǒng)的是測試集里包含大量“模型不知道但裝作知道”的問題。例如最新才發(fā)表的論文模型預(yù)訓(xùn)練數(shù)據(jù)里根本沒有。小眾領(lǐng)域的術(shù)語公開資料很少。研究結(jié)論需要綜合多篇論文而不是單一事實可判斷。所以看到“降到 4%”時我會先去想測試集里有多少是這種高難度問題如果不清楚就不能直接得出“所有場景下都能降到 4%”的結(jié)論。4.2 第二個坑幻覺率的計算口徑不一致可靠性模塊上線之前必須有人專門定義清楚“幻覺”的歸類標(biāo)準(zhǔn)。不同人評同一段內(nèi)容很可能給出不同結(jié)論。比如模型把“實驗發(fā)現(xiàn)溫度升高會加速反應(yīng)”寫成了“溫度升高會顯著加速反應(yīng)”增加的“顯著”是否算幻覺模型在一篇綜述里引用了領(lǐng)域內(nèi)一致共識但沒有標(biāo)注具體文獻(xiàn)這算不算“引用缺失”如果評測者之間標(biāo)準(zhǔn)不一致前后兩次迭代對比就沒有意義。我的建議是在項目開始前先做一個標(biāo)注規(guī)范包含定義、例子、邊界情況和投票規(guī)則。至少選幾名標(biāo)注者分別標(biāo)注同一批數(shù)據(jù)計算標(biāo)注一致性。只有標(biāo)注穩(wěn)定了后續(xù)計算出來的幻覺率才有參考價值。4.3 第三個坑為了降低幻覺誤殺了真正的創(chuàng)新內(nèi)容科研場景里很多有價值的信息并不能直接寫在公開論文里它可能是邏輯推導(dǎo)的結(jié)果是基于已有實驗組合產(chǎn)生的新假設(shè)。這類內(nèi)容的可靠性很難用“檢索是否命中”來判斷。如果可靠性模塊只會執(zhí)行“沒有外部證據(jù)就拒絕”那么它能防住大部分幻覺但也把所有沒人研究過的新想法擋在門外。一個真正面向科研輔助的系統(tǒng)要區(qū)分三種情況論據(jù)錯誤引用不存在、數(shù)據(jù)算錯。這種情況必須攔截。推斷脆弱有一定依據(jù)但邏輯鏈不夠完整。這種情況不應(yīng)該拒絕而應(yīng)該降低置信度并提示核查方向。合理創(chuàng)新依據(jù)兩個已知領(lǐng)域的理論和實驗推出了新組合。即使沒有直接論文支持也應(yīng)該保留但標(biāo)記為“假設(shè)”而非“事實”??煽啃阅K的核心目標(biāo)是防止系統(tǒng)把假設(shè)包裝成結(jié)論而不是禁止假設(shè)本身。4.4 第四個坑驗證模塊本身的錯誤沒有被檢測可靠性模塊也是模型或規(guī)則組成的它同樣會出現(xiàn)誤判、漏判。尤其當(dāng)驗證器依賴檢索時如果檢索結(jié)果切題不準(zhǔn)、數(shù)據(jù)源存在錯誤就會把真實內(nèi)容標(biāo)記為錯誤或者把錯誤內(nèi)容判定為可信。所以凡是引入可靠性模塊的項目都應(yīng)該單獨記錄驗證模塊的“誤判案例”。比如模型明明是對的但驗證器因為關(guān)鍵詞搜索匹配到了別的領(lǐng)域把它標(biāo)記為虛構(gòu)。這種問題看起來是小概率一旦在特定領(lǐng)域高頻出現(xiàn)會嚴(yán)重傷害整個系統(tǒng)的可信度。我在跑這類流程時會定期抽樣查看被攔截的內(nèi)容把誤殺樣本放到一起分析然后調(diào)整驗證器的觸發(fā)條件和提示詞。5. 想在自己的項目里復(fù)現(xiàn)這種可靠性模塊怎么落地5.1 第一步拆任務(wù)分類別定義高/低風(fēng)險場景先不要急著寫代碼。先把你的項目里“模型生成了什么、錯誤會造成什么后果”寫清楚。不同業(yè)務(wù)場景對幻覺的容忍度完全不一樣。搜索結(jié)果摘要里有個別錯誤用戶可能覺得無所謂醫(yī)療建議或金融報告里出現(xiàn)錯誤代價就很高。可靠性模塊的復(fù)雜度和成本應(yīng)該按照“生成內(nèi)容的風(fēng)險等級”來設(shè)計不能全項目一刀切。對低風(fēng)險場景只做基礎(chǔ)提示詞要求即可對高風(fēng)險場景至少要有獨立檢查和人工兜底對中等風(fēng)險場景可以先接入簡單的規(guī)則校驗。5.2 第二步給每類輸出建立三個層面的驗證器根據(jù)我在實際項目里的經(jīng)驗一套可以工作的可靠性模塊通常由三層驗證器構(gòu)成。第一層是格式驗證器。負(fù)責(zé)檢查字段是否完整、數(shù)字格式是否正常、引用格式是否統(tǒng)一、是否有重復(fù)段落。這類檢查成本極低用規(guī)則或正則就能實現(xiàn)適合放在最前面。第二層是知識驗證器??梢允撬阉?API、知識庫查詢接口或向量檢索庫。它的任務(wù)是找到每一條核心結(jié)論的外部依據(jù)并計算依據(jù)與結(jié)論的匹配度。匹配度低且結(jié)論又使用肯定語氣時就把輸出標(biāo)記為“待人工復(fù)核”。第三層是邏輯驗證器。用規(guī)則或者大模型檢查前后一致性。比如前面說要統(tǒng)計 100 個樣本后面卻寫 90 個就是邏輯層的問題如果結(jié)論說“顯著提升”而后文數(shù)據(jù)集里沒有對照組就要標(biāo)記推斷過度。5.3 第三步為“幻覺”建立可量化的檢查清單每個項目都應(yīng)該有一份字段級的檢查清單而不只是一個整體評分。比如一個自動生成的研究摘要可以拆成以下字段字段檢查項是否通過研究背景是否包含對現(xiàn)有研究的概括檢查概括是否有文獻(xiàn)依據(jù)方法描述是否說清樣本量、分組方式檢查是否與數(shù)據(jù)文件一致結(jié)果數(shù)據(jù)核心數(shù)字是否來自輸入數(shù)據(jù)檢查是否被模型改寫或擴充結(jié)論表述結(jié)論是否支持真實數(shù)據(jù)檢查是否帶有限定語參考文獻(xiàn)引用是否真實存在檢查文獻(xiàn)名稱、作者、年份這樣設(shè)計的好處是即使模型輸出整體看起來很通順系統(tǒng)也能按字段從某個角度發(fā)現(xiàn)具體問題。5.4 第四步先跑小范圍測試再做回歸對比可靠性模塊上線時可能引入新的誤判最好的方法是先小范圍測試。做法比較簡單選過去一段時間里已經(jīng)由人工確認(rèn)過的樣本把它們同時送入“沒有可靠性模塊”和“有可靠性模塊”兩套系統(tǒng)。對照兩類結(jié)果看可靠性模塊是否降低了幻覺率是否誤傷了一些原本正確的內(nèi)容。這個測試集還可以作為未來的回歸測試集每次改動后都用它跑一遍防止一個地方的修正引發(fā)另一個地方的錯誤。常見情況下第一次接入可靠性模塊時幻覺率確實能明顯下降同時誤殺率也會上升。所以需要做一些微調(diào)讓錯誤判斷集中在對業(yè)務(wù)最關(guān)鍵的問題上。5.5 第五步記錄失敗樣本并持續(xù)更新驗證器我在之前的項目里有一個體會可靠性模塊不是一次性搭完就結(jié)束的它更像一個規(guī)則庫需要被持續(xù)維護(hù)。每當(dāng)你發(fā)現(xiàn)模型輸出的錯誤沒有被驗證器攔截下來都應(yīng)該做兩個動作。第一判斷這個錯誤能否被一條新的規(guī)則覆蓋第二把出錯樣本加入回歸測試集。重復(fù)幾次以后攔截能力會越來越接近你真正希望達(dá)到的水準(zhǔn)而不是只解決幾個一眼就能看出的典型問題。6. 如何正確看待 Google 這篇論文帶來的價值6.1 別只盯住 4%要關(guān)注“可靠性能否成為可評測的屬性”Co-Scientist 可靠性模塊最大的貢獻(xiàn)是把“減少 AI 幻覺”從一句口號變成了一種可以測量和迭代的系統(tǒng)能力。過去討論 AI 幻覺時常停留在“這個模型容易編數(shù)據(jù)”“那個模型相對更嚴(yán)謹(jǐn)”這種模糊判斷上。有了可計算的幻覺率團隊就可以建立評測基準(zhǔn)把“模型輸出是否可信”納入產(chǎn)品迭代的必需指標(biāo)。這一點對任何使用 LLM 的團隊都有借鑒意義。與其問“這個系統(tǒng)能達(dá)到多低的幻覺率”不如問一句“我在發(fā)布新版本之前有沒有一份測試集可以證明當(dāng)前輸出比上一個版本更可靠”6.2 可靠性模塊不是萬能盾牌它只能降低已知類型的錯誤要注意的是“幻覺率降到 4%”并不代表系統(tǒng)已經(jīng)把真實世界完全納入掌控。那些剩余 4% 的錯誤往往更隱蔽也更難處理。比如模型可能在多個斷言均真實的情況下把因果順序弄反可能在統(tǒng)計結(jié)果正確的情況下選擇了一個不適合該數(shù)據(jù)的統(tǒng)計模型也可能輸出了可靠但不重要、不相關(guān)的內(nèi)容浪費了研究人員的時間。這些問題都不是簡單的“引用核驗”或“檢索比對”能解決的。Google 把可靠性模塊作為一個公開論文中的設(shè)計思路真正意義在于提醒大家可靠性不是模型自帶的安全屬性而是需要投入資源去構(gòu)建的一層系統(tǒng)防御。生成結(jié)果越重要這層防御就要越認(rèn)真。6.3 對普通研發(fā)者這是我建議的行動項我沒有辦法從這個標(biāo)題里確認(rèn) Google 論文具體的代碼實現(xiàn)、評測數(shù)據(jù)集或是否開源。所以以下只從通用實踐出發(fā)給建議。如果你也在做 AI 相關(guān)工具可以先從一個小切口開始找一個你認(rèn)為“模型常常編造內(nèi)容”的模塊把輸出結(jié)果全部記錄下來人工標(biāo)注其中哪些是幻覺挑出最典型的十個錯誤樣本。然后再為這十類錯誤分別設(shè)計驗證器。這個動作做完你大概率會得到一個比現(xiàn)在靠譜得多的系統(tǒng)。原因很簡單可靠性改進(jìn)并不神秘它本質(zhì)上是“知道錯誤長什么樣然后阻止它發(fā)生”。Google 的 46% 到 4% 是系統(tǒng)性的結(jié)果但每一部分落在工程上都是一個一個驗證器和一條一條規(guī)則累積起來的。我個人更建議先把單條生成鏈路跑穩(wěn)再考慮增加模型參數(shù)量或復(fù)雜 Agent 結(jié)構(gòu)。先把“模型不能隨便相信自己的輸出”這個機制建起來后續(xù)所有功能都會建立在更扎實的基礎(chǔ)上。