前言
RAG 的品質不僅取決於模型,更取決於資料的 ingestion、chunking 和 indexing 方式。本課程從基礎到實作,建構完整的管線。
1. 來源文件類型
內部知識庫的常見來源:
- Markdown 技術文件
- PDF 作業程序
- Wiki/Confluence 匯出
- Slack 討論串匯出
每種來源需要各自的解析器與清理步驟。
2. 文本正規化
Chunking 前的清理:
- 移除頁首/頁尾/頁碼
- Unicode 正規化(NFC)
- 表格扁平化或跳過
- 保留程式碼區塊
越南語文本需確保聲調符號的正確處理。
3. Chunking 策略
建議參數:
- Chunk 大小:600-1000 tokens
- 重疊:50-100 tokens
- 優先依段落標題分割
- 不分割程式碼區塊
基於標題的分割比隨機字元數分割的檢索品質更好。
4. 中繼資料儲存
每個 chunk 應附加:
doc_idsection_titlechunk_indexsource_pathlast_updatedlanguage
豐富的中繼資料讓後續的過濾與除錯更容易。
5. Embedding 管線
本地推薦模型:
nomic-embed-text(透過 Ollama)bge-m3(多語言支援)
批次生成 embedding 後 upsert 到向量資料庫。
import chromadb
client = chromadb.PersistentClient(path="./vectordb")
collection = client.get_or_create_collection("internal-docs")
collection.upsert(
ids=[chunk["id"] for chunk in chunks],
documents=[chunk["text"] for chunk in chunks],
metadatas=[chunk["metadata"] for chunk in chunks],
)
6. 索引生命週期管理
- 在 staging 索引驗證後再提升至生產環境
- 定期重新索引過時文件
- 版本控制以支援回滾
Demo 程式碼
Ingestion 管線執行結果 — 處理 127 個 chunk:

ChromaDB collection 狀態確認:

原始碼:04-rag-ingestion