記一次智能問答系統的review過程——細節決定成敗 原創
“ 一個好的智能問答系統是由細節決定的,而不是由流程決定的。”
今天在公司項目組review了一下作者最近一直在做的一個基于RAG技術的智能問答系統;在review的過程中也發現了一些問題,就是雖然召回質量還過得去,但還是存在一些小問題。
比如說,偶爾會出現記憶不存在的問題,表面上來看就是連續兩個有關聯的問題,但回答的時候卻沒有任何關聯性;簡單來說就是,記憶功能沒用好。
還有就是所有的技術手段都用上了,包括召回,去重,重排等;但還是會召回一些無關的數據回來,而這很明顯是有問題的。
所以,出現這些問題的原因是什么,以及怎么解決這些問題?
細節決定成敗
今天在項目review的時候,我們技術經理說的一句話作者認為非常對;不要以為流程上對了就代表沒問題了;大模型應用不同于傳統的WEB應用,一就是一,二就是二,大模型存在很大的偶然性,即使流程上都沒問題,但結果并不一定沒有問題。
這次review發現作者就是犯了一個典型的錯誤,那就是流程上都是正確的,但結果卻不是很理想。

在基于rag的智能問答系統,在文檔處理階段,召回階段都做了相對比較完善的優化;如文檔數據的清洗,格式轉換,元數據處理;召回階段的問題補充優化,問題改寫,元數據召回,相似度召回,以及去重,重排序等等。
雖然流程上處理的好像還不錯,召回率也基本上能符合要求,但在某些時候還是會出現一些問題;而這就是細節上沒有處理好,導致出現各種各樣亂七八糟的問題。
而且,從這段時間開發RAG系統的感受來說,RAG的技術手段真的很有限,更多的是需要從設計和架構上對系統進行優化和調整。
RAG是一項技術,而智能問答是應用場景。
為什么說細節決定成敗呢?
在基于RAG的智能問答系統中,RAG的流程基本上是固定的,哪怕玩出花來,它的技術手段就那么多,每個環節能優化的點也就那么多,而優化方式就更少了。
然后,再加上大模型本身的不穩定性,就會直接一個小問題被無限的放大,最終導致效果無法達到要求,或者說不穩定。
以作者為例,在優化查詢問題時明明指定了根據歷史記錄進行改寫,但在多輪對話中改寫的問題卻沒有任何連貫性;因此,這也間接導致了兩個問題成為完全獨立的問題,在外人看來就是,你基本的記憶功能都沒有做,甚至會懷疑你的專業能力。

還有就是被動RAG和主動RAG的區別:
所謂的被動RAG就是傳統RAG,先根據問題召回文檔,然后再根據文檔回答問題;但事實上,在真實的對話場景中,有些對話并不需要參考文檔,比如說 謝謝;而主動RAG是基于agent代理技術的RAG系統,通過讓模型根據用戶的問題自主判斷,是否需要調用檢索工具進行文檔召回;如不不需要就可以根據模型自身的能力來回答問題,如果需要再調用召回工具進行文檔召回。
這兩種方式RAG的方式,就能部分解決召回無關文檔的問題。
當然,做一個智能問答系統并不難,但要想做好一個智能問答系統卻并不簡單。
本文轉載自???AI探索時代?? 作者:DFires

















