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

繼續第一章的內容。
### 第二章
這是第二章的內容,刪除圖片后只剩下文字部分。

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