Appearance
3.3.1 什么是元数据(Metadata)?
先给结论:metadata 就是“描述数据的数据”。在 RAG 里,它不是附属装饰,而是系统理解一个 chunk 身份和边界的重要信息。
如果只看正文,系统通常只能知道“这一段说了什么”;加上 metadata,它才开始知道“这一段是谁、从哪来、什么时候有效、该怎么用”。
先把概念说得直接一点
假设有一段文本:
商品签收后 7 天内支持无理由退货。
如果只有这句话,系统只能看到一条规则。
但如果再补上下面这些信息:
- 它来自哪份文档
- 这是哪个版本
- 更新时间是什么
- 属于哪个租户
- 谁可以看
那系统对这段内容的理解就完全不一样了。
这些额外信息,就是 metadata。
一个最小示意
python
chunk = {
"text": "商品签收后 7 天内支持无理由退货。",
"metadata": {
"doc_id": "refund-policy-v3",
"title": "退款规则",
"source": "/help/refund",
"version": "v3",
"updated_at": "2026-04-01",
"tenant_id": "tenant-a"
}
}这里真正重要的不是字段多少,而是系统看到的对象已经不只是“一段话”,而是“一段带身份、来源和边界的信息”。
Metadata 在 RAG 里到底描述什么
在 RAG 里,metadata 通常会描述下面这几类信息:
1. 来源信息
比如:
- 来自哪份文档
- 来自哪个 URL
- 来自哪个系统
- 来自文档的哪个章节或页码
2. 结构信息
比如:
- 标题
- 小节
- 段落位置
- chunk 序号
3. 治理信息
比如:
- 版本
- 状态
- 更新时间
- 生效时间
4. 访问边界信息
比如:
- 租户
- 角色
- 部门
- 权限范围
也就是说,metadata 真正描述的,是一个 chunk 在系统里的“身份”和“使用条件”。
为什么不能把 metadata 理解成“随便带几个字段”
因为在真实 RAG 系统里,metadata 经常直接影响:
- 检索前过滤
- 检索后排序
- 引用展示
- 文档聚合
- 版本优先级
- 权限控制
- 更新与失效管理
所以 metadata 不是“锦上添花”,而是后面很多能力能不能成立的前提。
一个更准确的理解方式
如果把 chunk 看成一个知识对象,那么:
text负责表达内容本身metadata负责表达这个内容在系统里的身份、边界和上下文
没有 text,系统不知道它说了什么。
没有 metadata,系统又不知道它到底是什么、该怎么用、该不该用。
一个常见误区
很多人第一次做 RAG,会把 metadata 理解成“方便以后看看”的附加信息,比如:
- 标题
- URL
- 更新时间
这当然也对,但还不够。
因为真正成熟的 metadata 设计,不只是为了“看起来信息更完整”,而是为了后面的检索和治理链路能真正用起来。
换句话说,metadata 的价值不在于“存下来”,而在于“后面会不会被系统真的使用”。
一句话总结
Metadata 在 RAG 里,就是描述 chunk 身份、来源、边界和使用条件的信息。它不是普通附加字段,而是让一段文本真正变成“可检索、可过滤、可治理知识对象”的基础。