博客 / 詳情

返回

RAG系統的隨機失敗問題排查:LLM的非確定性與表格處理的工程實踐

RAG教程裏説的流程是:分塊、嵌入、向量搜索、生成答案。看起來非常簡單,按這個思路搭了一套系統,測試沒問題就上線了。但是結果出了怪事,經常會隨機的失敗。

輸入一樣,但是輸出卻不一樣,而且這不是偶發,是還有一定的規律,這是怎麼回事呢?

本文將介紹RAG在真實場景下為什麼會崩,底層到底有什麼坑,以及最後需要如何修改。

🚨 現象:測試結果飄忽不定

一套端到端的PDF處理管道,專門針對表格密集型文檔。比如:財報、研究論文等,這類文檔的特點是關鍵信息都在結構化表格裏,傳統RAG基本處理不好。

我用20個測試用例進行測試就開始玄學了:

 運行1 → 3個失敗    
 運行2 → 2個失敗    
 運行3 → 0個失敗    
 運行4 → 1個失敗    
 運行5 → 0個失敗

代碼都一樣。但是調試的時候每次跑出來結果都不一樣?

🕵️ 逐層排查

為了搞清楚到底哪個環節出了問題,我哦們把每一步的中間狀態都dump出來看。

MongoDB:表格提取正常,數據乾淨,索引也沒問題。

Qdrant:向量嵌入一致,分塊存儲正常,語義搜索返回的內容也是相關的。

LLM的上下文窗口:檢查了好幾遍,模型每次拿到的context都是對的。

那麼問題就來了:既然上下文沒錯,為什麼模型有時候答對,有時候胡説八道或者漏掉數據?

那麼問題只能是管道本身沒壞,問題出自LLM。

🔍 三個隱藏的坑

經過一天的排查,最後定位到是下面三個問題疊加在一起造成的。

1、LLM的非確定性

Ollama温度的默認值大概在0.8左右。也就是説,同樣的prompt可能給出不同答案,同樣的數據可能產生不同推理,同樣的表格也可能被解讀出不同結果。

這導致RAG表面上看是確定性的流程,但實際上根本不是。0.8的温度讓邊界case變得完全不可預測,所以這一個問題就解釋了一半的"隨機"失敗。

2、重複的表格數據

PDF本身就會有一些問題,比如同一張表格:

在文檔裏可能同時存在另一種形態:

 Table data: Phase Requirements 2024-01-15 Review docs […]

於是LLM同時看到兩個版本:一個是結構清晰的表格,一個是被打散成文本塊的亂碼版本。相同數據、不同格式、互相矛盾。

模型根本分不清該信哪個,有時從正經表格裏提取,有時從噪聲文本里提取,有時兩邊混着來。這是另外一個間歇性bug來源。

3、Prompt模糊

最開始寫的指令大概是這種風格:

"使用提供的表格。考慮所有行。"

對LLM來説這就是一個建議,碰到邊界情況,模型會直接無視第一行、括號裏的備註、文檔標題、日期列,列表也經常給會你截斷。

敍述性文本用這種模糊指令沒太大問題,但結構化數據不行,模糊指令會產生很多的問題。

🛠️ 重構方案

問題定位清楚之後,解決思路就明確了。

1、鎖死温度參數

引入固定的温度預設:

 class QueryEngine:  
     TEMPERATURE_DETERMINISTIC = 0.0  # default

temperature設成0,相同查詢就能得到相同輸出,測試也變得可以可復現,並且隨機性也消失,系統立刻穩定下來。

2、過濾重複的表格分塊

使用一套啓發式規則來識別和剔除那些"看起來像表格"的文本塊:檢測"Table data:"前綴、統計YYYY-MM-DD日期模式出現次數、貨幣格式密度、文本和數字交替出現的模式、異常的空白字符分佈。

在embedding之前把這些重複的表格噪聲幹掉,LLM就只能看到每張表格的唯一正確版本。

3、把Prompt寫成硬性規則

重寫了整個提示詞,從"建議"改成"命令":

文檔標題必須納入考慮(包含時間上下文);每張表格的每一行都要讀完;被問到提取數據時必須給出全部值;列表項不許跳過;括號裏的備註(比如"(extended)")必須保留。

這樣表格讀取錯誤就沒有了

💡 最終架構:混合RAG

穩定之後的攝取和查詢流程長這樣:

詳細攝取流程如下:

為什麼要混合存儲?表格數據需要SQL那種精確匹配能力,文本內容需要語義相似度搜索,兩者結合才能把召回率拉到接近完美。

改完之後:

 運行1: 20/20    
 運行2: 20/20    
 運行3: 20/20

穩定、確定、可上線。

🎯 總結

如果真要給實際業務文檔做RAG不是那種demo用的博客文章,基本都會碰上這些問題:表格和文本混在一起、格式亂七八糟、LLM輸出不穩定、提取結果模稜兩可、檢索匹配不準等等。

但這些都是工程問題,都有工程解法。確定性的LLM配置、靠譜的預處理流程、混合檢索架構,三件套配齊,RAG系統就能做到穩定、準確、可以扔到生產環境裏跑。

https://avoid.overfit.cn/post/c7aab3faef8948b29d54c0068a43abd6

作者:Islam Taha

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.