3.5 資料塊的元資料(metadata)關聯
每一塊除了內容,還要記得它從哪來、屬於什麼,後面的過濾、引用、權限都靠它。
只有一段文字和它的向量還不夠。每一塊還需要附上一些描述它的資訊,叫做 metadata(元資料),也就是「關於資料的資料」。
metadata 有什麼用
1. 標出來源
模型回答時,可以說明「根據《員工手冊》第 12 頁」。這需要每一塊都記得自己的來源。第 4 章的來源歸屬就是靠它。
2. 過濾搜尋範圍
使用者可以限定「只看 2025 年以後的文件」「只找人資部的資料」。有了 metadata,檢索時可以先縮小範圍,再做相似度搜尋,結果更準也更快。
3. 權限控制
在每一塊標上「誰可以看」,檢索時只搜尋該使用者有權限的資料,沒有權限的內容完全不會被找出來。
4. 管理資料
知道每一塊來自哪份文件,當文件更新或刪除時,才能找到並更新對應的所有塊(3.6 會用到)。
5. 補充上下文
標題路徑這類 metadata,也可以放進塊的內容裡,讓檢索更準。
常見的 metadata
| 欄位 | 範例 | 用途 |
|---|---|---|
source |
employee-handbook.pdf |
標出處、管理更新 |
page |
12 |
標出處,方便使用者回去對照 |
headings |
員工手冊 > 特別休假 |
標出章節,也能幫助檢索 |
date |
2026-01-15 |
過濾新舊、判斷資料是否過期 |
author / department |
人資部 |
過濾、權限 |
type |
規章 / FAQ / 公告 |
過濾文件類型 |
chunk_index |
3 |
知道它是第幾塊,可以找前後塊 |
access |
all / hr-only |
權限控制 |
一塊資料的完整樣子,大概是:
{
"id": "handbook-0",
"text": "員工在同一公司服務滿六個月未滿一年者,每年有三天特別休假……",
"metadata": {
"source": "員工手冊.md",
"headings": "員工手冊 > 特別休假",
"date": "2026-01-15",
"access": "all",
},
}
把標題放進內容
還有一個很實用的技巧:把標題路徑直接加在塊的文字開頭再去做嵌入。
員工手冊 > 特別休假
員工在同一公司服務滿六個月未滿一年者,每年有三天特別休假……
原因是:塊的內文常常只講「滿六個月有三天」,沒提到「這是什麼的規定」。加上標題之後,向量就更能代表這一塊的主題,使用者問「特休假幾天」時比較容易找到。
設計 metadata 的原則
- 一開始就想好:之後要補 metadata,得把整個知識庫重新處理一遍。想想未來會需要依什麼過濾、要標什麼出處。
- 欄位名稱和格式統一:日期都用同一種格式,部門名稱不要一下用中文一下用英文,否則過濾會漏資料。
- 只放需要的:metadata 也要存、也要搜尋,欄位太多反而增加成本。
- 不要放敏感資料:metadata 常常會被顯示或記錄在日誌裡。
- 權限要在載入時就標好:不要寄望之後再補,漏了就是資料外洩的風險。
注意 不同的向量資料庫對 metadata 的型態和過濾功能支援不一樣,例如有的只支援簡單的相等比對。選擇資料庫時(2.6)要一併確認。