#01 智能分片引擎

Tech Python, PyPDF2, regex AI Claude Code

源起

公司要建內部招標文件知識庫。市面上的向量資料庫分片工具對中文招標文件效果很差——固定大小分片會把目錄拆散、語義分片會讓標題和內容分離、階層關係全部丟失。決定自己寫一套分片引擎。

設計

中文招標文件(服務建議書)的結構很特殊:有封面、評選表、目次等需要完整保留的區域,正文用「壹貳參」→「一二三」→「(一)(二)」→「1.2.3.」的四層標題。

ProposalChunker 的策略是:先用正則識別特殊區域完整保留,再用四組正則抓標題層級,維護一個 section path(例如「參、專案需求規劃 > 二. 數位雙生系統 > 1. 使用者介面層」),按章節邊界切分。超過 3000 字的章節再以段落為單位二次分割。

每個 chunk 帶完整 metadata:章節路徑、標題、層級、頁碼、起始字元位置。

實現

Windows 編碼是第一個坑。 CP950 編不了特殊 Unicode 字元,開頭就要強制 sys.stdout 走 UTF-8。

返回類型不一致。 _split_large_section() 有時回 list 有時回單個 Chunk,後面 extend/append 就炸了。用 isinstance() 統一處理。

輸出設計成 chunks.json + 每個 chunk 獨立 txt + 統計報告,方便後續向量化也方便人工檢查。

尾聲

項目結果
測試文件130 頁招標文件,65,000 字
分片數360(含 5 個特殊區域)
處理時間~4 秒
標題層級4 層中文標題

分片引擎是整個 RAG 系統的地基。通用方案對特定領域效果不好,針對文件格式深度定制才是正解。


返回 專案首頁