搜索/公平地测试和比较为 AI 智能体提供记忆的检索系统

公平地测试和比较为 AI 智能体提供记忆的检索系统

在判断哪种检索或记忆系统最适合 AI 智能体时使用。测试前先写下要证明什么,再按整套设置公平比较,估算从少量到大量使用的费用,防止保存的结果混在一起,并完整保存每次运行的记录。

要使用这个AI规则
## 只下测试结果真正能支持的结论 区分整个系统的主张与单项功能的主张。若要声称某个检索系统整体最佳,必须提供涵盖检索质量、长上下文记忆、校准、可靠性、成本和运行行为的证据。任何单一功能或基准都无法证明这一点。 评估功能时,应判断该功能是否为系统用户带来有意义的价值。如果产品决策取决于用户结果,不要把评估工作耗费在证明某个专有算法优于另一个算法上。 运行实验前,写明主张、分析单位、预期效果、决策阈值以及结果无法推广的条件。如果结论的范围超出了已测试的总体、工作负载、引擎或配置,应拒绝该结论。 ## 把选数据库和选库里的来源分开决定 用两个相互独立的轴来构建知识路由模型: - 拥有存储和访问策略的语料库或数据库; - 该语料库内部的来源或集合。 通过明确的优先级链解析两个轴,例如按调用输入、已认证许可、会话上下文、仓库标记、用户配置、默认值的顺序处理。把解析后的值与每次查询一起记录,以便诊断无提示的错误路由。 除非已明确建立信任,否则应将远程调用方或面向智能体的调用方视为不受信任。通过一个共享辅助函数,把来源范围应用到每条读取路径;不要在单个查询中手工构建过滤器。在联接或构建键之前验证标识符,并根据包含完整来源范围的键定义唯一性。 ## 按整套设置比较各个检索模式 把命名模式定义为缓存策略、词元预算、查询扩展、关系检索、意图权重和结果数量上限组成的一致组合。通过一个确定性的优先级链解析配置,让按调用覆盖优先于部署配置,并提供有文档说明的回退值。 把模式作为面向用户的完整选择进行比较,不要只挑选某个表现有利的调节项。报告每个调节项的有效值及其来源。在最底层的共享搜索路径中执行模式解析,使生产查询和评估回放经历相同的行为。 如果新的检索分支只适用于已识别的查询类型,应确保其行为是确定性的,并在其他查询中不执行任何操作。提供按查询覆盖,以便在不改变整个系统默认值的情况下进行受控实验。 ## 按实际使用量估算费用 根据查询量、提供的上下文词元数、模型输入价格、扩展调用次数和缓存命中率计算下游成本。至少展示轻度、典型和重度使用水平,让读者无需根据单次查询自行外推即可缩放结果。 区分隔离的单次查询成本与真实智能体循环的总支出。提示缓存、检索缓存命中、前缀变化和重复工具调用都可能显著改变实际总额。说明节省金额是实测值、假设值还是排除项。 将检索模式与下游模型作为一对进行评估。过大的上下文可能使低容量模型不堪重负,而过于严格的预算可能让昂贵模型缺少信息。优先选择自然的搭配,并把不匹配作为不同的失败模式单独说明,不要只按成本排名。 ## 测试前先定好测什么、怎么判定 对于每项报告指标,在机器可读结果旁提供通俗定义。对指定截断位置的精确率、折损增益、倒数排名、重叠度、校准、延迟和成本等术语,使用同一个规范术语表。 收集结果前,明确数据集、样本选择、预期方向、主要指标、有效性威胁和排除规则。对于配对比较,使用配对重采样方法;测试多个指标或变体时,应校正多重比较。 同时保存人类可读的摘要和结构化元数据。不要在单个数值旁添加临时设计的术语表字段;每个响应附加一个一致的元数据块,让下游工具能够可靠解析。 ## 让问题分流的测试谁都能重做 将训练夹具与留出夹具分开。如果格式差异可能掩盖语义正确的路由,应同时采用严格标准和有明确文档说明的宽松标准进行评分,但不得在看到留出结果后更改标准。 对于每次跨模型运行,保存一份记录,将模型标识符、提示模板哈希、夹具哈希、测试框架修订版本、时间戳和评分版本绑定在一起。保留原始预测,使评分逻辑能够在无需付费重新运行模型的情况下得到改进或审计。 使用消融实验找出承担关键作用的信号。每次去掉一个路由子句、层级或上下文字段,然后在同一个留出集上进行比较。性能下降可以支持因果设计主张;未配对的变更前后轶事不能提供这种证据。 ## 防止保存的检索结果(缓存)在不同设置间混用 把每个会改变行为的输入都纳入缓存键:来源范围、模式调节项、结果数量上限、扩展状态、检索分支及深度、嵌入提供方、嵌入列或模型,以及所有会改变排名的功能标志。 对缓存键契约进行版本管理。语义发生变化时,应提升版本,让旧记录通过正常缓存未命中而无法访问,而不是按照新配置解释旧记录。 测试不同模式、来源、提供方之间的隔离,以及关系检索开启与关闭之间的隔离。对每个受支持的存储引擎运行一致性测试,因为嵌入式引擎可能掩盖只会在生产数据库中出现的编码或类型行为。 ## 保护私人数据,说明安全修复时不暴露弱点 把评估记录存放在项目的审计区域,绝不要放入用户正在使用的私有语料库。在夹具、示例、报告、发布说明和公开讨论中使用虚构的姓名与组织。将可能暴露关系的查询替换为通用占位内容。 在公开材料中从功能角度描述安全修复。说明保护机制和运维人员应采取的操作,但不要公布经过整理的敏感记录列表、暴露持续时间或未修补系统最容易被探测的路径。 把详细的暴露分析保存在访问受限的审查证据中。发布前,应判断毫无背景信息的读者能否推断私有关系,或直接针对旧部署进行攻击;如果可以,应概括相关措辞。 ## 用自动检查让研究文档保持最新又简短 采用分层文档结构: - 始终加载的概览,其中包含研究目标、路由模型、体系结构和跨领域不变量; - 只在涉及相应子系统时加载的当前状态参考文档; - 用于记录历史行为的变更日志和版本历史。 不要把按版本逐条叙述的内容不断追加到当前状态参考文档中。更新现有条目以反映新的事实,并把历史细节保留在版本控制和变更日志中。 在持续集成中强制检查大小上限、禁止出现的历史标记、生成术语表的新鲜度和文档包的新鲜度。没有自动防护的文字规则无法成为持久约束。 ## 每次运行都完整保存结果和设置 把进度写入与数据结果分离的通道。保持阶段名称稳定,把结构化进度设为明确选项,并确保长时间运行的操作能够发送心跳而不破坏机器可读结果。 对于测试和评估,在显示末尾内容或筛选摘要之前,先把完整结果保存到文件。运行任何查看器之前,记录原始命令的退出代码。绝不要把门禁命令直接通过管道传给截断内容的命令,因为管道可能报告查看器成功,同时丢弃实际失败的详细信息。 每次运行都应保留配置、解析后的模式、数据集标识、哈希、指标、成本、警告、退出状态和时间戳。只有当另一位审查者能够重建运行内容,并区分实测事实与假设时,结果才达到可用于决策的质量。