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