RAG 企業(yè)級(jí)應(yīng)用落地框架細(xì)節(jié)差異對(duì)比 原創(chuàng)
1、什么是 RAG ?
RAG 檢索增強(qiáng)生成本質(zhì)上來講,就三件事情:
第一、Indexing 索引。即如何更有效地存儲(chǔ)知識(shí)。
第二、Retrieval 檢索。即在龐大的知識(shí)庫中,如何篩選出少量的有益知識(shí),供大模型參考。
第三、Generation 生成。即如何將用戶的提問與檢索到的知識(shí)相結(jié)合,使得大模型能夠生成有價(jià)值的回答。
這三個(gè)步驟表面上看似乎并不復(fù)雜,然而在 RAG 從構(gòu)建到實(shí)際部署的整個(gè)流程中,包含了眾多精細(xì)且復(fù)雜的工作環(huán)節(jié),這些落地細(xì)節(jié)是最具挑戰(zhàn)的工作。
雖然 RAG 架構(gòu)基本上是按照這些模塊來設(shè)計(jì)的,但不同的實(shí)施方案在具體落地時(shí)各有其獨(dú)特之處。
下面詳細(xì)對(duì)比剖析。
2、RAG 開源框架架構(gòu)對(duì)比
第一、網(wǎng)易 QAnything
網(wǎng)易 QAnything 的亮點(diǎn)在于 Rerank 模塊。
第二、RAGFlow
RAGFlow 的亮點(diǎn)在于數(shù)據(jù)處理模塊和知識(shí)索引構(gòu)建模塊。
第三、智譜 RAG
智譜 RAG 的亮點(diǎn)在于文檔解析、切片、Query 改寫及 Recall 模型的微調(diào)。
第四、FastGPT
FastGPT 的優(yōu)點(diǎn)是模塊動(dòng)態(tài)配置靈活。
3、開源 RAG 框架的各個(gè)模塊對(duì)比
第一、知識(shí)處理模塊
- QAnything的此模塊使用了 PDF 文件解析,具體是通過 PyMuPDF 庫來完成的,該庫是目前效率最高的解析工具。在解析文檔內(nèi)容時(shí),無論是文本文件還是圖像文件,均使用 PyMuPDF 的 get_text 方法。需要注意的是,如果圖像文件中不包含文字,使用此方法時(shí)將會(huì)出現(xiàn)錯(cuò)誤。
- RAGFlow 的此模塊 使用 OCR 和文檔布局分析等功能,在標(biāo)準(zhǔn)的 RAG(檢索增強(qiáng)生成)系統(tǒng)中通常被歸為一個(gè)不太顯眼的非結(jié)構(gòu)化數(shù)據(jù)加載器部分。據(jù)此推測,RagFlow 的一個(gè)關(guān)鍵優(yōu)勢(shì)很可能在于其文件解析的能力。
- 智譜 RAG--:
- FastGPT--:
第二、召回模塊
- QAnything 向量庫使用了 Milvus 的混合檢索策略(結(jié)合 BM25 全文檢索和向量檢索),在檢索過程中不設(shè)定任何閾值,直接返回前 100 個(gè)最相關(guān)的結(jié)果(TopK =100)。
- RAGFlow 向量數(shù)據(jù)庫選用了 ElasticSearch 進(jìn)行操作。它實(shí)現(xiàn)了文本檢索與向量檢索的混合模式,盡管未明確指定所用的向量模型,但在文本檢索方面,使用了 “huqie” 作為分詞工具。
- 智譜 RAG混合檢索結(jié)合語義和全文檢索,利用 BGE-M3 向量模型,不直接通過向量或文本檢索召回?cái)?shù)據(jù),而是使用 RFF 算法進(jìn)行排序。
- FastGPT文章結(jié)構(gòu)切片和遞增索引策略有效解決了問題。四種數(shù)據(jù)構(gòu)建方案表現(xiàn)佳:
- 查詢對(duì)原文:直接召回知識(shí)片段。
- 查詢對(duì)查詢:便于維護(hù),自動(dòng)提取查詢。
- 查詢對(duì)摘要:建立摘要與片段映射。
- 偽答案對(duì)原文:生成偽答案召回片段。
并對(duì) Embedding 模型進(jìn)行微調(diào)。
第三、Rerank 模塊
- QAnything 精確排序使用自定義的 Rerank 模型,閾值設(shè)定為 0.35。
- RAGFlow 重排排序結(jié)合了文本匹配得分和向量匹配得分,其中文本匹配的默認(rèn)權(quán)重為 0.3,向量匹配的權(quán)重為 0.7。
- 智譜 RAG支持重排功能,可動(dòng)態(tài)調(diào)整設(shè)置;整合嵌入向量(Embedding)與全文搜索(FullText)的結(jié)果,并按 ID 進(jìn)行去重處理;對(duì)問答(QA)字符串進(jìn)行拼接,移除其中的空格和標(biāo)點(diǎn)符號(hào),并對(duì)處理后的字符串進(jìn)行哈希編碼以實(shí)現(xiàn)去重;若已配置重排序(Rerank)模型,則調(diào)用該模型對(duì)結(jié)果進(jìn)行重新排序,并在評(píng)分(Score)中新增重排序得分;若未配置,則評(píng)分中不會(huì)包含重排序得分。
- ?FastGPT--:
第四、大模型處理模塊
- QAnything 將所有數(shù)據(jù)集合并至一個(gè)提示詞(Prompt),并對(duì)最大 token 長度進(jìn)行了優(yōu)化處理。
- RAGFlow 對(duì)大模型可處理的 token 數(shù)量進(jìn)行限制篩選。
- 智譜 RAG--。
- ?FastGPT在模型微調(diào)過程中,我們采取了分步驟的策略:起初使用公開可用的通用問答數(shù)據(jù)集進(jìn)行初步微調(diào),隨后利用特定領(lǐng)域的問答數(shù)據(jù)進(jìn)行進(jìn)一步微調(diào),最終使用經(jīng)過人工精確標(biāo)注的高質(zhì)量問答數(shù)據(jù)來進(jìn)行細(xì)致的微調(diào)。
第五、Web 服務(wù)模塊
- QAnything 利用 Sanic 框架搭建 Web 服務(wù)。
- RAGFlow 基于 Flask 構(gòu)建 Web 服務(wù)。
- 智譜 RAG--。
- ?FastGPT--。
第六、切詞處理模塊
- QAnything 利用自定義的 ChineseTextSplitter 完成。
- RAGFlow 基于 huqie 完成。
- 智譜 RAG--。
- ?FastGPT--。
第七、文件存儲(chǔ)模塊
- QAnything --。
- RAGFlow MinIO 被選用于文件存儲(chǔ)解決方案。。
- 智譜 RAG--。
- ?FastGPT--。
4、RAG 框架總結(jié)
1、Qanything 的 Rerank 模塊設(shè)計(jì)極為出色。
2、RAGFlow 在文檔處理方面表現(xiàn)卓越。
3、FastGPT 模塊具備豐富的動(dòng)態(tài)配置選項(xiàng)。
4、智譜 RAG 在特定領(lǐng)域數(shù)據(jù)的微調(diào)訓(xùn)練上表現(xiàn)最佳。
然而,一切脫離業(yè)務(wù)場景談架構(gòu)都是耍流氓,結(jié)合具體業(yè)務(wù)場景考慮下,并不存在絕對(duì)的“最好”。在各自的業(yè)務(wù)場景應(yīng)用中,能夠成功實(shí)施并產(chǎn)生效果的就是最佳選擇。實(shí)踐落地才是關(guān)鍵,落地成效為王道!
本文轉(zhuǎn)載自公眾號(hào)玄姐聊AGI 作者:玄姐
原文鏈接:??https://mp.weixin.qq.com/s/HoQ0Ex9yuxrBp0aW6kuWcQ??
