邁向可信 AI:LLM 幻覺的分析與優化
作者丨 lingyuhuang
隨著LLM的廣泛應用,其生成內容的準確性和可靠性成為AI落地的關鍵挑戰之一。幻覺(Hallucination)現象,即模型生成與事實不符或虛構的信息,不僅影響用戶體驗,更可能帶來實際風險。本文將系統性分析LLM幻覺產生的根本原因,探討其在實際應用中的優缺點,并結合RAG、SFT、強化學習、思維鏈、Agent Workflow等技術,提出多維度的優化方案。旨在為構建更可信、可控的大模型應用提供理論基礎與實踐路徑,助力AI邁向更高的可靠性與價值創造。

一、LLM的工作原理簡介
在進入正題之前,我們先初步了解一下LLM的工作原理,有利于后面理解為什么LLM會出現幻覺。
1. 訓練

(1) 訓練過程
大語言模型(LLM)的訓練通常分為三個主要階段:
- 預訓練(Pre-training):在大規模無標注文本數據上進行自監督學習,模型學習語言的基本結構和表達規律。
- 后訓練(Post-training/Fine-tuning):在特定任務或領域的數據集上進行有監督微調,提升模型在特定任務上的表現。
- 對齊(Alignment):通過人類反饋(如RLHF,基于人類反饋的強化學習)等方式,使模型輸出更符合人類價值觀和實際需求,減少有害或不準確的內容。
(2) 數據來源
預訓練階段的數據主要來自于海量的互聯網無標注文本,包括網頁、百科、新聞、論壇、書籍等多種類型。
這些數據中不可避免地包含錯誤、虛假、過時的信息,甚至有些內容帶有偏見或噪聲。模型在訓練時會無差別地學習這些內容,通過調整參數權重來擬合數據分布
(3) 訓練目標
預訓練的核心目標是讓模型具備強大的自然語言理解和生成能力,而不是讓模型記住或判斷事實的正確與否。因此,模型學到的是“語言模式”而非“事實真理”。
通過對海量數據的學習,LLM能夠掌握豐富的語言結構、表達方式和上下文關聯,從而具備在多種任務(如問答、摘要、翻譯、對話等)中遷移和泛化的能力。
2. 推理
(1) 預測流程

① 分詞與編碼(Tokenization)
首先,將用戶輸入的文本進行分詞處理,轉換為一系列token,并進一步編碼為token ids。這些token ids是模型能夠識別和處理的數字序列。
② 嵌入映射(Embedding)
將token ids映射為高維的嵌入向量,形成一個Embedding矩陣。每個token對應一個語義向量,作為后續計算的輸入。
③ 位置編碼(Positional Encoding)
讓模型理解每個token的位置順序。
④ Transformer層處理Embedding矩陣依次通過多層Transformer block進行處理。每個block包含多頭自注意力機制、前饋神經網絡、歸一化等操作,模型在此過程中充分捕捉上下文信息和詞間關系。
⑤ 線性變換與概率歸一化(Linear + Softmax)
對最后一層的輸出嵌入進行線性變換,將其映射到詞表空間,隨后通過Softmax歸一化,得到下一個token的概率分布。
⑥ 采樣生成(Sampling)
根據設定的采樣策略,從概率分布中選取下一個token。
⑦ 自回歸生成(Autoregressive Generation)
將新生成的token追加到已有的token序列中,重復上述推理過程,持續生成下一個token,直到遇到終止符(EOS)或達到最大token數限制(MaxTokens)為止。
整個推理過程以自回歸方式逐步生成文本,每一步都依賴于之前生成的內容,確保輸出的連貫性和上下文相關性。通過多層Transformer的深度建模,模型能夠理解復雜的語言結構,并生成高質量的自然語言文本。
(2) 采樣參數
通過調整采樣參數,可以控制模型的輸出結果。下面列舉幾個常見的參數,方便大家理解采樣過程。
① Top-kTop-k會從所有候選token中,保留概率最高的K個作為候選集。模型只會在這K個token中進行采樣,能夠有效過濾掉低概率、無關或不合理的詞匯,從而提升生成內容的質量和相關性。K值越小,輸出越確定;K值越大,輸出越多樣。
② Top-p
Top-p會從所有token中,按照概率從高到低累加,直到總概率達到設定的閾值P為止。只在這部分token中進行采樣。相比Top-k,Top-p能夠根據實際概率分布動態調整候選集大小,更靈活地平衡輸出的多樣性和合理性。兩個參數都設置的時候,必須同時滿足的token才加入預測候選集。
③ Repeat Penalty(重復懲罰)
重復懲罰參數用于降低模型重復生成已輸出過的token的概率。參數值越大,對重復內容的懲罰越強,有助于減少文本中的重復現象,使生成結果更加豐富和自然。(有些小尺寸模型容易陷入循環輸出,調大這個參數可以有效緩解。)
④ Seed(隨機種子)
隨機種子用于初始化偽隨機數生成器,決定本次推理過程中的隨機數序列。設置相同的seed可以保證每次同輸入的生成的結果一致。
⑤ Temperature(溫度系數)
溫度參數用于調整softmax輸出的概率分布(即 logits /= temperature)。溫度越高,概率分布越平坦,模型輸出更具多樣性;溫度越低,概率分布越尖銳,模型更傾向于選擇高概率的token,輸出更確定。通過調節temperature,可以靈活控制生成文本的創造性和保守性。
例如,經過topk&topp之后,保留了4個候選token,權重分別為0.5,0.2,0.2,0.1
不同溫度下經過softmax變換,每個token的概率為:

