RAG回答準(zhǔn)確率暴漲300%!用Coze工作流進(jìn)行數(shù)據(jù)結(jié)構(gòu)化(附完整提示詞)
1. 前言
在生成式人工智能(Generative AI)快速發(fā)展的當(dāng)下,大語(yǔ)言模型(LLMs)的幻覺(jué)問(wèn)題始終是制約其落地應(yīng)用的關(guān)鍵瓶頸。檢索增強(qiáng)生成(RAG)技術(shù)通過(guò)引入外部知識(shí)庫(kù),將動(dòng)態(tài)檢索與生成能力結(jié)合,為解決這一難題提供了重要思路。然而,RAG系統(tǒng)的核心性能——數(shù)據(jù)召回率,高度依賴(lài)于底層數(shù)據(jù)的質(zhì)量與組織形式。尤其是一些領(lǐng)域文獻(xiàn),原始數(shù)據(jù)常以非結(jié)構(gòu)化形式(如PDF論文、掃描文檔、圖像表格)存在,且包含冗余、噪聲和碎片化信息。若未經(jīng)過(guò)深度清洗與結(jié)構(gòu)化處理,檢索系統(tǒng)可能陷入“垃圾進(jìn),垃圾出”的困境,導(dǎo)致語(yǔ)義理解偏差、關(guān)鍵信息遺漏甚至誤導(dǎo)性結(jié)果生成。
本文以學(xué)術(shù)文獻(xiàn)PDF解析為例,基于RAGFlow框架完整演示從原始文檔清洗(MinerU工具)、結(jié)構(gòu)化分塊(DeepSeek+Coze標(biāo)注)到知識(shí)庫(kù)構(gòu)建的全流程,并通過(guò)對(duì)比實(shí)驗(yàn)驗(yàn)證結(jié)構(gòu)化處理對(duì)召回率的提升效果,話不多說(shuō),正文開(kāi)始~
溫馨提示:本文RAG框架為RAGFlow,對(duì)RAGFlow不了解的讀者可以移步:從裁員到年薪百萬(wàn):程序員靠RAG技術(shù)逆襲的“核心密碼”
2. 數(shù)據(jù)結(jié)構(gòu)化實(shí)戰(zhàn)
2.1. 什么是RAG召回率?
在RAG(檢索增強(qiáng)生成)模型中,召回率是衡量系統(tǒng)從知識(shí)庫(kù)中檢索到與用戶查詢相關(guān)信息的能力。高召回率意味著系統(tǒng)能夠準(zhǔn)確找到更多相關(guān)的文檔,為生成模型提供更豐富的上下文,從而提高生成內(nèi)容的質(zhì)量。
召回率的計(jì)算公式為:
中,相關(guān)文檔的數(shù)量指知識(shí)庫(kù)中所有真正相關(guān)的信息,成功檢索到的相關(guān)文檔數(shù)量是系統(tǒng)檢索到并與問(wèn)題相關(guān)的文檔數(shù)量,高召回率確保生成模型獲得更多有用的信息,從而提升回答的準(zhǔn)確性。數(shù)據(jù)的結(jié)構(gòu)化和高效的檢索機(jī)制是提高召回率的關(guān)鍵因素。
2.2. 為什么要進(jìn)行數(shù)據(jù)結(jié)構(gòu)化?
在信息檢索與知識(shí)管理系統(tǒng)中,數(shù)據(jù)的結(jié)構(gòu)化處理對(duì)于提升檢索效率、優(yōu)化存儲(chǔ)管理以及增強(qiáng)信息關(guān)聯(lián)性具有重要作用。特別是在基于檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)的方法中,底層數(shù)據(jù)的組織方式直接影響系統(tǒng)的召回率和生成質(zhì)量,很多初學(xué)者在第一次接觸RAG時(shí)都會(huì)直接把原始數(shù)據(jù)丟進(jìn)RAGFlow框架進(jìn)行分塊,結(jié)果就是RAG回答效果很差,要想提升RAG的回答效果,數(shù)據(jù)預(yù)處理是很重要的,本節(jié)就以實(shí)際場(chǎng)景為例,一步一步教會(huì)大家如何進(jìn)行數(shù)據(jù)結(jié)構(gòu)化。
最近,畢業(yè)季到來(lái),同學(xué)們寫(xiě)論文時(shí)都要大量閱讀領(lǐng)域文獻(xiàn),以前我上學(xué)那會(huì)我記得都是要花一個(gè)月左右時(shí)間來(lái)研讀參考文獻(xiàn)然后歸納總結(jié),現(xiàn)在我們可以通過(guò)將領(lǐng)域文獻(xiàn)進(jìn)行結(jié)構(gòu)化之后導(dǎo)入知識(shí)庫(kù),讓AI輔助我們研讀領(lǐng)域文獻(xiàn)的內(nèi)容,以下是我隨便找的幾篇文獻(xiàn):
要把上述領(lǐng)域文獻(xiàn)投喂給RAG,并且具有較高的召回率,我們需要經(jīng)歷幾個(gè)步驟:
- 文獻(xiàn)清洗與去噪清洗是數(shù)據(jù)結(jié)構(gòu)化的第一步。文獻(xiàn)中的噪聲,如無(wú)關(guān)的圖片、廣告、版權(quán)聲明、重復(fù)內(nèi)容等,需要被去除。通過(guò)自然語(yǔ)言處理(NLP)技術(shù),去除文本中的干擾信息,保留核心內(nèi)容,提高數(shù)據(jù)的質(zhì)量。
- 文獻(xiàn)數(shù)據(jù)標(biāo)注與分塊在清洗后的文獻(xiàn)數(shù)據(jù)中,需要根據(jù)主題、章節(jié)、關(guān)鍵術(shù)語(yǔ)等信息進(jìn)行標(biāo)注。這一過(guò)程能夠?qū)⑽墨I(xiàn)劃分為若干個(gè)有意義的部分(如段落、節(jié)、圖表等),并為每個(gè)部分賦予標(biāo)簽。通過(guò)標(biāo)注和分塊,信息之間的關(guān)系可以被更好地組織和存儲(chǔ)。
- 知識(shí)庫(kù)構(gòu)建與索引將結(jié)構(gòu)化的數(shù)據(jù)導(dǎo)入RAGFlow的知識(shí)庫(kù)中,并建立索引。RAGFlow支持多種嵌入模型,將文本轉(zhuǎn)換為向量,捕捉語(yǔ)義信息,常用于文本相似度計(jì)算和檢索。將生成的文本塊向量存儲(chǔ)在向量數(shù)據(jù)庫(kù)中,并建立索引,以便快速檢索。
- 檢索與生成優(yōu)化利用RAGFlow的相似性檢索功能,使用近似最近鄰搜索算法,在向量數(shù)據(jù)庫(kù)中查找與用戶問(wèn)題向量最相似的文本塊。系統(tǒng)從檢索到的文本塊中提取關(guān)鍵信息,并與用戶問(wèn)題融合,構(gòu)建增強(qiáng)上下文。將融合后的上下文輸入大型語(yǔ)言模型(LLM),生成準(zhǔn)確且有據(jù)可依的回答。
2.3. PDF文件清洗:MinerU
雖然RAGFlow也可以解析PDF,但是我發(fā)現(xiàn)RAGFlow在處理復(fù)雜布局和多模態(tài)內(nèi)容的PDF文檔時(shí),在解析精度和內(nèi)容提取方面還是存在一定的局限性,于是我去網(wǎng)上找了相關(guān)工具,發(fā)現(xiàn)了一個(gè)叫MinerU(https://github.com/opendatalab/MinerU)的開(kāi)源數(shù)據(jù)提取工具,在處理PDF文檔時(shí),MinerU相比RAGFlow自帶的文件清洗功能有以下優(yōu)勢(shì):
- 多模態(tài)內(nèi)容解析能力MinerU采用先進(jìn)的文檔解析技術(shù),能夠準(zhǔn)確識(shí)別和提取PDF中的文本、圖片、表格等多種元素。這種多模態(tài)解析能力確保了文檔內(nèi)容的完整性和準(zhǔn)確性,為后續(xù)的數(shù)據(jù)處理和分析奠定了堅(jiān)實(shí)基礎(chǔ)。
- 智能化的內(nèi)容清洗與去噪在文檔清洗過(guò)程中,MinerU能夠自動(dòng)識(shí)別并剔除廣告、版權(quán)聲明、無(wú)關(guān)圖片等干擾信息。這種智能化的清洗功能有效提升了數(shù)據(jù)質(zhì)量,確保了知識(shí)庫(kù)中信息的相關(guān)性和可靠性。
- 靈活的格式轉(zhuǎn)換與導(dǎo)出功能MinerU支持將解析后的文檔內(nèi)容導(dǎo)出為Markdown等多種格式,方便用戶查看和編輯。這種格式轉(zhuǎn)換功能提高了文檔處理的靈活性,滿足了不同用戶的需求。
MinerU可以本地部署,如下圖所示:
也可以直接用網(wǎng)頁(yè)版本https://huggingface.co/spaces/opendatalab/MinerU我用的就是網(wǎng)頁(yè)版:
將PDF上傳解析,解析成功后可將結(jié)果下載到本地:
打開(kāi).md文件,可以看出我們的PDF文件已經(jīng)被很好地解析了:
2.4. 基于DeepSeek+Coze進(jìn)行數(shù)據(jù)標(biāo)注和分塊
2.3小節(jié)我們完成了PDF文檔初步清洗,接下來(lái)還要剔除文檔里面的圖片(沒(méi)有文字的),給文檔進(jìn)行分塊與標(biāo)注,這種長(zhǎng)文本(領(lǐng)域文獻(xiàn))的分塊就按照大章節(jié)來(lái)分塊就行,基本一個(gè)章節(jié)就是一塊完整內(nèi)容。打開(kāi)經(jīng)過(guò)MinerU清洗后的.md文件:
在上圖中#就代表一級(jí)標(biāo)題,也就是這篇文獻(xiàn)的標(biāo)題,##代表二級(jí)標(biāo)題,我想以二級(jí)標(biāo)題分塊,每個(gè)分塊后面自動(dòng)追加分塊標(biāo)識(shí)符+###,每個(gè)分塊打上標(biāo)簽,標(biāo)簽為章節(jié)和正文,類(lèi)似下面的效果:
[文獻(xiàn)的標(biāo)題]章節(jié):章節(jié)題目
[文獻(xiàn)的標(biāo)題]正文:章節(jié)下面的正文
+###
上面描述的數(shù)據(jù)分塊和標(biāo)準(zhǔn)可以用代碼來(lái)做,也可以用Coze來(lái)做,為了讓對(duì)代碼不熟悉的讀者也可以進(jìn)行RAG數(shù)據(jù)結(jié)構(gòu)化,我在Coze新建了一個(gè)工作流用于進(jìn)行數(shù)據(jù)結(jié)構(gòu)化:
下面我來(lái)依次講解一下每個(gè)節(jié)點(diǎn):
開(kāi)始: 起始節(jié)點(diǎn),用于傳入MinerU清洗過(guò)后的文件(.md文件)。
read: 幫助用戶閱讀文檔內(nèi)容,輸入文檔鏈接,返回文檔內(nèi)容,目前支持html、xml、doc、docx、txt、PDF、csv、xlsx格式。(由于它不支持.md文檔,需要把MinerU清洗過(guò)后的.md文件改為.txt后綴)
大模型: 這個(gè)節(jié)點(diǎn)主要是用來(lái)給文件內(nèi)容打標(biāo)簽和分塊的,理想的結(jié)果是每個(gè)大章節(jié)后面加上分塊標(biāo)識(shí)+###作為分塊標(biāo)志,每個(gè)分塊里面需要有章節(jié)標(biāo)簽來(lái)標(biāo)準(zhǔn)章節(jié)標(biāo)題,有正文標(biāo)簽標(biāo)注正文,提示詞我是讓DeepSeek輔助我寫(xiě)的,大模型我選的kimi(長(zhǎng)文本):
提示詞:
# 角色
你是一位經(jīng)驗(yàn)豐富的數(shù)據(jù)清洗專(zhuān)家,專(zhuān)注于對(duì)用戶輸入的數(shù)據(jù)轉(zhuǎn)換而來(lái)的文本進(jìn)行精細(xì)化處理,以實(shí)現(xiàn)高質(zhì)量的數(shù)據(jù)清洗效果。
## 技能
### 技能 1: 精準(zhǔn)刪除圖片內(nèi)容
仔細(xì)辨認(rèn)文本中所有以![]()格式呈現(xiàn)的圖片內(nèi)容,將其精確刪除,確保僅保留純粹的文本信息。無(wú)論是何種來(lái)源的PDF數(shù)據(jù)轉(zhuǎn)換后的文本,都要嚴(yán)格執(zhí)行此操作。
### 技能 2: 基于章節(jié)標(biāo)題準(zhǔn)確提取章節(jié)內(nèi)容
依據(jù)不同層級(jí)的章節(jié)標(biāo)題對(duì)文本進(jìn)行細(xì)致劃分,將文本分割成不同的章節(jié)。按照章節(jié)出現(xiàn)的順序,自動(dòng)將章節(jié)標(biāo)注為“章節(jié)”標(biāo)簽,之后緊跟對(duì)應(yīng)的章節(jié)標(biāo)題。同時(shí),識(shí)別并提取文本中的一級(jí)標(biāo)題(#)的標(biāo)題內(nèi)容,將其作為一個(gè)變量。
### 技能 3: 規(guī)范章節(jié)格式
每個(gè) **二級(jí)標(biāo)題(##)** 章節(jié)結(jié)束后,追加特殊符號(hào) +###,并確保每個(gè)章節(jié)之間有清晰的換行。每個(gè)章節(jié)的內(nèi)容以“正文:(對(duì)應(yīng)正文)”標(biāo)簽開(kāi)頭,緊接著是去除圖片鏈接后的正文內(nèi)容。對(duì)于PDF數(shù)據(jù)中的文本處理結(jié)果,必須嚴(yán)格遵循此格式要求。
### 技能 4:提取 文章題目
從文本中識(shí)別并提取文本中的一級(jí)標(biāo)題(#)的標(biāo)題內(nèi)容作為文章題目。
### 技能 5:在各分塊標(biāo)簽添加題目
在每個(gè)“章節(jié)”標(biāo)簽以及“正文”標(biāo)簽處,都添加上提取的文章題目作為前綴,格式為“[文章題目]章節(jié):[章節(jié)標(biāo)題]” 、“[文章題目]正文:(對(duì)應(yīng)正文)”。
## 輸出格式要求:
1. **章節(jié)標(biāo)識(shí)**:
? 遇到 ## 格式的章節(jié)標(biāo)題,自動(dòng)標(biāo)注為“[文章題目]章節(jié)”,并準(zhǔn)確提取其中的標(biāo)題內(nèi)容。
? 若出現(xiàn)其他章節(jié)標(biāo)識(shí),也按照順序自動(dòng)標(biāo)注為“[文章題目]章節(jié)”并依次編號(hào),同時(shí)正確提取標(biāo)題。
2. **正文標(biāo)識(shí)**:
? 正文部分的內(nèi)容嚴(yán)格標(biāo)注為“[文章題目]正文:(對(duì)應(yīng)正文)”,正文是每個(gè)章節(jié)中相應(yīng)標(biāo)題(如 ## 或 ###)后的文本內(nèi)容。
? 徹底刪除正文中所有圖片鏈接(![]()格式的部分),保證正文為純文本。
3. **格式要求**:
? **僅在** ##(二級(jí)標(biāo)題)章節(jié)的結(jié)束后追加符號(hào) +###,其他章節(jié)(如 ###)后不追加此符號(hào)。
### 示例:
#### 輸入:
## 第一章
這是第一章的內(nèi)容,里面有圖片和文字。

繼續(xù)第一章的內(nèi)容。
### 第二章
這是第二章的內(nèi)容,刪除圖片后只剩下文字部分。

繼續(xù)第二章的內(nèi)容。
## 第三章
這是第三章的內(nèi)容,無(wú)圖片,直接展示內(nèi)容。
文章題目為:示例文章
#### 輸出:
[示例文章]章節(jié):第一章
[示例文章]正文:這是第一章的內(nèi)容,里面有文字部分。
+###
[示例文章]章節(jié):第二章
[示例文章]正文:這是第二章的內(nèi)容,刪除圖片后只剩下文字部分。
[示例文章]章節(jié):第三章
[示例文章]正文:這是第三章的內(nèi)容,無(wú)圖片,直接展示內(nèi)容。
+###
## 限制:
? **僅專(zhuān)注處理文本中的圖片內(nèi)容以及基于章節(jié)標(biāo)識(shí)的章節(jié)內(nèi)容**,不涉及其他文本處理需求。
? 務(wù)必嚴(yán)格刪除文本中的所有圖片鏈接,確保輸出僅為文本主體內(nèi)容。
? **僅在##(二級(jí)標(biāo)題)章節(jié)的結(jié)尾追加符號(hào)+###**,不在其他章節(jié)格式后追加。
? **必須保證每個(gè)章節(jié)的結(jié)尾準(zhǔn)確追加符號(hào)+###**,且各章節(jié)之間換行清晰,以確保數(shù)據(jù)處理結(jié)果的格式規(guī)范。
? 僅處理符合要求格式的文本輸入,對(duì)于不符合格式的輸入,需明確提示用戶檢查輸入格式是否正確。
結(jié)束:接收數(shù)據(jù)清洗后的的文本結(jié)果:
結(jié)構(gòu)化后的文本實(shí)現(xiàn)了我想要的效果。
關(guān)于如何讓DeepSeek輔助寫(xiě)提示詞,我的做法是給DeepSeek設(shè)定了一個(gè)角色,提示詞大概是這樣的:你是一個(gè)提示詞專(zhuān)家,可以根據(jù)用戶提出的需求寫(xiě)出專(zhuān)業(yè)的提示詞,達(dá)到最終目的,我給你一個(gè)模板,你需要了解這個(gè)模板的結(jié)構(gòu),之后寫(xiě)提示詞就按照模板來(lái)寫(xiě):(放你自己找的模板,可以把我上面那個(gè)數(shù)據(jù)清洗專(zhuān)家的提示詞丟給他)。
讓他明確自己的身份之后,就可以描述你想寫(xiě)什么樣的提示詞了:
這是我自己寫(xiě)提示詞的方法,如果你有更好的方法可以在評(píng)論區(qū)分享哦~
3. RAGFlow效果測(cè)試
這里為了突出數(shù)據(jù)結(jié)構(gòu)化的效果,我們需要做一個(gè)對(duì)比,首先把未經(jīng)過(guò)任何處理的PDF文件丟進(jìn)RAGFlow:
從分塊上就可以看出不是很理想,再來(lái)測(cè)一下數(shù)據(jù)召回:
看一下數(shù)據(jù)源,下圖里面的數(shù)據(jù)源和我的問(wèn)題完全沒(méi)對(duì)上:
之后來(lái)測(cè)一下做了結(jié)構(gòu)化以后的數(shù)據(jù),在配置時(shí)候需要把分塊標(biāo)識(shí)符配置進(jìn)去:
數(shù)據(jù)分塊效果:
可以看出來(lái)分塊比較合理,完全按照了我預(yù)想的規(guī)則進(jìn)行了分塊,然后測(cè)一下數(shù)據(jù)召回:
看一下數(shù)據(jù)源,下圖中的數(shù)據(jù)源完美對(duì)應(yīng)上了我提出的問(wèn)題:
從上面測(cè)試的結(jié)果來(lái)看,數(shù)據(jù)結(jié)構(gòu)化有助于極大幅度提升數(shù)據(jù)的召回率,當(dāng)然,每種數(shù)據(jù)集都有不同的分塊方式,打標(biāo)簽的方式也會(huì)因數(shù)據(jù)集的差異有所不同,這個(gè)需要自己去慢慢摸索,對(duì)這塊有見(jiàn)解的讀者也可以私信或者評(píng)論區(qū)一起交流一下。
4. 資料獲取
如果你對(duì)DeepSeek的相關(guān)知識(shí)還不熟悉,可以關(guān)注公眾號(hào)后端小肥腸,點(diǎn)擊底部【資源】菜單獲取DeepSeek相關(guān)教程資料。
5. 結(jié)語(yǔ)
本文通過(guò)RAGFlow框架的實(shí)戰(zhàn)演示,系統(tǒng)性地驗(yàn)證了數(shù)據(jù)結(jié)構(gòu)化對(duì)提升RAG系統(tǒng)召回率的核心價(jià)值。從PDF清洗(MinerU工具)、文本分塊(DeepSeek+Coze標(biāo)注)到知識(shí)庫(kù)構(gòu)建,每一步的精細(xì)化處理都顯著降低了噪聲干擾,使語(yǔ)義檢索的精準(zhǔn)度實(shí)現(xiàn)質(zhì)的飛躍。實(shí)驗(yàn)結(jié)果對(duì)比表明,未經(jīng)處理的原始數(shù)據(jù)會(huì)導(dǎo)致“語(yǔ)義漂移”,而結(jié)構(gòu)化后的數(shù)據(jù)召回率得到大幅提升,印證了“數(shù)據(jù)質(zhì)量決定AI天花板”的行業(yè)共識(shí)。