#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 系統的地基。通用方案對特定領域效果不好,針對文件格式深度定制才是正解。
返回 專案首頁