我以為 AI 搞知識庫很簡單,直到我開始真的做

作者:努力撞蘑菇AI
日期:2026年6月16日 下午6:53
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

數據準備決定 RAG 系統上限,四個常見坑同解決方法

整理版摘要

作者分享自己由跑通 RAG Demo 到真實業務嘅經歷,發現準確率得 40%,反直覺咁體會到系統上限唔係由模型決定,而係由數據準備決定。佢總結咗四個最常見嘅陷阱同解決方案,強調底層數據質量先係真正嘅樽頸。

第一個陷阱係 PDF 解析:用 PyPDF 讀雙欄文件會搞到內容交叉混排,AI 拎到嘅係一堆亂碼。解決方法係用專門工具(如 Docling)處理複雜佈局,同埋一定要親眼睇解析後嘅原始文本。第二個陷阱係按字數切塊:一句完整結論會被切成兩截,令上下文失效。正確做法係按文檔結構(標題、段落)切,再加麵包屑標記保留出處。第三個陷阱係純向量檢索:對專有名詞同數字會語義漂移,精確匹配失效。解法係混合檢索,用 BM25 做關鍵詞匹配加上向量檢索,實測召回率提升 30%。第四個陷阱係表格:非結構化文本處理會搞到行列關係消失,正確做法係將表格獨立處理成 Markdown 或 JSON。

最後作者覆盤時間分配:數據清洗只用咗 10% 時間,但帶嚟嘅提升係調模型同寫 Prompt 加埋嘅三倍。所以佢而家嘅優先級係:數據清洗質量 > Chunking 策略 > 檢索策略 > Prompt > 模型。底層數據嘅質量決定咗天花板,而唔係頂層嘅花巧嘢。

  • PDF 解析要用專門工具(如 Docling),避免雙欄混排,而且一定要檢查原始文本。
  • Chunking 應該按文檔結構(標題、段落)切,再加麵包屑保留上下文,唔好按字數亂切。
  • 純向量檢索對專有名詞同數字會語義漂移,要用 BM25 加向量做混合檢索,召回率提升 30%。
  • 表格要獨立處理,轉成 MarkdownJSON,唔可以混入普通文本 chunk。
  • 數據準備嘅投入回報最高:10% 時間帶嚟嘅提升係調模型同寫 Prompt 加埋嘅三倍。
值得記低
工具

Docling

IBM 開源 PDF 解析工具,專門處理複雜佈局,解決雙欄混排問題。

整理重點

PDF 解析:雙欄文件嘅隱形陷阱

多數人搭 RAG 系統第一步就係用 PyPDFPDF,切完存向量庫,跑完 demo 覺得好順。但一用到真實業務,尤其係雙欄排版嘅文件,準確率就暴跌。

RAG 系統的上限,不是模型決定的,係數據準備決定的

作者試過畀一份雙欄報告,AI 畀出嘅回答數據對唔上,原來係解析後左欄右欄交叉混排。人眼一睇就知廢,但 AI 唔會知。

雙欄 PDF 被讀成了交叉混排

後來換咗 DoclingIBM 開源工具)先解決到。教訓係:PDF 解析唔係「能跑通」就算,要真係去睇解析後嘅原始文本係咩樣。

PDF 解析唔係能跑通就算完,要真係去睇解析後的原始文本

整理重點

Chunking:按字數切係畀 AI 食碎片

Chunking 係必做步驟,但好多人求其按字數切:每 500 字一塊,重疊 50 字。呢個做法有一個致命問題——完全唔理內容喺邊度斷。

一個完整的結論被切成了兩塊

結果前一塊有結論冇原因,後一塊有原因冇結論,兩塊分開召回都冇意義,又冇人會合返埋。

按文檔結構切——按標題、段落切

作者建議利用人類已經標註好嘅語義邊界,即係標題同段落。另外要喺每個 chunk 開頭加一串麵包屑,標明文檔名 > 一級標題 > 二級標題,咁召回時上下文唔會丟。

每個 chunk 開頭加一串麵包屑:[文檔名 > 一級標題 > 二級標題]

整理重點

檢索策略:純向量檢索嘅死穴

