首页 / 文章 / 实用提示:超越相似度搜索——RAG中的元数据过滤方法

实用提示:超越相似度搜索——RAG中的元数据过滤方法

《实用笔记》操作指南:超越相似度搜索——面向 RAG 的元数据过滤方法,附有适用于采用该模式的团队的合同、检查清单以及可直接插入的代码模板。

1411 词

以下笔记梳理了围绕“超越相似度搜索:基于 Amazon S3 Vectors 的 RAG 元数据过滤”这一主题的实用实现路径。重点在于契约、校验项以及可直接插入代码的占位符,而非动机性阐述。 在完成概览阶段时,首先明确契约内容:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续代码修改的规范性。 将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,定义成功校验标准,并杜绝默许的部分完成情况。

过滤器从何而来?

“过滤器位于何处”这一阶段在被视为可度量的对象时效果最佳。在扩大范围之前,先记录一份优秀的处理结果、一个失败案例以及回滚说明。在功能结果旁同时记录处理时间以及令牌或查询成本。提前了解成本情况,可避免在系统从演示环境过渡到共享环境时出现意外费用。应将分块策略与检索策略分开处理,当质量指标发生变化时,修改其中一项不应强制要求重新编写另一项。

User Question +Known Application Context
      ↓
category = returns
      ↓
Vector Search
User Question
      ↓
Query Embedding
      ↓
Vector Search
      ↓
Relevant Results
User Question
      ↓
Query Understanding
      ↓
returns
      ↓
Vector Search
      ↓
category = returns

为向量添加元数据

将“向阶段添加元数据”视为可度量的操作面时,效果最佳。在扩大范围之前,先记录一份优秀的处理结果、一个失败案例以及回滚说明。 配置应与应用程序代码分开。环境文件、密钥存储和功能开关应集中存放于一处,以便操作人员无需查看整个系统结构即可进行审计。 将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应强制要求重新编写另一项。

{
  "document_name": "Return Policy",
  "category": "returns",
  "region": "us",
  "status": "active",
  "chunk_text": "Damaged products can be returned within the allowed return period."
}

搜索过滤

将“搜索过滤”阶段视为可度量的对象时,其效果最佳。在扩大范围之前,需记录一个理想案例、一个失败案例以及回滚说明。 同时记录正常流程与恢复流程。重试机制、人工审核环节以及错误处理都属于产品功能的一部分,而非后续需要补充的内容。 应将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应强制要求重新编写另一项。 将“搜索过滤”阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,杜绝默默完成部分任务的情况。

const result = await s3Vectors.send(
  new QueryVectorsCommand({
    vectorBucketName: "rag-demo-vectors",
    indexName: "store-knowledge",
    queryVector: {
      float32: queryEmbedding,
    },
    topK: 5,
    returnMetadata: true,
    returnDistance: true,
  })
);
const result = await s3Vectors.send(
  new QueryVectorsCommand({
    vectorBucketName: "rag-demo-vectors",
    indexName: "store-knowledge",
    queryVector: {
      float32: queryEmbedding,
    },
    topK: 5,
    filter: {
      category: "returns",
    },
    returnMetadata: true,
    returnDistance: true,
  })
);
(Meaning of the Question + category = returns)
        ↓
Amazon S3 Vectors
        ↓
Relevant Return Information

可过滤与不可过滤的元数据

在“可过滤元数据”和“不可过滤元数据”阶段,修改代码之前需明确输入内容、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。应在功能结果旁记录处理时间以及令牌或查询成本。提前显示成本信息,可避免在从演示环境切换到共享环境时出现意外费用。需注明实际作为答案依据的段落;没有引用的话,操作人员就无法区分是幻觉内容还是索引缺失导致的错误。

{
  "category": "returns",
  "region": "us",
  "status": "active"
}
{
  "chunk_text": "Damaged products can be returned within the allowed return period."
}
metadataConfiguration: {
  nonFilterableMetadataKeys: ["chunk_text"],
}

使用多个条件

在“使用多个阶段”模式下,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 配置信息应置于应用程序代码之外。环境文件、密钥存储以及功能标志应集中存放于一个位置,以便操作人员无需查看整个流程即可进行审核。 需引用实际作为答案依据的段落。如果没有引用,操作人员就无法区分是幻觉内容还是索引缺失导致的错误。

filter: {
  $and: [
    {
      category: {
        $eq: "returns",
      },
    },
    {
      region: {
        $eq: "us",
      },
    },
    {
      status: {
        $eq: "active",
      },
    },
  ],
}
filter: {
  category: {
    $in: ["returns", "warranty"],
  },
}

尽早考虑元数据问题

在“提前考虑元数据”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程和异常恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的内容。 必须引用那些真正作为答案依据的段落。如果没有引用,操作人员就无法区分是幻觉内容还是索引缺失导致的错误。 在“提前考虑元数据”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功判定标准,并杜绝默默完成部分任务的情况。

{
  "document_name": "Return Policy",
  "category": "returns",
  "region": "us",
  "status": "active",
  "chunk_text": "..."
}

相似度与元数据协同工作

在处理“相似度与元数据协同工作”阶段时,首先明确相关规范:所需的输入参数、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免从演示环境过渡到共享环境时出现意外费用。 在调整提示词之前,先使用固定的问题集测试召回率。仅仅更换提示词往往无法改善较差的检索效果。

User Question
      ↓
(Semantic Similarity + Reliable Metadata Context)
      ↓
Amazon S3 Vectors
      ↓
More Focused Results

结论

在进入结论阶段时,首先写下相关约定:所需的输入参数、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 将配置信息与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中管理,以便操作人员无需查看整个系统结构即可进行审计。 在调整提示词之前,先使用固定的问题集来测试召回率。仅仅更换提示词往往无法解决检索效果不佳的问题。

操作清单

在制定操作清单阶段,需在修改代码之前明确输入参数、各步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行相应步骤,而无需猜测系统中的隐藏状态。

应优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤出错时,故障应指向单一责任点,而非复杂的处理流程。

请引用实际作为答案依据的段落。没有引用的话,操作人员就无法区分是幻觉内容还是索引缺失的问题。

编写一份简短的操作手册:说明如何轮换密钥、如何清空队列、以及如何回滚上一次的导入操作。

将此阶段视为输入与已验证输出之间的契约。为相关成果命名,明确成功标准,拒绝默许部分完成的状态。

请引用实际作为答案依据的段落。没有引用的话,操作人员就无法区分是幻觉内容还是索引缺失的问题。

在推广该技术栈之前,应先冻结版本,为关键流程记录标准输出日志,并明确回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其展示花哨的一次性演示,不如注重扎实的可靠性。

关于5ab755d9f682的批处理说明:请将提供商密钥移出代码仓库,设定单会话令牌上限,并将日志存储在评估用示例文件旁,以便后续模型更换时保持数据可比性。