首页/AI/RAG 与向量库速查/RAG 元数据字段设计

RAG 元数据字段设计

每个切片除文本与向量外,应携带来源、定位、版本、权限、时间等元数据,用于过滤、引用标注、增量更新与排错。

RAG 与向量库速查AI更新于 2026-10-13

元数据设计要解决什么

每个切片除文本与向量外还要携带元数据。它承担四件事:更新与删除时能精确定位到旧切片,回答时能标注来源与页码,检索时能按租户与密级过滤,出问题时能追溯到具体文档版本。元数据字段设计得早,后期换解析器、换切片策略都不至于推倒重来。

字段

字段用途
doc_id / chunk_id更新与删除的定位主键,引用定位
source_path / url标注来源,点击回原文
title_path / page引用到章节与页码
doc_version / updated_at增量更新与陈旧内容排查
acl_tags / tenant_id检索时权限过滤
lang / doc_type按语言与类型过滤或加权

切片元数据示例

切片元数据示例
meta = {
    "doc_id": "hr-policy-2026",
    "chunk_id": "hr-policy-2026#p3-c2",
    "source_path": "policies/hr-policy.pdf",
    "title_path": "报销制度 > 差旅费",
    "page": 3,
    "doc_version": "2026-09-01",
    "tenant_id": "t-001",
}

典型使用场景

  • 增量更新:文档改版后按 doc_id 删除旧切片再写入新切片
  • 引用标注:答案里的编号回链到文件、章节与页码
  • 权限隔离:检索条件里带上租户与密级,避免召回无权内容
  • 陈旧排查:按 updated_at 找出长期未更新的文档,提醒业务方核对
  • 效果分析:按文档类型统计命中分布,判断哪类资料最常被问到

设计原则

  • 定位字段先行:doc_id 与 chunk_id 是更新与引用的基础,缺了后期很难补
  • 权限字段入库时就写入,不要等检索时再查外部权限表
  • 保持取值可枚举:文档类型、密级用固定枚举,便于过滤与统计
  • 版本信息带上时间:只写版本号无法判断新旧,配合生效日期更实用
  • 控制字段数量:字段越多写入越慢,只保留确实会被过滤或展示的项

字段与使用方式

字段类型典型字段使用方式
标识类doc_id、chunk_id主键式查找与删除,需建唯一索引
过滤类tenant_id、acl_tags、doc_type参与检索过滤,需建标量索引
展示类source_path、title_path、page只在回答中展示,可不建索引
时间类doc_version、updated_at范围过滤与排序,适合建索引
元数据字段在向量库里要建标量索引(如 Qdrant 的 payload index、pgvector 的普通 B-tree 索引),否则带过滤条件的检索会明显变慢。

易错点

  • 只用自增 id 入库,更新文档时无法定位并删除旧切片
  • 权限判断只放在应用层而不带进检索条件:先召回无权内容再被过滤,浪费配额且存在越权风险
  • 元数据字段没有建标量索引,带过滤的检索在数据量上来后延迟恶化
  • 切片不带页码与章节,回答只能给出文件名,人工核对成本高

数据来源与参考

  • Qdrant 官方文档(Payload 与过滤)
  • Milvus 官方文档(标量字段与分区键)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