向量檢索靠語義相似,你問「點樣提升性能」,佢會揾到「優化速度」嘅段落。聽落好勁,但佢對精確嘅專有名詞、產品型號、數字會語義漂移。

精確的專有名詞、產品型號、數字,向量檢索會『語義漂移』

例如你問「GPT-4o 嘅 context window 係幾多」,向量檢索可能畀你一堆「大模型上下文長度」嘅泛泛描述,揾唔到精確數字。

BM25(關鍵詞匹配)+ 向量檢索,兩路並行

解法係混合檢索BM25 負責精確,向量負責語義,結果融合。實測召回率可以提升 30% 左右。可惜多數教程只教向量檢索,省略咗 BM25 部分。

召回率能提升 30% 左右

整理重點

表格:非結構化數據最難搞嘅嘢

文本非結構化仲算易處理,但表格係真正嘅噩夢。一張有行列關係嘅表,經過多數 PDF 解析器之後會變成一串「產品A 價格100 庫存500 產品B 價格200 庫存300」。

行列關係完全消失

LLM 拎到呢串文字,根本唔知「100」對應「產品A」定係「價格」。作者見過有人用呢種方式做財務知識庫,最後要手動核對,仲慢過直接查表。

表格要單獨處理,轉成 Markdown 表格或 JSON 格式

正確做法係將表格獨立處理,唔好混入普通文本 chunk,咁先保留到行列關係

整理重點

時間分配覆盤:10% 嘅投入換來三倍回報

作者覆盤自己嘅時間分配:調模型參數花 20%,寫 Prompt 花 30%,數據清洗同 chunking 策略只花 10%。但結果呢?數據嗰 10% 帶嚟嘅提升,係前面 50% 嘅三倍。

數據那 10% 帶來的提升,是前面 50% 的三倍

所以作者而家嘅優先級好清楚:數據清洗 > Chunking > 檢索 > Prompt > 模型。唔係話模型唔重要,而係喺多數真實場景入面,底層數據先係樽頸。


大部分人行 RAG 系統嘅起點係咁樣嘅:

揾個教程,駁埋 LLM,將文件掉入去,跑通 demo,覺得好順滑。

然後用喺真實業務上——準確率得 40%。

我都係咁樣過嚟。

搞咗一段時間之後,我發現咗一件反直覺嘅事:

RAG 系統嘅上限,唔係由模型決定嘅,而係由數據準備決定嘅。

個個都喺度卷模型、卷 Prompt,但係真正搞冧個項目嘅,係最上游嗰步——你餵俾 AI 嘅「知識」本身,就已經亂曬籠。


第一個坑:PDF 解析,你以為搞掂咗,其實冇

我最開始用嘅係最常見嘅方案:直接用 PyPDF 將 PDF 讀成文字,然後切塊,存入向量庫。

跑通咗,demo 好靚。

直到有人拎咗一份雙欄排版嘅報告嚟試——AI 畀出嘅答案裏面,數據對唔上,上下文亂曬,好似亂咁噏。

我去睇原始解析結果,先發現問題:

雙欄 PDF 被讀成「左欄第一行 + 右欄第一行 + 左欄第二行 + 右欄第二行……」

兩欄內容完全交叉混埋一齊。對人眼嚟講一睇就知係廢嘅,但 AI 拎到嘅就係呢串文字,佢唔知。

後來換咗 Docling(IBM 出嘅開源工具),專處理複雜佈局,雙欄問題解決咗。

但係教訓係:PDF 解析唔係「跑得通」就算完,要真係去睇解析後嘅原始文字係咩樣。

大部份人 skip 咗呢步。


第二個坑:按字數切塊,係喺度餵碎片俾 AI

Chunking——將文件切做細塊存入向量庫——呢步大家都知要做。

但係點樣切,好多人冇認真諗過。

最常見嘅做法係按字數切:每 500 字一塊,相鄰嘅塊重疊 50 個字。

簡單,夠用,但係有一個致命問題:佢完全唔理你嘅內容喺邊度斷開。

我遇過咁樣嘅情況:一個完整嘅結論——「A 方案喺高併發場景下優於 B 方案,原因係……」——被切開咗兩塊。

