RAG架構(gòu)
完整的RAG 應(yīng)用流程主要包含兩個階段:
數(shù)據(jù)準(zhǔn)備階段:數(shù)據(jù)提取——>文本分割——>向量化(embedding)——>數(shù)據(jù)入庫
應(yīng)用階段:用戶提問——>數(shù)據(jù)檢索(召回)——>注入Prompt——>LLM 生成答案
下面我們詳細(xì)介紹一下各環(huán)節(jié)的技術(shù)細(xì)節(jié)和注意事項(xiàng):
數(shù)據(jù)準(zhǔn)備階段:
數(shù)據(jù)準(zhǔn)備一般是一個離線的過程,主要是將私域數(shù)據(jù)向量化后構(gòu)建索引并存入數(shù)據(jù)庫的過程。主要包括:數(shù)據(jù)提取、文本分割、向量化、數(shù)據(jù)入庫等環(huán)節(jié)。
數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)提取
數(shù)據(jù)加載:包括多格式數(shù)據(jù)加載、不同數(shù)據(jù)源獲取等,根據(jù)數(shù)據(jù)自身情況,將數(shù)據(jù)處理為同一個范式。
數(shù)據(jù)處理:包括數(shù)據(jù)過濾、壓縮、格式化等。
元數(shù)據(jù)獲取:提取數(shù)據(jù)中關(guān)鍵信息,例如文件名、Title、時間等 。
文本分割: 文本分割主要考慮兩個因素:1)embedding模型的Tokens限制情況;2)語義完整性對整體的檢索效果的影響。一些常見的文本分割方式如下:
句分割:以”句”的粒度進(jìn)行切分,保留一個句子的完整語義。常見切分符包括:句號、感嘆號、問號、換行符等。
固定長度分割:根據(jù)embedding模型的token長度限制,將文本分割為固定長度(例如256/512個tokens),這種切分方式會損失很多語義信息,一般通過在頭尾增加一定冗余量來緩解。
向量化(embedding):
向量化是一個將文本數(shù)據(jù)轉(zhuǎn)化為向量矩陣的過程,該過程會直接影響到后續(xù)檢索的效果。目前常見的embedding模型如表中所示,這些embedding模型基本能滿足大部分需求,但對于特殊場景(例如涉及一些罕見專有詞或字等)或者想進(jìn)一步優(yōu)化效果,則可以選擇開源Embedding模型微調(diào)或直接訓(xùn)練適合自己場景的Embedding模型。
模型名稱 描述 獲取地址 ChatGPT-Embedding ChatGPT-Embedding由OpenAI 公司提供,以接口形式調(diào)用。 https://platform.openai.com/docs/guides/embeddings/what-are-embeddings ERNIE-Embedding V1 ERNIE-Embedding V1由百度公司提供,依賴于文心大模型能力,以接口形式調(diào)用。 https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu M3E M3E是一款功能強(qiáng)大的開源Embedding模型,包含m3e-small、m3e-base、m3e-large等多個版本,支持微調(diào)和本地部署。 https://huggingface.co/moka-ai/m3e-base BGE BGE由北京智源人工智能研究院發(fā)布,同樣是一款功能強(qiáng)大的開源Embedding模型,包含了支持中文和英文的多個版本,同樣支持微調(diào)和本地部署。 https://huggingface.co/BAAI/bge-base-en-v1.5
數(shù)據(jù)向量化后構(gòu)建索引,并寫入數(shù)據(jù)庫的過程可以概述為數(shù)據(jù)入庫過程,適用于RAG 場景的數(shù)據(jù)庫包括:FAISS、Chromadb、ES、milvus等。一般可以根據(jù)業(yè)務(wù)場景、硬件、性能需求等多因素綜合考慮,選擇合適的數(shù)據(jù)庫。
應(yīng)用階段:
在應(yīng)用階段,我們根據(jù)用戶的提問,通過高效的檢索方法,召回與提問最相關(guān)的知識,并融入Prompt;大模型參考當(dāng)前提問和相關(guān)知識,生成相應(yīng)的答案。關(guān)鍵環(huán)節(jié)包括:數(shù)據(jù)檢索、注入Prompt等。
數(shù)據(jù)檢索
常見的數(shù)據(jù)檢索方法包括:相似性檢索、全文檢索等,根據(jù)檢索效果,一般可以選擇多種檢索方式融合,提升召回率。
相似性檢索:即計(jì)算查詢向量與所有存儲向量的相似性得分,返回得分高的記錄。常見的相似性計(jì)算方法包括:余弦相似性、歐氏距離、曼哈頓距離等。
全文檢索:全文檢索是一種比較經(jīng)典的檢索方式,在數(shù)據(jù)存入時,通過關(guān)鍵詞構(gòu)建倒排索引;在檢索時,通過關(guān)鍵詞進(jìn)行全文檢索,找到對應(yīng)的記錄。
注入Prompt
LLM 生成
Prompt作為大模型的直接輸入,是影響模型輸出準(zhǔn)確率的關(guān)鍵因素之一。在RAG 場景中,Prompt一般包括任務(wù)描述、背景知識(檢索得到)、任務(wù)指令(一般是用戶提問)等,根據(jù)任務(wù)場景和大模型性能,也可以在Prompt中適當(dāng)加入其他指令優(yōu)化大模型的輸出。一個簡單知識問答場景的Prompt如下所示:
【任務(wù)描述】 假如你是一個專業(yè)的客服機(jī)器人,請參考【背景知識】,回 【背景知識】 {content} // 數(shù)據(jù)檢索得到的相關(guān)文本 【問題】 石頭掃地機(jī)器人P10的續(xù)航時間是多久?
Prompt的設(shè)計(jì)只有方法、沒有語法,比較依賴于個人經(jīng)驗(yàn),在實(shí)際應(yīng)用過程中,往往需要根據(jù)大模型的實(shí)際輸出進(jìn)行針對性的Prompt調(diào)優(yōu)。
本文搜集了一些開源的基于LLM 的RAG (Retrieval-Augmented Generation)框架,旨在吸納業(yè)界最新的RAG應(yīng)用方法與思路。
RAG應(yīng)用框架
RAGFlow
項(xiàng)目地址:https://github.com/infiniflow/ragflow
簡介:RAGFlow 是一款基于深度文檔理解構(gòu)建的開源 RAG (Retrieval-Augmented Generation)引擎。RAGFlow 可以為各種規(guī)模的企業(yè)及個人提供一套精簡的 RAG 工作流程,結(jié)合大語言模型(LLM)針對用戶各類不同的復(fù)雜格式數(shù)據(jù)提供可靠的問答以及有理有據(jù)的引用。
特性:OCR、內(nèi)置多種文檔切分模板 、文檔切分可視化并且可修改、兼容多種文檔數(shù)據(jù)類型
架構(gòu):
硬件要求:CPU >= 4 核、RAM >= 16 GB、Disk >= 50 GB、Docker >= 24.0.0 & Docker Compose >= v2.26.1
QAnything
項(xiàng)目地址:https://github.com/netease-youdao/QAnything
簡介:QAnything ( Q uestion based on Anything ) 是貢獻(xiàn)支持任何格式文件或數(shù)據(jù)庫的本地知識庫問答系統(tǒng),可斷網(wǎng)安裝使用。您的任何格式的本地文件都可以往里扔,即可獲得準(zhǔn)確、快速、靠譜的問答體驗(yàn)。
特性:支持離線安裝使用、跨語種問答 、粗排和精排的二階段召回
架構(gòu):
硬件要求:最低CPU即可;使用GPU環(huán)境需要NVIDIA GPU Memory >= 4GB (use OpenAI API) & Docker Desktop >= 4.26.1(131620)
open-webui
項(xiàng)目地址:https://github.com/open-webui/open-webui
簡介:Open WebUI 是一個可擴(kuò)展、功能豐富且用戶友好的自托管 WebUI,旨在完全離線操作。它支持各種 LLM 運(yùn)行程序,包括 Ollama 和 OpenAI 兼容的 API 。
特性:原生支持Ollama 、支持安裝和卸載模型 、支持多模態(tài)模型 、支持切換模型 、多用戶管理
架構(gòu):
硬件要求:最低CPU即可,使用GPU環(huán)境需要NVIDIA GPU Memory >= 4GB (取決于使用Ollama的模型大小)
FastGPT
項(xiàng)目地址:https://github.com/labring/FastGPT
簡介:FastGPT 是一個基于 LLM 大語言模型的知識庫問答系統(tǒng),提供開箱即用的數(shù)據(jù)處理、模型調(diào)用等能力。同時可以通過 Flow 可視化進(jìn)行工作流編排,從而實(shí)現(xiàn)復(fù)雜的問答場景!
特性:支持應(yīng)用編排 、免登錄分享 、支持接入飛書、企業(yè)微信等應(yīng)用
架構(gòu):
硬件要求:CPU >= 2 核、RAM >= 4 GB用于安裝數(shù)據(jù)庫,GPU取決于使用的模型
Langchain-Chatchat
項(xiàng)目地址:https://github.com/chatchat-space/Langchain-Chatchat
簡介:基于 ChatGLM 等大語言模型與 Langchain 等應(yīng)用框架實(shí)現(xiàn),開源、可離線部署的檢索增強(qiáng)生成(RAG)大模型知識庫項(xiàng)目。
特性:算是比較早期的RAG 框架了,使用的基本全是python的框架。該項(xiàng)目是一個可以實(shí)現(xiàn)完全本地化 推理的知識庫增強(qiáng)方案, 重點(diǎn)解決數(shù)據(jù)安全保護(hù),私域化部署的企業(yè)痛點(diǎn)。支持市面上主流的本地大語言模型和Embedding模型,支持開源的本地向量數(shù)據(jù)庫。本開源方案采用Apache License,可以免費(fèi)商用,無需付費(fèi) 。
架構(gòu):
MaxKB
項(xiàng)目地址:https://github.com/1Panel-dev/MaxKB
簡介:MaxKB 是一款基于 LLM 大語言模型的知識庫問答系統(tǒng)。MaxKB = Max Knowledge Base,旨在成為企業(yè)的最強(qiáng)大腦。
特性:開箱即用,支持直接上傳文檔、自動爬取在線文檔;支持零編碼快速嵌入到第三方業(yè)務(wù)系統(tǒng);支持對接主流的大模型,包括 Ollama 本地私有大模型以及API 調(diào)用
架構(gòu): 前端:Vue.js 后端:Python / Django LangChain:LangChain 向量數(shù)據(jù)庫:PostgreSQL / pgvector 大模型:Azure OpenAI、OpenAI 、百度千帆 大模型、Ollama、通義千問 、Kimi、智譜 AI 、訊飛星火
硬件要求: 操作系統(tǒng):Ubuntu 22.04 / CentOS 7 64 位系統(tǒng) CPU/內(nèi)存:推薦 2C/4GB 以上 磁盤空間:100GB
文章轉(zhuǎn)自微信公眾號@機(jī)器學(xué)習(xí)AI算法工程
我們有何不同?
API服務(wù)商零注冊
多API并行試用
數(shù)據(jù)驅(qū)動選型,提升決策效率
查看全部API→