在企業(yè)開(kāi)發(fā)中——RAG技術(shù)常見(jiàn)的問(wèn)題以及解決方案 原創(chuàng)
“ RAG的本質(zhì)就是快速和準(zhǔn)確的召回文檔,但由于各種原因會(huì)導(dǎo)致其召回質(zhì)量不盡人意,因此我們需要從多個(gè)方面來(lái)優(yōu)化其召回結(jié)果?!?/strong>
雖然說(shuō)現(xiàn)在大模型的主流應(yīng)用方向是智能體——Agent;但也不能否則RAG在其中扮演的重大作用,因此RAG也是企業(yè)應(yīng)用場(chǎng)景中經(jīng)常用到的技術(shù)。但RAG雖然看起來(lái)很簡(jiǎn)單,但事實(shí)上存在很多問(wèn)題和坑;還是那句話想把RAG做出來(lái)很簡(jiǎn)單,但想把RAG做好就很難。
以作者自身遇到的問(wèn)題為例,一起討論一下RAG各個(gè)環(huán)節(jié)中存在的問(wèn)題和優(yōu)化方案。
從技術(shù)的角度來(lái)說(shuō),RAG主要存在三個(gè)階段,文檔處理,數(shù)據(jù)召回,增強(qiáng)生成;其中這三個(gè)階段最后一個(gè)階段最簡(jiǎn)單,就是把召回的內(nèi)容丟給模型,讓模型根據(jù)這些內(nèi)容進(jìn)行處理;所以,RAG的難點(diǎn)主要在前兩步,文檔處理和數(shù)據(jù)召回,數(shù)據(jù)召回的質(zhì)量直接影響到生成質(zhì)量。

RAG中場(chǎng)景的問(wèn)題和解決方案
文檔處理
所謂的文檔處理本質(zhì)上就是把外部文檔處理成向量格式然后通過(guò)相似度計(jì)算的方式進(jìn)行語(yǔ)義召回。
當(dāng)然,RAG并沒(méi)有限制必須把文檔處理成向量格式,也沒(méi)限制必須要進(jìn)行相似度召回;RAG的目的是快速準(zhǔn)確的找到和問(wèn)題相關(guān)的內(nèi)容,因此使用任何召回方式都可以,包括傳統(tǒng)的字符匹配和現(xiàn)在的語(yǔ)義查詢(xún)。只不過(guò)對(duì)于非格式化數(shù)據(jù),以及基于自然語(yǔ)言對(duì)話的展示場(chǎng)景,使用相似度語(yǔ)義檢索更符合業(yè)務(wù)場(chǎng)景。
文檔處理之所以是一個(gè)難點(diǎn),就在于其復(fù)雜的文檔格式;如txt,word,pdf,markdown,excel,csv等等很多種格式,并且這些格式的數(shù)據(jù)沒(méi)有一個(gè)統(tǒng)一的規(guī)范,雖然excel和csv是格式化數(shù)據(jù),但在不同的業(yè)務(wù)場(chǎng)景中可能需要不同的處理,比如有些場(chǎng)景中只需要按列處理即可,而有些場(chǎng)景中可能需要解析表結(jié)構(gòu),然后拼接成markdown或合并部分列數(shù)據(jù)。