前塊有結論,冇原因。後塊有原因,冇結論。

兩塊單獨召回,都冇意義。合埋一齊又冇人會將佢哋拼返埋。

正確嘅做法係按文件結構切——按標題、段落切,而唔係按字數切。

文件作者寫標題嘅時候,本來就係做緊語義分割。你按結構切,係利用人類已經標註好嘅語義邊界。

另外,每個 chunk 開頭加一串麪包屑(breadcrumb):[文檔名 > 一級標題 > 二級標題]——召回嘅時候上下文唔會丟。


第三個坑:純向量檢索,專有名詞係佢嘅死穴

向量檢索嘅原理係語義相似——你問「點樣提升性能」,佢揾到講「優化速度」嘅段落,因為語義相近。

聽落好勁,實際上有一個大坑:

精確嘅專有名詞、產品型號、數字,向量檢索會出現「語義漂移」。

你問「GPT-4o 嘅 context window 係幾多」,向量檢索可能畀你一堆「大模型上下文長度」嘅泛泛描述,就係揾唔到嗰個精確數字。

因為 embedding 模型將「GPT-4o」同「大模型」壓到相近嘅向量空間,精確匹配反而冇咗。

解法係混合檢索:BM25(關鍵詞匹配)+ 向量檢索,兩路並行,結果融合。

BM25 負責精確,向量負責語義,互補。

實測召回率可以提升大約 30%。

但係幾乎冇人喺真實產品入面做咗呢步——因為多數教程淨係教向量檢索,BM25 嘅部分被省略咗。


第四個坑:表格,係非結構化數據入面最難搞嘅嘢

呢個好多人冇意識到。

文字嘅非結構化,仲算易處理——分段、切塊、存向量,基本流程行得通。

表格係真正嘅惡夢。

一張有行列關係嘅表,經過大部份 PDF 解析器處理之後,變成咁樣:

產品A 價格100 庫存500 產品B 價格200 庫存300

行列關係完全消失。LLM 拎到呢串文字,根本唔知「100」對應嘅係「產品A」定係「價格」。

我見過有人用呢種方式做財務知識庫,AI 畀出嘅數字對唔上,最後手動核對花咗比直接查表更多嘅時間。

正確做法:表格要單獨處理,轉成 Markdown 表格或者 JSON 格式,唔可以混入普通文字 chunk 入面。


最後講一件真係令我改變思路嘅事

做咗一段時間之後,我覆盤咗一下時間分配:

調模型參數用咗 20% 嘅時間,寫 Prompt 用咗 30% 嘅時間,數據清洗同 chunking 策略用咗 10% 嘅時間。

結果呢?數據嗰 10% 帶嚟嘅提升,係前面 50% 嘅三倍。

所以而家我嘅優先級係:

數據清洗質量 > Chunking 策略 > 檢索策略 > Prompt > 模型

唔係話模型唔重要,而係話喺大部份真實場景入面,底層數據嘅質量決定咗天花板,而唔係模型。

個個都喺度卷最頂層,底層冇人認真做。

呢啲係我花咗唔少時間同失敗先學到嘅嘢。


我係專注 AI Agent 深度實踐嘅努力撞蘑菇AI,致力分享真實可用嘅 AI 使用經驗同工作流探索,歡迎你同我一齊將 AI 玩到明,如果內容對你有幫助,歡迎關注、點讚、轉發。


大多數人搭 RAG 系統的起點是這樣的:

找個教程,接上 LLM,把文件扔進去,跑通 demo,感覺很絲滑。

然後用在真實業務上——準確率 40%。

我也是這麼過來的。

折騰了一段時間之後,我發現了一件反直覺的事:

RAG 系統的上限,不是模型決定的,是數據準備決定的。

所有人都在卷模型、卷 Prompt,但真正把項目做爛的,是最上游那一步——你餵給 AI 的"知識"本身,就是一坨亂的。


第一個坑:PDF 解析,你以為解決了,其實沒有

我最開始用的是最常見的方案:直接用 PyPDF 把 PDF 讀成文本,然後切塊,存向量庫。

跑通了,demo 很好看。

直到有人拿一份雙欄排版的報告來測——AI 給出的回答裏,數據對不上,上下文混亂,像是在胡說。

