首页 / 文章

《实用笔记》:RAG中向量搜索的局限性——余弦相似度及其相关内容

《实用笔记》操作指南:RAG中向量搜索的局限性——余弦相似度,以及为采用该模式的团队提供的契约、检查项和可直接使用的代码模板。

发布者:REACTAPP.TOP阅读约 12 分钟2803 词

来源: The Limits of Vector Search in RAG — Cosine Similarity and the Lexical Gap

可将此内容视为《RAG中向量搜索的局限——余弦相似度与词汇差距》一文面向操作人员的重构版本:清晰的阶段划分、有序的代码模块,以及便于交接时参考的恢复说明。

余弦相似度衡量的是角度而非文档身份。为何向量搜索会丢失错误代码、否定词和数字——以及在你自己的RAG系统中应衡量什么。

将余弦相似度视为可测量的表面时,以角度为衡量标准的方案效果最佳。在扩大范围之前,先记录一份理想的处理过程、一个失败案例以及对应的回滚说明。 优先选择小型且可测试的单元,而非庞大的脚本。当某一步骤出错时,错误应指向单一责任主体,而非复杂的流程链。 将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应迫使另一项也重新编写。

向量衡量的是方向,而非身份

将“向量衡量方向”这一阶段视为可测量的表面来处理效果最佳。在扩大范围之前,先收集一份优秀的案例、一个失败案例以及回滚说明。 把这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默地只完成部分工作。 将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应迫使重新编写另一项。

同一差距的两个方向

将“舞台”的两个方向视为可测量的表面来处理时,效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解成本情况,就能避免在系统从演示环境过渡到共享环境时出现意外费用。应将分块策略与检索策略分开,当质量指标发生变化时,修改其中一个不应迫使重新编写另一个。

单一向量,难以记忆

“向量过多”阶段若被视为可测量的表面,效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 将配置置于应用程序代码之外。环境文件、密钥存储和功能标志应集中存放于一处,以便操作人员无需查看整个架构即可进行审计。 将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应迫使重新编写另一项。

压缩的极限

将“阶段硬上限”视为可测量的界面时,其效果最佳。在扩大范围之前,需记录一份理想案例、一个失败案例以及回滚说明。 同时记录正常流程与恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续的优化工作。 应将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应强制要求重新编写另一项。 将“阶段硬上限”视为可测量的界面时,其效果最佳。在扩大范围之前,需记录一份理想案例、一个失败案例以及回滚说明。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许默默地完成部分任务。

一个与身份无关的视角

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

中心性与余弦度量的局限性

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

向量出错的四种方式

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

否定情况

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

精确标识符

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

数字

在处理“数值阶段”时,首先需写下相关契约:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及错误处理都属于产品功能的一部分,而非后续的优化工作。 在调整提示词之前,需先用固定的问题集来衡量检索效果。仅仅更换提示词很难解决检索能力薄弱的问题。 在处理“数值阶段”时,首先需写下相关契约:所需输入、成功信号以及部分失败时的处理方式。这份清单能确保后续的代码修改保持一致性。 将这一阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声的半完成状态。

组合查询

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

没有更优模型能解决此问题的证明

有证据表明,将任何阶段视为可测量的表面来处理都是不可行的。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 应将配置与应用程序代码分开。环境文件、密钥存储和功能标志应集中存放,这样操作人员无需查看整个系统结构即可进行审计。 为每轮对话和每次会话设定预算额度。智能工具往往会过度扩展上下文;设置上限可以避免演示过程变成意外的账单。

实证依据与持续存在的争议

“实证环境”与某个阶段若被视为可测量的对象,效果会最佳。在扩大范围之前,需记录一个理想案例、一个失败案例以及回滚说明。 同时记录正常流程与恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的一部分,而非后续需要补充的内容。 应将分块策略与检索策略分开。当质量指标发生变化时,修改其中一项不应迫使重新编写另一项。 “实证环境”与某个阶段若被视为可测量的对象,效果会最佳。在扩大范围之前,需记录一个理想案例、一个失败案例以及回滚说明。 应将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,绝不允许出现无声的、不完整的处理结果。

部署混合搜索前需检查的内容

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

这对架构师意味着什么

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

总结

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

操作检查清单

在处理操作检查清单阶段时,首先写下相关契约:所需的输入参数、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。

优先选择小型、可测试的单元,而非冗长的脚本。当某个步骤失败时,故障应指向单一责任模块,而非复杂的流程链。

在调整提示词之前,先使用固定的问题集来测试召回率。频繁更换提示词很难改善较差的检索效果。

锁定依赖项的版本,并记录用于演示的图像摘要。可重复性比经验知识更为重要。

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

在调整提示词之前,先使用固定的问题集来测试召回率。频繁更换提示词很难改善较差的检索效果。

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

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

在处理强化安全性的第0阶段时,首先需明确相关规范:所需输入参数、成功标识,以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。同时要一并记录正常流程与故障恢复路径,重试机制、人工审核环节以及错误处理方式都是产品不可或缺的部分,而非后续才需要补充的内容。

强化细节 0/778:测量该记录的耗时、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

强化笔记的第1阶段若被视为可测量的对象,则效果最佳。在扩大范围之前,需记录一份理想案例、一个故障实例以及回滚说明。将此阶段视为输入与经过验证的输出之间的契约,为相关文档命名、定义成功标准,并拒绝默许的半完成状态。

强化细节 1/778:测量该记录的耗时、错误类型以及代币消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

在强化措施的第2阶段,应在修改代码之前明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 配置信息应置于应用程序代码之外。环境文件、密钥存储以及功能标志应集中存放于一个位置,这样操作人员无需查看整个系统结构即可进行审计。

强化措施细节2/778:需统计该措施的墙钟时间、错误类型以及令牌消耗情况,然后依据固定的评估标准而非主观判断来决定是否保留该变更。

在处理强化措施的第3阶段时,首先写下相关约定:所需的输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合既定标准。 相比冗长的脚本,更应采用小型且可测试的单元。当某个步骤失败时,故障应能指向单一责任点,而非复杂的流程链。

强化措施细节3/778:需测量该步骤的运行时间、错误类型以及代币消耗情况,然后依据固定的评估标准而非主观判断来决定是否保留该修改。

将强化措施的第4阶段视为可度量的对象来处理效果最佳。在扩大范围之前,先记录一份理想的操作流程、一个失败案例以及回滚说明。 在功能结果旁同时记录时间消耗及代币或查询成本。提前明确成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。

强化措施细节 4/778:测量该笔记的处理时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来决定是否保留该变更。