二、什么是幻覺?
LLM的幻覺(Hallucination)現象,即模型生成與事實不符或虛構的信息。
例如:
在實際應用中,LLM幻覺不只表現在隨意“編造”信息,其內容和表現形式多樣。細分類型有助于更準確地定位問題,并為后續優化方案提供針對性思路。常見幻覺類型包括:
- 事實性幻覺(Factual Hallucination):模型輸出明確違背客觀真實的信息,如“水的沸點是150°C”。
- 上下文幻覺(Contextual Hallucination):模型對用戶輸入理解出現偏差,輸出內容與問題語境不符,如用戶詢問“蘋果公司”,模型卻誤答為“水果種植技術”。
- 邏輯幻覺(Logical Hallucination):模型生成內容存在自相矛盾、不合理、違背常識的推理,如“一個人同時在北京和紐約開會”。
不同類型幻覺的成因各異,對應的優化手段也各有側重。下一節將結合具體幻覺類型,系統介紹多維度的優化方案。
1. 產生幻覺的原因
通過前面的介紹,我們可以得到以下結論:
- LLM在生成文本時,是根據每個token的概率分布進行采樣的,因此輸出結果具有一定的隨機性和多樣性。
- 模型通過對大規模訓練數據的學習,統計并擬合了token之間的概率關系。訓練數據的質量和多樣性直接影響模型的表現。
- 通過調整如Top-k、Top-p、Temperature等采樣參數,可以控制生成文本的多樣性和確定性。但這些參數的變化會影響每一個token的輸出,從而影響整體生成結果。
- LLM的所有參數都來源于訓練階段,無法實時獲取和學習新數據。因此,模型對訓練數據之后發生的事實和知識無法感知,存在信息時效性限制。
- 每個token的生成都涉及大量的矩陣運算,消耗顯著的計算資源和存儲空間。模型的上下文窗口不可能無限長,只能處理有限長度的輸入,可能導致信息丟失或理解偏差。
- LLM采用自回歸生成機制,每個token的生成都依賴于前面已生成的內容,保證了文本的連貫性和上下文相關性。但前面token的錯誤也會導致后面的結果都偏離事實。
LLM通常采用自回歸方式,通過預測next token來生成文本,本質是計算下一個token的概率分布,而非像傳統數據庫的準確檢索。因此,模型在生成內容時,優先考慮的是自然語言的流暢性和上下文關聯度,而非優先考慮事實的準確性。既然是概率計算,說明本身就有隨機性,有概率生成出不符合實際的文本。簡單來說,當信息不足的時候,大模型存在“虛構癥”,導致LLM的生成產生了幻覺。
2. 幻覺的優點
如果LLM總是只能生成符合事實依據的內容,那就會失去很多創造性。
- 在音視頻、虛擬角色、文學創作等領域,正是由于LLM的隨機性,才能生成出新穎、獨特的內容,為用戶提供創造力和靈感。
- 在頭腦風暴、方案設計等場景下,幻覺生成的“異想天開”內容有時能啟發新的思路和解決方案。
3. 幻覺的缺點
在追求正確事實的場景下,LLM的幻覺也會帶來很多弊端:
- 提供錯誤回復,雖然LLM生成內容效率很高,但閱讀者需要消耗精力去驗證內容。
- 普通用戶難以辨別回答的真實性,可能導致誤導用戶,長時間的錯誤會導致用戶不再信任AI。
- 大量AI生成的內容涌入互聯網,導致虛假信息傳播,污染下一代模型的訓練數據,更難以鑒別事實。
在絕大部分業務場景里,我們需要AI提供正確的答案,所以要盡可能讓LLM生成出符合事實的token,減少幻覺的產生。
三、多維度優化方案
下面從輸入、采樣參數、后訓練提升模型能力這幾個方面來介紹優化方案。
1. Prompt
(1) 準確無歧義
Prompt是使用LLM的第一步,可以盡可能挖掘出基座模型的潛力。
例如,新來的實習生掌握了很多理論知識,但是你在給他一個工作任務的時候,他可能由于缺少經驗,最終做出來的可能不符合你的預期。這里面有哪些問題可以優化呢?
- 任務清晰明確、無歧義
- 任務的邊界說清楚
- 任務進行拆解,復雜的任務拆解為子任務再一個個解決
- 給出示例( In-Context-Learning)
例如,你想基于LLM給你的結果進一步編寫代碼,那么要求明確的輸出格式,更便于代碼進行解析。
- prompt: 幫我提取”播放周杰倫和蔡依林合唱的歌”的槽位
- output: { "intent": "播放歌曲", "slots": { "歌手": ["周杰倫", "蔡依林"], "合唱": true } }
prompt:幫我提取”播放周杰倫和蔡依林合唱的歌”的槽位,提取出intent、singer、song等信息,如果某個槽位存在多個值,
用| 隔開,務必返回一個map形式的Json。
output: { “intent”: “播放歌曲", "singer": "周杰倫|蔡依林", "song": "" }
例如,你想利用多模態模型,生成對圖片的簡要描述:

- prompt:只用一句話準確描述這張圖片,并列舉出圖片中非文字的內容或物體。
- output: 一只藍色企鵝圖案,底色為白色。
- 異常:prompt有歧義,導致LLM會側重于描述頭像。
- prompt:你是檢索系統中專業的圖片分析識別專家,能夠準確、詳細地提取圖片中的內容,以 JSON 形式輸出。1. 請用中文在50字以內準確描述這張圖片中包含的主要內容,放到caption字段中。2. 分析圖片整體,包括事件、主題、構成、風格和背景等,輸出圖片的主題內容,以字符串數組形式放到core字段中。3. 精準識別圖片中的物品、動物、人物、植物、建筑、場景等局部內容,以字符串數組形式放到 exact 字段中。具體要求如下:- 文字:識別主要標志文字或與圖片主題相關的重要文字。- 物品、動物、植物、建筑:從名稱、顏色、類型等角度描述。- 人物:從性別、角色、工作崗位、合影或自拍等角度描述。- 場景:從活動、節日、文化、風景、夜景、天氣等角度描述。- 其他:以物品名稱描述。
- output: {"caption":"騰訊公司發布關于2026校園招聘啟動的微博。","core":["騰訊公司校園招聘","2026校招","技術、產品、市場、設計等崗位","AI、大模型、機器人、云計算等領域"],"exact":["騰訊公司","2026校招啟動","技術、產品、市場、設計五大類","70+種崗位","藍色企鵝圖案","工作頭罩","公司發布微博","招聘公告","互動圖標","點贊","分享"]}
實際編寫prompt的過程中,有很多細節要考慮,很難一次性寫的非常完美和完善,需要不斷測試并調整,讓prompt適應更多的情況。不同的提示詞結果不一樣,不同的模型對同一個prompt的表現也不一樣。
常用的方法:
- 定義角色-定義任務-適當的示例-限制條件 (比如你是xxx,現在需要做xxx,例如xxx, 輸出必須xxx)
- 定義角色-說明已有信息-詢問步驟-描述期望 (比如你是xxx,已知xxx,現在請幫我制定一個執行計劃, 最終需要達到什么目的)
(2) 預填充
除了編寫無歧義的prompt,我們還可以通過預填充,來進一步控制模型的輸出行為,使其輸出的格式更符合我們的要求,例如:
- 預填充一個工具調用,可以強制模型下一步輸出一個工具調用的步驟:<|im_start|>assistant<tool_call>
- 預填充一個具體的工具調用,可以強制模型下一步調用聯網檢索:<|im_start|>assistant<tool_call>{"name":"web_search"
- 預填充一個業務特定json格式的輸出:<|im_start|>assistant\n{"caption":"
限定輸出特定schema json:

更多信息可以參考:https://github.com/NousResearch/Hermes-Function-Calling
2. RAG(Retrieval-Augmented Generation)
雖然大模型學習了海量知識,但是總有一些沒見過的知識。比如一個擅長寫程序的人,讓他設計UI稿,給出的結果大概率沒有專業設計師設計的好。但是如果把各種背景知識和技巧告訴他,他就能給出一份不錯的結果。(但是RAG也不是萬能的,開卷考試也不一定能得滿分。)
RAG比較典型的應用是文檔問答、知識庫總結、聯網檢索總結等。
例如,幫我總結一下微信的xx群里今天都聊了什么消息。

這就是一個經典的RAG的流程,從外部獲取參考資料,帶給LLM進行參考,讓LLM基于參考資料進行回答。(設想一下,如果你不提供聊天記錄給LLM,但是Prompt中又要求LLM總結聊天記錄,LLM會發揮想象,開始瞎編聊天記錄,就產生了幻覺。)
我們開源了文檔問答的RAG能力,歡迎體驗 https://weknora.weixin.qq.com/
3. 采樣參數
前面提到在模型預測的時候,具有隨機性,如果模型的結果非常不穩定,可以嘗試調整 temperature和seed參數,可以讓模型的結果固定:
- 在一些有標準答案的問題上,例如單選題,可以讓模型輸出更加確定的結果,將 temperature 設置得更低,例如0.1;
- 在一些開放回答的問題上,將temperature設置得更高,可以讓回答有多樣性,例如>0.7;
- 在一些不希望LLM發散的開放題上,可以將temperature 設置為中等,例如0.3。
4. SFT(Supervised Fine-Tuning)
SFT(微調)屬于后訓練階段,預訓練模型已經具有強大的能力,而SFT 利用帶標簽的監督數據調整模型,使其在特定任務上表現最佳,提升模型在特定方面的能力。與之相比,In Context-Learning和RAG都是不改變模型本身的,而SFT會改變模型的權重參數。
常見的微調種類很多,主要分為全參微調,和PEFT。在項目落地中,一般首先嘗試PEFT的一種:LoRA,LoRA可以使用較低的成本獲得相對較好的結果。

(1) 什么是LoRA?
LLM往往擁有非常多的參數,所以對于模型的訓練而言,如果每個參數都需要調整,非常耗費資源。思考幾個問題:
- 大模型那么多參數,都很重要嗎?就像一篇1000字的文章,核心思想可能50字就可以概括。
- 微調往往是為了提升特定一些任務的表現,所以我們更希望調整影響這部分任務的那些參數。
- 如果所有參數都調整,可能會導致模型其他能力丟失。(學的太多反而學壞了。
LoRA(Low-Rank Adaptation)提出了一種低秩參數化的適配方式。其核心思想是:

凍結預訓練模型權重,僅在每一層Transformer的部分權重矩陣(如自注意力模塊的Wq、Wv等)旁路注入一對可訓練的低秩分解矩陣A、B。
具體而言,將權重更新ΔW表示為BA(B∈R^dr, A∈R^rk, r?min(d,k)),即:

LoRA只需訓練極少量的參數,可以顯著降低存儲與計算開銷。
例如:

假如一個3X3的矩陣,全參數微調需要更新9個參數,而Rank=1的時候,只需要更新3X1+1X3=6個參數。假如原始矩陣式10000X10000,全參數微調需要更新1億參數,而Rank=8的時候,只需要更新10000X8+8X10000=16萬參數。(一般Rank可以選擇4或者8,如果原始模型信息本身壓縮率高,可以將Rank設置的更大;如果原始模型信息冗余嚴重,可以將Rank設置的更小)


可以看到LoRA在大大節約了訓練開銷的前提下,仍然保持了較高的準確率。
從論文來看,LoRA調整Q和V矩陣(Transformer的自注意力層),是最有效的,由于LoRA的目的就是要用較小參數的改變實現對模型的有效性調整。而Attention直接影響最終的輸出,調整Q可以影響模型如何選則信息,調整V可以影響模型如何利用信息。

https://arxiv.org/pdf/2106.09685

https://arxiv.org/pdf/2304.13785
(2) 全參微調和LoRA微調的核心差異
全參微調會修改大模型的參數,在數據充足的情況下可以學習更多的內容,數據越多效果理論上越好,但也存在災難性遺忘等不穩定情況。數據量小的情況下容易過擬合。
PEFT只修改少量參數,需要的資源少,因為大多數預訓練的權重保持不變,所以更容易保留原始模型能力,但效果上限較低,如果基座模型在該領域的效果本來就很差,通過PEFT也難以提升。
如果業務落地中,只需要定制少量幾類任務,而不需要擔心通用能力退化的情況下,并且在有數據量支撐的情況下,全參微調可以獲得更高的能力上限。
(3) 如何微調
我們在項目中,使用LLamaFactory進行模型微調,可以直接參考文檔:
https://llamafactory.readthedocs.io/zh-cn/latest/index.html
(4) 微調的數據準備
一份優質的微調數據,從三個維度來衡量:多樣性、質量、數量。數據往往決定了最后模型的效果。
① 多樣性:
- 指令多樣性:考察樣本中指令的覆蓋范圍是否廣泛,是否包含了各類任務類型、不同難度級別以及多樣化的指令結構和表達方式,確保模型在微調后能應對多種復雜情境。
- 內容多樣性:檢查樣本中提供的文本內容是否涵蓋了不同主題、文體、長度以及語境,以避免模型在特定領域或文本類型上過擬合,確保其具備良好的泛化能力。
- 難易程度分布:分析樣本集中簡單、中等、復雜任務的比例,確保微調數據集包含不同難度級別的樣本,有助于模型逐步提升處理復雜指令的能力。
② 質量:
- 準確性:評估答案是否準確無誤地響應了給定指令和內容,且不包含事實性錯誤、邏輯矛盾或語義模糊。
- 完備性:考察答案是否全面覆蓋了指令所要求的所有任務點,尤其對于多步驟或復合任務,答案應完整體現所有必要的操作結果。
- 簡潔性與清晰度:衡量答案是否言簡意賅、表達清晰,避免冗余信息或含糊表述,確保模型在微調后生成的輸出易于理解和使用。
- 清洗:識別并剔除標注錯誤或不一致的樣本,確保答案與指令、內容間的映射關系正確無誤。去除重復樣本、無關內容、錯別字、低質量文本。(可以通過dropout優化過擬合問題,而不是混入錯誤數據讓模型學到錯誤信息,錯誤數據會提升模型的幻覺率)
③ 數量:LoRA 1k-10k左右, 全參SFT在100k以上。
(5) SFT數據集的常見格式
{ "instruction": "計算這些物品的總費用。 ", "input": "輸入:汽車 - $3000,衣服 - $100,書 - $20。", "output": "汽車、衣服和書的總費用為 $3000 + $100 + $20 = $3120。" }
{ "instruction":"人類指令(必填)","input":"人類輸入(選填)","output":"模型回答(必填)","system":"系統提示詞(選填)","history":[["第一輪指令(選填)","第一輪回答(選填)"],["第二輪指令(選填)","第二輪回答(選填)"]] }
偏好數據集:(獎勵模型)
{ "instruction": "人類指令(必填)", "input": "人類輸入(選填)", "chosen": "優質回答(必填)", "rejected": "劣質回答(必填)" }
圖像多模態數據集:
{ "instruction": "人類指令(必填)", "input": "人類輸入(選填)", "output": "模型回答(必填)", "images": [ "圖像路徑(必填)" ] }
……
(6) 訓練參數設置
比較重要的參數如下表:
LR | 學習率,設置的越大,模型訓練的參數調整幅度就越大。 |
Epochs | 學習輪次,對數據學習幾輪。一般為2/3。太多會導致過擬合,把模型學傻,模型就只會訓練的那些數據了。 |
BatchSize | 一批的數量,越大顯存需求越大。太低導致收斂難,陷入局部最優;太高容易過擬合,泛化能力差。需要結合實際情況調整。 |
Rank | LoRA的Rank,越大學習到的參數更多,但也會學到無關知識,一般建議在4,8,16。太高無明顯性能優勢,反而增加資源消耗。 |
Dropout | 隨機丟棄的概率,可以避免過擬合。對于13B等小尺寸模型可以設置為10%。對于70B等大尺寸,可以設置為5%。 |
更加詳細的參數可以查閱:https://llamafactory.readthedocs.io/zh-cn/latest/advanced/arguments.html
(7) 模型評測
準確地評估模型在特定任務的表現,可以為后續訓練與數據迭代的方向提供參考。所以需要一份優質的數據去評估模型能力。

5. 基于強化學習對齊偏好(RLHF)
RLHF(Reinforcement Learning from Human Feedback),通過人類反饋強化學習進一步微調模型,讓模型有更好的泛化能力,并輸出更符合人類偏好的結果,是提升模型性能、減少幻覺和有害內容的有效手段。
常見的方法如下:
(1) PPO(Proximal Policy Optimization)
通過限制每次策略更新的幅度,保證訓練過程的穩定性和高效性。讓模型學習到人類偏好的同時,不過于丟失原有能力。

策略模型進行環境采樣;SFT參考模型計算KL散度,確保更新策略不出現大變化;獎勵模型評價獎勵;評論模型/價值模型對每個token的收益進行預估
(2) DPO(Direct Preference Optimization)
PPO 需要訓練獎勵模型,如何構建準確的Reward和Value Model是一個難題,直接影響強化學習的效果。DPO直接用標注好的人類偏好數據去訓練。例如:
[ { "instruction": "人類指令", "input": "人類輸入", "chosen": "優質回答", "rejected": "劣質回答" } ]
(3) KTO
與DPO類似,但是解決了DPO的chosen和rejected必須成對出現的缺點。例如:
[ { "instruction": "人類指令", "input": "人類輸入", "output": "模型回答", "kto_tag": "人類反饋 [true/false]" } ]
(4) GRPO
移除對Value Model的依賴,一次生成一堆結果,組內相對優勢(模型自己卷),獎勵高于平均分的結果。與PPO不同的是,只對最終的結果進行獎勵評估,如果過程錯誤但結果正確,也會獲得獎勵。

(5) 訓練框架
我們在項目中,使用VERL進行強化學習訓練,可以直接參考:https://github.com/volcengine/verl
(6) RL與SFT的區別
① SFT只需要提供正例數據,告訴模型什么是正確的,讓模型學習正確數據的概率分布,這會導致SFT往往記住了很多知識和格式。采樣的時候也是基于概率,通過采樣參數來控制,挑選出概率大的next token,以此來排除概率小的“錯誤”token。
② RL可以提供正負反饋,明確告訴模型哪些是錯誤的,更有利于提升模型的泛化能力。

https://arxiv.org/pdf/2501.17161
③ SFT需要更多的標注數據,RL可以通過固定的規則獎勵(例如math 和code只需要判斷最終結果)與獎勵模型提供的正負反饋不斷迭代,讓模型自己探索符合人類偏好的回復策略,可以減少訓練數據的要求。
④ SFT是針對Token級別的反饋,而RL是針對整個答案文本的評價。
6. 思維鏈(Chain-of-Thought)與推理增強
COT是一種用于提升大語言模型(LLM)推理能力的提示工程(Prompt Engineering)方法。其核心思想是:在模型生成答案時,不是直接輸出最終結果,而是引導模型像人類一樣,分步驟地展示推理和思考過程,逐步推導出答案。
人類在回答問題的時候,有些常識性問題,可以直接回答出來,而有些復雜的問題,可以經過思考和推理以后,再給出最終的答案。與人類一樣,模型也可以模擬這個過程,輸出慢思考的中間過程,讓模型產生反思能力,提高最終答案的準確率,尤其是在復雜推理、數學、邏輯等任務上,可以有效的減少幻覺。
優點 | 缺點 |
能顯著提升數學、邏輯、推理等復雜任務的表現 | 生成內容長,響應慢,廢資源。 |
分步驟解決問題,容易發現和糾正中間錯誤,提升最終答案準確性 | 效果非常依賴prompt和示例。 |
過程可解釋 | 中間過程可能出錯,后面可能基于錯誤的結論進一步輸出,導致浪費很多token還是得到錯誤答案 |
便于調試和優化,指出模型的錯誤 | 對簡單任務基本無幫助,反而浪費token |
可以引入反思機制,進一步減少幻覺 | 小尺寸模型效果有限,可能會不斷輸出錯誤內容 |
在早期項目落地時,主要是靠prompt去引導模型輸出中間過程,現在已經有很多帶think能力的模型。 我們在項目冷啟動的時候,如果需要制造COT數據,可以直接通過已有模型進行蒸餾,或者仍然使用prompt進行引導,讓模型輸出業務需要的數據。也可以通過規則獎勵,激發RL自行產生慢思考的數據,收集評分高的數據不斷迭代模型。z
之前我們通過RL,增加推理過程提高了文檔問答的效果,具體可以參考:https://km.woa.com/articles/show/622575
7. Agent / Workflow
前面提到的所有方案,目標都是為了提升單次LLM任務的準確率。但在實際業務中,很難通過一次LLM調用將所有問題解決。這時候搭建一個多Agent協作的系統就非常有必要。
LLM Agent 是指以大語言模型為核心,具備自主感知、決策、規劃和執行能力的智能體系統。它不僅能理解和生成自然語言,還能根據環境反饋和任務目標,動態調用工具、檢索信息、執行代碼、與外部系統交互,完成復雜任務。
Agent可以將復雜的任務拆解為子任務,通過調用工具來逐步完成。但是在落地的時候,我們可以完全讓模型+FunctionCall來驅動;也可以搭建Workflow,在關鍵位置引入LLM強大的語義理解能力和規劃能力。前者更加靈活,后者更加準確。
雖然我們采用Workflow的方式,但是通過一些工程手段,在提升任務準確率的前提下,依然沒有丟棄LLM的規劃能力和靈活性。下面簡單介紹一些落地經驗:

① 全局planning,讓LLM在制定計劃的時候,有大局觀,直接生成全局計劃而非一步一步的生成,可以提高問題解決率,減少LLM生成后續步驟的時候,忽略前面的任務。
② 完全由LLM決定如何解決問題,以及調用什么工具,而不是寫死每個步驟。并對中間結果進行摘要,縮短上下文。
③ 引入reflection機制,讓模型深入思考和研究每個步驟的解決情況。
④ replan,前面的步驟的結果可能影響后續的步驟,不斷的重新制定下一步計劃,并review 全局計劃,進行調整。
⑤ 復述任務,并將重要的信息放到prompt末尾。隨著上下文越來越長,對于一些能力一般的模型來說,可能顧及不到所有信息,需要將重點進行重復,并放到最接近輸出的位置。
⑥ 不同的步驟可以嘗試不同的模型,有些簡單任務可以用小尺寸模型,有些復雜任務需要大尺寸模型。靈活構建。
⑦ 盡量少使用few shot example,除非LLM實在解決不了。 example會導致模型輸出總是傾向于你給的示例,喪失多樣性。如果實在要給例子,可以構造具有多樣性的示例。
⑧ 盡量將可變信息放到prompt最后,有效利用kv緩存。
四、結語
隨著大語言模型在各行各業的廣泛落地,幻覺問題已成為影響其可靠性和實際價值的核心挑戰。本文系統分析了LLM幻覺產生的原因,評估了其優缺點,并從Prompt設計、RAG檢索增強、采樣參數、SFT監督微調、強化學習、思維鏈推理、Agent Workflow等多個技術路徑提出了針對性的優化方案。
可以預見,未來LLM的幻覺治理將是一個持續演進的過程,需要模型架構、數據、算法、工程實踐的多維協同。只有不斷完善技術手段,提升模型的事實一致性和推理能力,才能真正釋放大語言模型在實際應用中的潛力。


