我去看原始解析結果,才發現問題:

雙欄 PDF 被讀成了"左欄第一行 + 右欄第一行 + 左欄第二行 + 右欄第二行……"

兩欄內容完全交叉混排。對人眼來說一眼看出是廢的,但 AI 拿到的就是這串文字,它不知道。

後來換了 Docling(IBM 出的開源工具),專門處理複雜佈局,雙欄問題解決了。

但教訓是:PDF 解析不是"能跑通"就算完,要真的去看解析後的原始文本是什麼樣的。

大多數人跳過了這一步。


第二個坑:按字數切塊,是在給 AI 喂碎片

Chunking——把文檔切成小塊存進向量庫——這一步大家都知道要做。

但怎麼切,很多人沒認真想過。

最常見的做法是按字數切:每 500 個字一塊,相鄰塊重疊 50 個字。

簡單,夠用,但有一個致命問題:它完全不管你的內容在哪裏斷。

我遇到過這樣的情況:一個完整的結論——"A 方案在高併發場景下優於 B 方案,原因是……"——被切成了兩塊。

前一塊有結論,沒原因。後一塊有原因,沒結論。

兩塊單獨召回,都沒意義。合起來沒人會把它們拼回去。

正確的做法是按文檔結構切——按標題、段落切,而不是按字數切。

文檔作者寫標題的時候,本來就是在做語義分割。你按結構切,是在利用人類已經標註好的語義邊界。

另外,每個 chunk 開頭加一串麪包屑:[文檔名 > 一級標題 > 二級標題]——召回的時候上下文不會丟。


第三個坑:純向量檢索,專有名詞是它的死穴

向量檢索的原理是語義相似——你問"如何提升性能",它能找到說"優化速度"的段落,因為語義相近。

聽起來很強,實際上有一個大坑:

精確的專有名詞、產品型號、數字,向量檢索會"語義漂移"。

你問"GPT-4o 的 context window 是多少",向量檢索可能給你一堆"大模型上下文長度"的泛泛描述,就是找不到那個精確數字。

因為 embedding 模型把"GPT-4o"和"大模型"壓到了相近的向量空間,精確匹配反而丟了。

解法是混合檢索:BM25(關鍵詞匹配)+ 向量檢索,兩路並行,結果融合。

BM25 負責精確,向量負責語義,互補。

實測召回率能提升 30% 左右。

但幾乎沒有人在真實產品裏做了這一步——因為多數教程只教向量檢索,BM25 的部分被省掉了。


第四個坑:表格,是非結構化數據裏最難的東西

這個很多人沒意識到。

文本的非結構化,還算好處理——分段、切塊、存向量,基本流程能跑。

表格是真正的噩夢。

一張有行列關係的表,經過大多數 PDF 解析器處理之後,變成這樣:

產品A 價格100 庫存500 產品B 價格200 庫存300

行列關係完全消失。LLM 拿到這串文字,根本不知道"100"對應的是"產品A"還是"價格"。

我見過有人用這種方式做財務知識庫,AI 給出的數字對不上,最後手動核對花了比直接查表更多的時間。

正確做法:表格要單獨處理,轉成 Markdown 表格或 JSON 格式,不能混進普通文本 chunk 裏。


最後說一件讓我真正改變思路的事

做了一段時間之後,我覆盤了一下時間分配:

調模型參數花了 20% 的時間,寫 Prompt 花了 30% 的時間,數據清洗和 chunking 策略花了 10% 的時間。

結果呢?數據那 10% 帶來的提升,是前面 50% 的三倍。

所以現在我的優先級是:

數據清洗質量 > Chunking 策略 > 檢索策略 > Prompt > 模型

不是說模型不重要,是說在大多數真實場景裏,底層數據的質量決定了天花板,而不是模型。

大家都在卷最頂層,底層沒人認真做。

這是我花了不少時間和失敗才學到的東西。


我是專注 AI Agent深度實踐的努力撞蘑菇AI,致力於分享真實可用的 AI 使用經驗與工作流探索,歡迎你和我一起把 AI 玩明白,如果內容對你有幫助,歡迎關注、點贊、轉發。