一、RAG是什么?
RAG(Retrieval-Augmented Generation,檢索增強(qiáng)生成), 一種AI框架,將傳統(tǒng)的信息檢索系統(tǒng)(例如數(shù)據(jù)庫)的優(yōu)勢(shì)與生成式大語言模型(LLM)的功能結(jié)合在一起。不再依賴LLM訓(xùn)練時(shí)的固有知識(shí),而是在回答問題前,先從外部資料庫中"翻書"找資料,基于這些資料生成更準(zhǔn)確的答案。
?RAG技術(shù)核心緩解大模型落地應(yīng)用的幾個(gè)關(guān)鍵問題:
?知識(shí)新鮮度:大模型突破模型訓(xùn)練數(shù)據(jù)的時(shí)間限制
?幻覺問題:降低生成答案的虛構(gòu)概率,提供參照來源
?信息安全:通過外掛知識(shí)庫而不是內(nèi)部訓(xùn)練數(shù)據(jù),減少隱私泄露
?垂直領(lǐng)域知識(shí):無需訓(xùn)練直接整合垂直領(lǐng)域知識(shí)
二、RAG核心流程

2.1 知識(shí)準(zhǔn)備階段
1、數(shù)據(jù)預(yù)處理
1、文檔解析
?輸入:原始文檔(如Markdown/PDF/HTML)
?操作:
?提取純文本(如解析Markdown標(biāo)題、段落)
?處理特殊格式(如代碼塊、表格、圖片、視頻等)
例如:
[標(biāo)題] 什么是 ROMA? [段落] ROMA 是一個(gè)全自主研發(fā)的前端開發(fā)基于自定義DSL(Jue語言),一份代碼,可在iOS、Android、Harmony、Web四端運(yùn)行的跨平臺(tái)解決方案。 [段落] ROMA 框架的中文名為羅碼。 [標(biāo)題] 今天天氣 [列表項(xiàng)] 今天的室外溫度為35°C,天氣晴朗。
文檔的解析過程需要考慮不同文檔內(nèi)容例如文本、圖片、表格等場(chǎng)景,以及文檔的語言,布局情況,可以考慮使用一些優(yōu)秀的三方工具或者一些視覺模型,布局分析模型,語義理解模型來輔助解析。
2、數(shù)據(jù)清洗與標(biāo)準(zhǔn)化處理
提升文本質(zhì)量和一致性,使向量表示更準(zhǔn)確,從而增強(qiáng)檢索相關(guān)性和LLM回答質(zhì)量;同時(shí)消除噪聲和不規(guī)則格式,確保系統(tǒng)能正確理解和處理文檔內(nèi)容。
包括:
?去除特殊字符、標(biāo)簽、亂碼、重復(fù)內(nèi)容。
?文本標(biāo)準(zhǔn)化,例如 時(shí)間、單位標(biāo)準(zhǔn)化(如“今天” → “2025-07-17”)。
?其他處理
數(shù)據(jù)的清洗和標(biāo)準(zhǔn)化過程可以使用一些工具或NLTK、spaCy等NLP工具進(jìn)行處理。
例如:
ROMA框架/p?> 處理: "ROMA框架" 今天的室外溫度為35°C,天氣晴朗。 處理: "2025-07-17 的室外溫度為35°C,天氣晴朗"
3、元數(shù)據(jù)提取
關(guān)于數(shù)據(jù)的數(shù)據(jù),用于描述和提供有關(guān)數(shù)據(jù)的附加信息。
?文檔來源:文檔的出處,例如URL、文件名、數(shù)據(jù)庫記錄等。
?創(chuàng)建時(shí)間:文檔的創(chuàng)建或更新時(shí)間。
?作者信息:文檔的作者或編輯者。
?文檔類型:文檔的類型,如新聞文章、學(xué)術(shù)論文、博客等。
?...
?
元數(shù)據(jù)在RAG中也非常重要,不僅提供了額外的上下文信息,還能提升檢索質(zhì)量:
1. 檢索增強(qiáng)
?精準(zhǔn)過濾:按時(shí)間、作者、主題等縮小搜索范圍
?相關(guān)性提升:結(jié)合向量相似度和元數(shù)據(jù)特征提高檢索準(zhǔn)確性
2. 上下文豐富
?來源標(biāo)注:提供文檔來源、作者、發(fā)布日期等信息
?文檔關(guān)系:展示文檔間的層級(jí)或引用關(guān)系
?
常見的元數(shù)據(jù)提取方式:
?正則/HTML/... 等解析工具,提取標(biāo)題、作者、日期等
?自然語言處理: 使用NLP技術(shù)(如命名實(shí)體識(shí)別、關(guān)鍵詞提?。奈臋n內(nèi)容中提取元數(shù)據(jù),如人名、地名、組織名、關(guān)鍵詞等
?機(jī)器學(xué)習(xí)模型: 訓(xùn)練機(jī)器學(xué)習(xí)模型來自動(dòng)提取元數(shù)據(jù)
?通過調(diào)用外部API(如Google Scholar API、Wikipedia API)獲取文檔的元數(shù)據(jù)
?...
例如:
complete_metadata_chunk1 = { 'file_path': '/mydocs/roma_intro.md', 'file_name': 'roma_intro.md', 'chunk_id': 0, 'section_title': '# 什么是 ROMA?', 'subsection_title': '', 'section_type': 'section', 'chunking_strategy': 3, 'content_type': 'product_description', 'main_entity': 'ROMA', 'language': 'zh-CN', 'creation_date': '2025-07-02', # 從文件系統(tǒng)獲取 'word_count': 42 # 計(jì)算得出, 'topics': ['ROMA', '前端框架', '跨平臺(tái)開發(fā)'], 'entities': { 'products': ['ROMA', 'Jue語言'], # 實(shí)體識(shí)別 'platforms': ['iOS', 'Android', 'Web'] }, }
2、內(nèi)容分塊(Chunking)
在RAG架構(gòu)中,分塊既是核心,也是挑戰(zhàn),它直接影響檢索精度、生成質(zhì)量,需要在檢索精度、語境完整性和計(jì)算性能之間取得平衡。

內(nèi)容分塊將長(zhǎng)文檔切分成小塊,可以解決向量模型的token長(zhǎng)度限制,使RAG更精確定位相關(guān)信息,提升檢索精度和計(jì)算效率。
autobots 功能分塊:

實(shí)際RAG框架中按照文檔的特性選擇合適的分塊策略進(jìn)行分塊.
常見的分塊策略
1. 按大小分塊
按固定字符數(shù)進(jìn)行分塊,實(shí)現(xiàn)簡(jiǎn)單但可能切斷語義單元。
優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單且計(jì)算開銷小,塊大小均勻便于管理。
缺點(diǎn):可能切斷語義單元,如句子或段落被分到不同塊中。
例如:
第一段:# ROMA框架介紹ROMA是一個(gè)全自主研發(fā)的前端開發(fā)框架,基于自定義DSL(Jue語言)。 一份代碼,可在iOS、Android、Harmony 第二段:、Web三端運(yùn)行的跨平臺(tái)解決方案。ROMA框架的中文名為羅碼。
句子被截?cái)啵?一份代碼,可在iOS、Android、Harmony" 和 "、Web三端運(yùn)行的跨平臺(tái)解決方案" 被分到不同塊,影響理解。
2. 按段落分塊
以段落為基本單位進(jìn)行分塊,保持段落完整性,但段落長(zhǎng)度可能差異很大。
優(yōu)點(diǎn):尊重文檔自然結(jié)構(gòu),保留完整語義單元。
缺點(diǎn):段落長(zhǎng)度差異大,可能導(dǎo)致塊大小不均衡。
例如:
第一段:# ROMA框架介紹ROMA是一個(gè)全自主研發(fā)的前端開發(fā)框架,基于自定義DSL(Jue語言)。 一份代碼,可在iOS、Android、Harmony、Web三端運(yùn)行的跨平臺(tái)解決方案。ROMA框架的中文名為羅碼。 第二段:# 核心特性1. 跨平臺(tái):一套代碼運(yùn)行于多端2. 高性能:接近原生的性能表現(xiàn)3. 可擴(kuò)展:豐富的插件系統(tǒng)
第一段包含標(biāo)題和多行內(nèi)容,而其他段落相對(duì)較短,可能導(dǎo)致檢索不均衡。
3. 按語義分塊
基于文本語義相似度進(jìn)行動(dòng)態(tài)分塊,保持語義連貫性,但計(jì)算開銷大。
說明:基于文本語義相似度動(dòng)態(tài)調(diào)整分塊邊界。
優(yōu)點(diǎn):保持語義連貫性,能識(shí)別內(nèi)容主題邊界。
示例:
第一段:# ROMA框架介紹ROMA是一個(gè)全自主研發(fā)的前端開發(fā)框架,基于自定義DSL(Jue語言)。 一份代碼,可在iOS、Android、Harmony、Web四端運(yùn)行的跨平臺(tái)解決方案。 第二段:ROMA框架的中文名為羅碼。 ## 核心特性1. 跨平臺(tái):一套代碼運(yùn)行于多端
使用依賴模型質(zhì)量,相同文本在不同運(yùn)行中可能產(chǎn)生不同分塊結(jié)果。
分塊策略總結(jié):

優(yōu)化方式
?混合分塊策略
結(jié)合多種分塊方法的優(yōu)點(diǎn),如先按段落分塊,再根據(jù)塊大小調(diào)整,做到既保持語義完整性,又能控制塊大小均勻
?優(yōu)化重疊區(qū)域
根據(jù)內(nèi)容特性動(dòng)態(tài)調(diào)整塊之間的重疊區(qū)域大小,關(guān)鍵信息出現(xiàn)在多個(gè)塊中,提高檢索召回率
常用的分塊工具
?LangChain框架:提供多種分塊策略,包括RecursiveCharacterTextSplitter、MarkdownTextSplitter等
?NLTK:用于基于自然語言句子的分塊
?spaCy:提供語言學(xué)感知的文本分割
?
3、向量化(Embedding)
將高維文本數(shù)據(jù)壓縮到低維空間,便于處理和存儲(chǔ)。將文本轉(zhuǎn)換為計(jì)算機(jī)可以理解的數(shù)值,使得計(jì)算機(jī)能夠理解和處理語義信息,從而在海量數(shù)據(jù)文本中實(shí)現(xiàn)快速、高效的相似度計(jì)算和檢索。
簡(jiǎn)單理解:通過一組數(shù)字來代表文本內(nèi)容的“本質(zhì)”。
例如,"ROMA是一個(gè)跨平臺(tái)解決方案..."這句話可能被轉(zhuǎn)換為一個(gè)384維的向量:
[塊1] 什么是ROMA?
ROMA是一個(gè)全自主研發(fā)的前端開發(fā)框架,基于自定義DSL(Jue語言)...
[
{
"chunk_id": "doc1_chunk1",
"text": "# 什么是 ROMA?nROMA 是一個(gè)全自主研發(fā)的前端開發(fā)基于自定義DSL(Jue語言),一份代碼,可在iOS、Android、Harmony、Web端運(yùn)行的跨平臺(tái)解決方案。",
"vector": [0.041, -0.018, 0.063, ..., 0.027],
"metadata": {
"source": "roma_introduction.md",
"position": 0,
"title": "ROMA框架介紹"
}
},
// 更多文檔塊...
]
常用的Embedding模型
| 模型名稱 | 開發(fā)者 | 維度 | 特點(diǎn) |
| all-minilm-l6-v2 | Hugging Face | 384 | 高效推理,多任務(wù)支持,易于部署,適合資源受限環(huán)境 |
| Text-embedding-ada-002 | OpenAI | 1536 | 性能優(yōu)秀,但可能在國內(nèi)使用不太方便。 |
| BERT embedding | 768 (base) 1024 (large) | 廣泛用于各種自然語言處理任務(wù)。 | |
| BGE (Baidu’s General Embedding) | 百度 | 768 | 在HuggingFace的MTEB上排名前2,表現(xiàn)非常出色。 |
?
4、向量數(shù)據(jù)庫入庫
將生成的向量數(shù)據(jù)和元數(shù)據(jù)進(jìn)行存儲(chǔ),同時(shí)創(chuàng)建索引結(jié)構(gòu)來支持快速相似性搜索。
常用的向量數(shù)據(jù)庫包括:
| 數(shù)據(jù)庫 | 復(fù)雜度 | 核心優(yōu)勢(shì) | 主要局限 | 適用場(chǎng)景 |
| ChromaDB | 低 | 輕量易用, Python集成 | 僅支持小規(guī)模數(shù)據(jù) | 原型開發(fā)、小型項(xiàng)目 |
| FAISS | 中 | 十億級(jí)向量檢索, 高性能 | 需自行實(shí)現(xiàn)特殊化 | 學(xué)術(shù)研究、大規(guī)模檢索 |
| Milvus | 高 | 分布式擴(kuò)展, 多數(shù)據(jù)類型支持 | 部署復(fù)雜, 資源消耗大 | 企業(yè)級(jí)生產(chǎn)環(huán)境 |
| Pinecone | 低 | 全托管, 自動(dòng)擴(kuò)縮容 | 成本高, 數(shù)據(jù)在第三方云 | 無運(yùn)維團(tuán)隊(duì)/SaaS應(yīng)用 |
| Elasticsearch | 高 | 全文搜索強(qiáng)大,生態(tài)系統(tǒng)豐富 | 向量搜索為后加功能,性能較專用解決方案差 | 日志分析、全文搜索、通用數(shù)據(jù)存儲(chǔ) |
2.2 問答階段
1、查詢預(yù)處理
` 意圖識(shí)別:使用分類模型區(qū)分問題類型(事實(shí)查詢、建議、閑聊等)。
問題預(yù)處理:問題內(nèi)容清洗和標(biāo)準(zhǔn)化,過程與前面數(shù)據(jù)預(yù)處理類似。
查詢?cè)鰪?qiáng): 使用知識(shí)庫或LLM生成同義詞(如“動(dòng)態(tài)化” → “Roma”),上下文補(bǔ)全可以結(jié)合歷史會(huì)話總結(jié)(例如用戶之前問過“Roma是什么”)。
?
2、數(shù)據(jù)檢索(召回)
1、向量化
使用與入庫前數(shù)據(jù)向量化相同的模型,將處理后的問題內(nèi)容向量化。
例子:
問題: "ROMA是什么?"
處理后
{
"vector": [0.052, -0.021, 0.075, ..., 0.033],
"top_k": 3,
"score_threshold": 0.8,
"filter": {"doc_type": "技術(shù)文檔"}
}
2、檢索
相似度檢索:查詢向量與所存儲(chǔ)的向量最相似(通過余弦相似度匹配)的前 top_k 個(gè)文檔塊。
關(guān)鍵詞檢索:倒排索引的傳統(tǒng)方法,檢索包含"Roma"、"優(yōu)勢(shì)"等精確關(guān)鍵詞的文檔。
混合檢索: 合并上面多種檢索結(jié)果,效果最優(yōu)。
例如:檢索"ROMA是什么?"

3、重排序(Reranking)
初步檢索在精度和語義理解上的不足,通過更精細(xì)的上下文分析提升結(jié)果相關(guān)性。它能更好處理同義詞替換、一詞多義等語義細(xì)微差異,使最終結(jié)果準(zhǔn)確。
原理:使用模型對(duì)每個(gè)檢索結(jié)果計(jì)算相關(guān)性分?jǐn)?shù)。
歸一化:重排序模型原始輸出分?jǐn)?shù)沒有固定的范圍,它可能是任意實(shí)數(shù),將結(jié)果歸一化處理,將分?jǐn)?shù)映射到 [0, 1] 范圍內(nèi),使其更容易與向量相似度分?jǐn)?shù)進(jìn)行比較。
例如:

常用的重排序模型:

?
3、信息整合
格式化檢索的結(jié)果,構(gòu)建提示詞模板,同時(shí)將搜索的內(nèi)容截?cái)嗷蛘L(zhǎng)文本以適應(yīng)LLM上下文窗口token。
提示詞優(yōu)化:
1. 限定回答范圍
2. 要求標(biāo)注來源
3. 設(shè)置拒絕回答規(guī)則
4. ...
例如:
prompt 模板:
你是一名ROMA框架專家,請(qǐng)基于以下上下文回答:
參考信息:
[文檔1] 什么是 ROMA?
ROMA 是一個(gè)全自主研發(fā)的前端開發(fā)基于自定義DSL(Jue語言),一份代碼,可在iOS、Android、Harmony、Web四端運(yùn)行的跨平臺(tái)解決方案。
ROMA 框架的中文名為羅碼。
[文檔2] Roma介紹?
[Roma介紹](docs/guide/guide/introduction.md)
文檔地址: https://roma-design.jd.com/docs/guide/guide/introduction.html
要求:
1. 分步驟說明,含代碼示例
2. 標(biāo)注來源文檔版本
3. 如果參考信息中沒有相關(guān)內(nèi)容,請(qǐng)直接說明無法回答,不要編造信息
請(qǐng)基于以下參考信息回答用戶的問題。如果參考信息中沒有相關(guān)內(nèi)容,請(qǐng)直接說明無法回答,不要編造信息。
用戶問題: ROMA是什么?
回答: {answer}
4、LLM生成
向LLM(如GPT-4、Claude)發(fā)送提示,獲取生成結(jié)果。
autobots示例:

以上,實(shí)現(xiàn)了最簡(jiǎn)單的RAG流程。實(shí)際的RAG過程會(huì)比上述麻煩更多,包括圖片、表格等多模態(tài)內(nèi)容的處理,更復(fù)雜的文本解析和預(yù)處理過程,文檔格式的兼容,結(jié)構(gòu)化與非結(jié)構(gòu)化數(shù)據(jù)的兼容等等。
?
最后RAG各階段優(yōu)化方式:

-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
4013瀏覽量
68298 -
大模型
+關(guān)注
關(guān)注
2文章
3629瀏覽量
5156
發(fā)布評(píng)論請(qǐng)先 登錄
TaD+RAG-緩解大模型“幻覺”的組合新療法
名單公布!【書籍評(píng)測(cè)活動(dòng)NO.52】基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化
【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+大模型微調(diào)技術(shù)解讀
【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+Embedding技術(shù)解讀
【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+第一章初體驗(yàn)
【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】RAG基本概念
《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫
RAG(檢索增強(qiáng)生成)原理與實(shí)踐
阿里云推出企業(yè)級(jí)大模型RAG系統(tǒng)
什么是RAG,RAG學(xué)習(xí)和實(shí)踐經(jīng)驗(yàn)
如何手?jǐn)]一個(gè)自有知識(shí)庫的RAG系統(tǒng)
使用OpenVINO和LlamaIndex構(gòu)建Agentic-RAG系統(tǒng)
Cloudera推出RAG Studio,助力企業(yè)快速部署聊天機(jī)器人
RAG的概念及工作原理
RAG實(shí)踐:一文掌握大模型RAG過程
評(píng)論