完整题目
Agent 的长期记忆可以怎样实现?如何在结构化存储、语义检索和摘要之间选择,并保证权限、时效与可删除性?
本文目录
先区分状态、事实与证据
“长期记忆”不是模型参数里的永久记忆,而是应用保存并在后续请求中重新读取的数据。设计前先区分:当前任务状态、可更新的结构化事实、原始事件或对话证据、从证据派生的摘要,以及用户明确要求保存的偏好。不同数据有不同的权限、保留期和删除要求。
1. 结构化存储
关系库、文档库或键值系统适合按稳定主键读取订单状态、设置、任务检查点和经过验证的事实。查询复杂度和延迟取决于数据结构、索引、网络与负载,不能把“KV 查询一定 O(1) 且极低延迟”作为系统结论。
结构化存储的优势是约束、版本、事务与精确更新更清楚;代价是需要 schema 和写入规则。事实更新要处理来源、有效期、冲突与撤销,不能把模型从一句话中抽取出的偏好直接覆盖用户资料。
2. 原始证据与语义索引
对话、文档或事件的原文可以存于受控的原始存储,再为允许检索的内容建立关键词或向量索引。向量索引提供语义候选,不等于事实库;相似度高不代表仍然有效、足够重要或属于当前用户。检索时应结合租户、用户、时间、来源和资源权限,返回可追溯的原始证据。
所谓 lost in the middle 是长上下文使用问题,不能直接写成向量数据库的固有缺点。向量检索的延迟、内存和质量也取决于索引、维度、过滤、硬件与数据规模,不存在通用的 10–100 ms。
3. 摘要与派生记忆
摘要可以减少重复上下文,但它是有损派生物,不是突破上下文上限的无损存储。保存摘要时关联来源片段、生成模型/提示版本和更新时间;重要事实回到原始证据核对。新事件到来时,应判断重算、增量合并还是保留多个时期摘要,避免递归摘要把早期错误不断放大。