构建 SPM-Polaris 的深度总结:真实记忆系统需处理来源追踪、时间戳、级联删除、MCP 时机等问题,而非简单的向量检索。
大多数 Agent Memory 的演示可以用一行代码概括:
conversation → chunks → embeddings → top-k → prompt
这确实有用,但还算不上一个可靠的记忆系统。
我们在构建 SPM-Polaris(一个提供商无关的记忆与上下文层)时认识到了这一点。当系统被嵌入真实的 Chat/Responses/Messages 请求路径后,检索之后浮现的问题反而更难:
最终结果是我们的设计词汇发生了转变。我们不再把"记忆质量"当作一个检索分数来对待,而是开始将记忆视为一种请求和数据生命周期。
长上下文窗口是有价值的,但它们不会让所有历史内容都变得同等有用。关于长上下文利用率和长上下文 RAG 的研究表明,信息位置和困难负例会影响答案质量。提供商的有状态 API 可能简化了溯源,但不断增长的历史仍然会带来 token 成本。
对于一个持续一周的编码任务,回放所有内容往往既昂贵又适得其反。系统需要一种方式来保留最新的任务和保护好的协议状态,检索相关的证据,并仅删除那些可以被该证据安全替代的历史记录。
SPM-Polaris 有一个候选检索阶段和一个证据准入阶段。相似度是不够的。一个结果必须保留来源边界,并在满足门控条件后才能替代历史对话。
这种分离改变了我们报告结果的方式。证据包含性("载荷中是否包含了源材料?")和答案准确性("下游读者是否产生了正确答案?")是不同的衡量标准,将包含性数字作为记忆分数来引用是误导性的。我们之前发布了二者的内部数字;此后我们撤回了它们,等待一份可复现的清单——包括我们自己发现协议漂移后作废的一个结果——而不是让它们在没有证据包的情况下流通。
当门控处没有任何内容通过时,系统返回 UNKNOWN,不注入任何内容,而不是用看起来合理的上下文去猜测。
对于使用工具的 Agent 来说,删除最旧的消息直到达到 token 预算是不安全的。一个请求可能包含 system/developer 指令、函数调用标识符、工具结果、多模态块、提供商推理状态和对话溯源。
我们的规则刻意保守:只有当被接纳的证据覆盖了其精确的来源集合,且没有损坏受保护的提供商状态时,一个旧的完整对话才是可删除的。当证明缺失时,请求会原样通过。
这产生了一种看似奇怪但重要的产品行为:有时候正确的压缩比是零。
托管或本地 Proxy 是内联的。它可以自动召回记忆、编译上下文并记录结果。MCP 暴露工具,但由宿主或模型决定是否调用它们以及在哪里插入响应。
因此,相同的记忆后端不能保证相同的结果。适当的比较需要匹配的模型、工具模式、调用策略、返回大小、放置位置、评判器和种子。我们现在将 integration_path 作为基准清单的一部分。
来自生产路径的单次观察——每个都有自己的范围,不是平均值、SLO 或第三方认证:
每个代理请求还会发出一份可审计的收据,包括已省略工具输出的原始和转发 token 计数,这样删除的历史就会显示为真正的节省,而不是一个直通的零。
局限性同样重要:
下一代 Agent Memory 评估应该衡量的不只是检索:
我们目前的看法很简单:Agent Memory 系统不应该用存储了多少来评判,而应该用是否能解释为什么使用了一段记忆、它安全地替代了什么,以及当证据不够好时发生了什么来评判。
披露: 我隶属于在 Veridical Tech 构建 SPM-Polaris 的团队。上述数字是单次第一方工程观察,而非独立第三方认证。文档:https://docs.spmos.ai/