因此,文檔處理中文檔的類(lèi)型,復(fù)雜的內(nèi)容格式,對(duì)格式化的不同要求,以及文檔的管理都是難點(diǎn);畢竟如果文檔處理的不好,會(huì)直接影響到第二步數(shù)據(jù)的召回質(zhì)量。
所以,文檔處理的難點(diǎn)其中之一,就是怎么根據(jù)不同的業(yè)務(wù)場(chǎng)景去規(guī)范文檔的處理流程及格式;其次,就是類(lèi)似于word,pdf這種復(fù)雜的文檔類(lèi)型,由于其沒(méi)有固定的格式,以及其同時(shí)支持多種不同模態(tài)的數(shù)據(jù)(文字,圖片,表格,架構(gòu)圖等等);導(dǎo)致其處理起來(lái)特別麻煩,很容易丟失內(nèi)容原本的意義;如架構(gòu)圖和設(shè)計(jì)圖等,很難在向量化之后還保持其原本的意義。
當(dāng)然,雖然現(xiàn)在使用多模態(tài)模型能夠從一定程度上解決這個(gè)問(wèn)題,但從成本和復(fù)雜度來(lái)說(shuō),好像又不是很值得。但基于orc等技術(shù)處理的復(fù)雜文檔會(huì)丟失大量的有用信息。
向量數(shù)據(jù)的保存
其次是向量化數(shù)據(jù)的保存,之前的數(shù)據(jù)大多使用關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行保存,并且其表結(jié)構(gòu)和數(shù)據(jù)可以隨時(shí)調(diào)整和修改;但向量化數(shù)據(jù)庫(kù)由于其特殊性,導(dǎo)致其并不能像傳統(tǒng)數(shù)據(jù)庫(kù)那樣隨便進(jìn)行編輯和修改;因此,剛開(kāi)始設(shè)計(jì)的向量數(shù)據(jù)庫(kù)隨著業(yè)務(wù)的發(fā)展很難適應(yīng)新的業(yè)務(wù)變化,但其調(diào)整起來(lái)又特別復(fù)雜,特別是隨著業(yè)務(wù)數(shù)據(jù)的增多,導(dǎo)致其維護(hù)其它特別麻煩。

數(shù)據(jù)召回
數(shù)據(jù)召回的目的是根據(jù)用戶(hù)問(wèn)題,從大量的知識(shí)庫(kù)中找到與用戶(hù)相似度最高的文檔內(nèi)容,然后交由模型進(jìn)行增強(qiáng)生成;但是面對(duì)語(yǔ)義召回這種本身就不確定的召回方式會(huì)出現(xiàn)兩種情況,一種是無(wú)法召回有效數(shù)據(jù),另一種是召回大量不相關(guān)數(shù)據(jù);而不論哪一種都會(huì)對(duì)下一步的增強(qiáng)檢索造成嚴(yán)重的影響,畢竟模型無(wú)法判斷你提供的文檔質(zhì)量。
因此,面對(duì)這種情況需要從多個(gè)維度來(lái)提升召回質(zhì)量,一是在召回側(cè),通過(guò)完善用戶(hù)問(wèn)題,提出子問(wèn)題,假設(shè)性文檔召回(hyDE),標(biāo)量召回等。其次,就是在文檔處理端,對(duì)文檔進(jìn)行提煉總結(jié),增加多個(gè)維度的相似度計(jì)算。

增強(qiáng)生成
雖然說(shuō)增強(qiáng)生成比較簡(jiǎn)單,但其實(shí)也挺重要的;在上一步的數(shù)據(jù)召回時(shí),有時(shí)為了提高數(shù)據(jù)的召回質(zhì)量會(huì)添加很多無(wú)關(guān)字段,因此在正式把召回?cái)?shù)據(jù)提交給模型之前,我們需要對(duì)文檔數(shù)據(jù)進(jìn)行清洗和格式化處理;比如刪除一些無(wú)關(guān)字段,把文檔轉(zhuǎn)換成模型更好處理的格式等等。而不是直接把召回內(nèi)容一股腦的全部丟給模型。
當(dāng)然,以上只是傳統(tǒng)的RAG處理流程,目前隨著智能體技術(shù)的發(fā)展,智能體技術(shù)也逐漸被應(yīng)用到RAG中;原理就是借助智能體的強(qiáng)大的工具使用能力,以及自主決策能力,讓RAG系統(tǒng)能夠動(dòng)態(tài)獲取外部數(shù)據(jù)的能力,而不是只是人工處理好的死數(shù)據(jù),比如說(shuō)使用瀏覽器進(jìn)行網(wǎng)絡(luò)搜索。
本文轉(zhuǎn)載自??AI探索時(shí)代?? 作者:DFires

















