Chunk Metadata

Chunk Metadata 是附加在每个文档块上的元数据,包括来源、页码、章节标题、创建时间等。它用于过滤、排序和引用。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Chunk Metadata

一句话定义

Chunk Metadata 是附加在每个文档块上的元数据。检索时不只看文本相似度,还可以按来源、时间、类型过滤。引用时需要知道内容来自哪个文档的哪一页。

核心原理

元数据字段

chunk_metadata = {
    "source": "docs/product-manual.pdf",   # 来源文件
    "page": 42,                             # 页码
    "chapter": "第三章 退款政策",            # 章节
    "doc_type": "policy",                   # 文档类型
    "created_at": "2024-01-15",             # 创建时间
    "author": "客服团队",                    # 作者
    "language": "zh",                       # 语言
}

带过滤的检索

async def search_with_filter(query_embedding, filters: dict, top_k: int = 10):
    """带元数据过滤的向量搜索"""
    # 构建过滤条件
    where_clause = " AND ".join([f"metadata->>'{k}' = ?" for k in filters])
    where_values = list(filters.values())

    results = await db.query(f"""
        SELECT *, embedding <=> ? AS distance
        FROM documents
        WHERE {where_clause}
        ORDER BY distance
        LIMIT ?
    """, [query_embedding] + where_values + [top_k])

    return results

常见坑

  1. 不保留元数据: 丢失来源信息,无法引用
  2. 元数据不标准: 有的用 source,有的用 file_path
  3. 不过滤: 检索了所有文档,包括不相关的类型

参考资料

创建于 2026/6/30 更新于 2026/7/15