前幾天我們專注在「怎麼切」,今天要談的是容易被忽略、卻對檢索精準度影響很大的一環:Metadata(詮釋資料)設計。
除了 chunk 本身的文字內容,我們通常還會附加一些額外資訊,例如:
chunk = {
"content": "RAG 系統的三大環節是 Indexing、Retrieval、Generation...",
"metadata": {
"source": "day02_article.md",
"title": "RAG 系統架構總覽",
"section": "三大環節",
"created_date": "2026-08-25",
"doc_type": "技術文章",
}
}
單純的向量相似度搜尋,有時候會找到「語意相近但條件不符」的內容。例如使用者問「2025 年的公司規定」,若知識庫裡有新舊多個版本的規定文件,光靠語意相似度可能分不清版本新舊。這時候可以先用 Metadata 過濾(例如 created_date >= 2025),再做向量搜尋,大幅提升精準度。
SELECT content FROM chunks
WHERE metadata->>'doc_type' = '公司規定'
AND (metadata->>'created_date')::date >= '2025-01-01'
ORDER BY embedding <=> query_embedding
LIMIT 5;
(此為 Postgres + pgvector 的查詢語法示意)
回答使用者問題時,附上「這個答案來自哪份文件」,讓使用者可以自行查證,也提升系統的可信度。
可以把 Metadata 作為 Rerank 階段的額外訊號,例如「越新的文件權重越高」、「官方文件權重高於使用者討論區內容」。
Metadata 看似是附屬資訊,實際上是彌補「純語意搜尋」不足的重要工具——透過過濾、排序、來源標註,能大幅提升系統的實用性與可信度。明天我們要把前面幾天的內容整合起來,建立一個完整的前處理 Pipeline。