企業級智能問答系統踩坑實錄:RAG老是達不到效果的優化方案 原創
“ 大模型應用開發流程正確,但結果不一定正確。”
由于大模型技術的復雜性,再加上不同業務場景的特殊需求,導致大模型應用的開發難度很大;但大模型應用開發最難的不是做出來而是要做好。
這次還以作者手里的智能問答項目來說,記錄一下智能問答系統的踩坑記錄,從怎么都達不到想要的效果,到能夠很好的滿足業務場景。
從作者這些年的開發經驗來看,很多時候開發技術棧是有限的,遇到問題更多的是思路問題而不是純粹的技術問題。
智能問答系統的優化方案
在介紹解決方案之前先來再簡單介紹一下項目背景。
作者手里的這個項目是一個智能問答場景,但根據業務類型又區分為三個不同的子場景,并分別對應三種不同的知識問答。業務需求上要求這三個子場景使用同一個入口,并最好能不需要人工區分場景(如三個子菜單或下拉框),能夠讓系統根據問題智能判斷不同的場景并選擇不同的文檔。
業務架構如下所示:

但這里有幾個問題,場景1和場景2除了知識文檔不同,其它的都很相似,文檔類型也都是word,pdf這種非結構化數據;但場景3比較特殊,它的主要功能是查數據,而且文檔類型是結構化+非結構化數據。
說到場景3可能有些人不是很理解這有什么特殊的地方,下面我們就來解釋一下場景3的特殊點。
先說查數據,在之前的文章中有提到過查數據這個問題;在RAG增強檢索中,檢索和增強是分開的,并且沒有限制檢索的方式是相似度語義檢索還是基于傳統的數據庫結構化檢索。
但在基于自然語言的對話中,如果使用相似度語義檢索很簡單,直接把問題和知識轉換成向量,然后進行相似度匹配就行了;但如果要使用傳統的條件篩選,這就需要使用智能體(agent)技術了。
所以這個就是基于語義檢索的缺陷問題,無法實現條件匹配;而智能體可以讓模型理解用戶的問題,然后生成查詢條件調用接口或生成SQL進行條件檢索。
第二個問題是,場景3的知識文檔是結構化數據+非結構化數據;結構化數據需要使用條件篩選,非結構化數據需要使用語義匹配,這樣才能達到最好的效果;雖然理論上把結構化數據轉換成markdown或html格式,也可以實現相似度檢索,但這種方式在實操檢驗中效果并不好。
所以說,怎么用技術解決這個問題?技術架構應該怎么做?
剛開始由于業務需求不明確,也沒現在這么復雜,并且對業務和技術了解不深;所以作者選擇的是使用純RAG技術解決來實現這個功能,并且基礎的技術架構是根據三個子場景,創建三個不同的知識庫,也就是三張表(數據量不大,也就幾萬條)。
技術架構如下所示,是通過把非結構化數據轉換成markdown這種半結構化數據保存到向量庫中;而結構化數據,采用markdown+元數據的方式進行保存。


但是,經過實測發現這種效果很差,用戶那邊一直反饋效果不理想,甚至會胡編亂造;而從技術的角度來看就是,文檔召回率和準確率都不足,雖然使用了很多種召回優化的手段,但都沒有達到想要的效果,特別是三個場景區分不清楚。
這時作者區分三個子場景的實現原理是,根據用戶問題先去三個知識庫中分別檢索相關數據,然后再重排序之后,找到其中相關性最高的,這個文檔在哪個知識庫,就是那個子場景。但由于文檔召回率和準確率不足,導致場景判斷也出現偏差。
所以,這時想的是既然純RAG或者說相似度檢索解決不了問題,那么我們就用智能體去解決。
但說起來簡單,但等到真正把技術和業務結合的時候才發現,好像遠遠沒有那么簡單。
首先的問題就是,設計幾個智能體,從哪個維度設計智能體?
如果給每個場景都單獨設計一個智能體,那在不主動區分場景的情況下,我怎么知道調用那個智能體呢?
如果從場景的維度的維度設計智能體,那怎么解決相似度查詢和條件查詢的問題,工具上怎么設計,怎么實現,怎么匹配?
這個問題大家可以先思考一下,然后再看下面的解決方案。
所以,現在新的解決方案是什么樣的呢?
解決方案
首先,作者剛開始就陷入了一個思維誤區,那就是知識庫為什么要根據三個場景建立三個知識庫,不能從其它維度建立知識庫嗎?
既然三個場景無法區分,并且知識文檔分為結構化和非結構化文檔,并且只有第三種場景才有結構化文檔;那么我們就可以從結構化和非結構化的角度來建立知識庫。
因此,作者就創建了兩個知識庫,一個知識庫用來保存第三種場景的結構化數據;這樣就可以完全使用條件查詢或者組合條件(標量)查詢和相似度查詢;而另外一個知識庫專門用來保存非結構化文檔,并且使用type字段來區分三種不同的場景。
這樣業務邏輯就簡單多了,而且實現智能體時也簡單多了;只需要實現兩個工具即可,一個是條件查詢工具,另一個是相似度查詢工具;簡單來說就是兩個知識庫各實現一個查詢工具即可。
然后在工具介紹中告訴模型,需要查數據的使用條件查詢工具,需要匹配概念,語義的使用相似度查詢工具。
這樣在調用相似度查詢工具時,再根據工具的返回結果中的type字段來判斷到底屬于哪個子場景。
如下圖所示:

這樣就完美解決了結構化文檔和非結構化文檔的混合查詢問題,以及不同場景的判斷問題。最重要的是其在技術實現上也變得簡單了好多。
而且,經過實際測試,其效果遠比之前的純相似度檢索效果要好上許多。
本文轉載自??AI探索時代?? 作者:DFires

















