Anthropic 的 Managed Agents 记忆存储可以跨会话保留文本。应用若要给两个代理提供同一个经审查事实,持久化只是第一步。应用必须确定记录归谁所有、检查原始证据、选定一个存储修订版本,并在任一代理看到记录前保留其精确字节。本指南面向拥有获授权 Managed Agents 测试版访问权限,并能控制应用身份验证、存储选择及代理配置的开发者。依据是Anthropic 当前的记忆文档和于2026年10月20日核查的 API 参考资料;BIG CHANGE 没有进行账户或模型测试。

关键变化

  • 发生了什么变化: 经审查的有类型 JSON 记忆可以持久保存在 Managed Agents 存储中。应用检查其来源和存储的精确字节,冻结一份私有快照,再将相同获批字节发送给两个独立的获授权会话,且不挂接记忆存储。
  • 为什么重要: 后续修改存储内容,不会改变已经为这些会话构造好的输入。
  • 需要关注: 来源准确性、用户授权和回答质量仍需分别检查。

开始之前

准备一项真实事实、偏好或项目规则,具备有权使用的原始来源、稳定来源 ID 和修订版本,并由负责人批准存储及向两个代理角色披露。在审查前,为该记录确定合适的审查有效期。确认账户具备 Managed Agents 测试版访问权限、私有 API 密钥、获授权工作区、两个已配置代理 ID、环境及允许的模型。在允许本流程的四个限定消费者会话前,查看当前用量及价格。不要把密钥放进提示词或凭据记录。

应用需要从已验证身份到作用域的映射。在受信任应用状态中,将身份绑定到获批的 ownerScopeId、工作区 ID、存储 ID 和两个允许的代理 ID。私人用户或项目的访问规则不同时,使用独立存储。工作区 API 密钥不等于最终用户身份验证,路径不是租户边界,提示词也不能移除工具或凭据。确认两个消费者配置均未挂接存储,也不存在能访问可变存储的连接器、环境凭据或工具路径。无法建立这个边界,就在发送记录前停止。

1. 根据来源批准记录

使用这个结构模板,将所有尖括号中的值替换为真实获批证据。它不是事实示例,也不是声称已取得的结果。批准前,将完整对象序列化为一段精确的 UTF-8 JSON 文本。验证器应只接受这些字段和类型,拒绝未知字段,要求非空白字符串及有效 UTC 时间戳,将 kind 限定为 fact、preference 或 project_rule,并将 status 限定为 active、disputed 或 superseded。只有 active 状态的记录可以注入。获批陈述必须符合引用的原始来源,包括生效日期和适用范围。

JSON
{
  "schemaVersion": "memory-record/v1",
  "recordId": "<opaque stable record ID>",
  "ownerScopeId": "<trusted mapped scope ID>",
  "kind": "<fact | preference | project_rule>",
  "claim": "<precise source-supported claim>",
  "sourceId": "<private original-source ID>",
  "sourceRevision": "<original revision or exact source hash>",
  "sourceQuoteOrPointer": "<minimal permitted quote or stable pointer>",
  "validFrom": "<UTC timestamp>",
  "checkedAt": "<UTC timestamp>",
  "status": "active",
  "reviewerId": "<approved human reviewer ID>",
  "reviewedAt": "<UTC timestamp>"
}

应用的私有批准凭据必须注明实际批准人、所有者许可、原始来源与修订版本、作用域及获准代理、时效规则,以及这些精确 UTF-8 JSON 字节的 SHA-256。它记录的是人对实际陈述的判断。记录中的 reviewerId 字符串不是身份验证。若仍有未解决矛盾或缺少许可,不要持久保存记录。Anthropic 存储文本,但不会验证这个模式或确立陈述为真。

2. 持久保存并回读

在获授权工作区中创建或选择一个范围有限的记忆存储,记录其真实 memstore_... ID。使用不敏感路径,例如 /records/{opaque-record-id}.json。请求前,记录操作人、UTC 时间、来源修订、获批字节哈希、存储与路径,以及 pending 状态。直接调用记忆存储时使用 agent-memory-2026-07-22;会话调用使用 managed-agents-2026-04-01。Anthropic 说明,在存储请求中组合这两个测试版标头会返回 HTTP 400。创建参考文档和记忆手册展示了以下 SDK 形式;请将安装的 SDK 与当前参考资料核对:

Python
mem = client.beta.memory_stores.memories.create(
    store.id,
    path="/records/<opaque-record-id>.json",
    content=approved_json_text,
)

创建不会覆盖现有路径。保存返回的 mem_... ID,再列出限定存储中的 /records/,将每个 next_page 作为下一页的 page。默认的基本列表不含内容。检索选定的记忆 ID 以获取全文;将存储 ID、记忆 ID、路径、内容及 content_sha256 与获批字节核对。在日志和注册表中记录响应及直接回读结果。仅有创建响应并不能证明完成。若响应不确定,先检查确切路径及直接记录,再判断发生了什么;单凭搜索无结果,不能再次创建。

3. 冻结选定的修订版本

每次后续运行都要验证调用者身份,并从可信注册表解析其作用域、存储和选定记录 ID。如需查找,遍历限定前缀的所有页面,再直接检索选定的 mem_...。对返回内容的 UTF-8 编码计算 SHA-256,将其与提供商的 content_sha256 及人工批准的精确字节哈希比较,再次验证 JSON。检查记录 ID、所有者作用域、来源修订、active 状态、来源是否仍有效,以及预先确定的时效上限。任一检查失败,就什么也不发送。

将检索到的精确字节一次性写入按哈希寻址的私有存储,使用排他创建语义,例如 Python 的 open(path, "xb")。立即回读文件并计算哈希,并在每次发送前再做一遍。绝不覆盖现有快照。文件不完整,或同一地址已有不同字节,都需要暂停并核对解决。将原始批准、存储 ID、记忆 ID、提供商哈希、快照哈希和作用域决定保存在私有检索凭据中。这种只写一次的快照是应用设计,不是 Anthropic 提供的固定版本挂载。

4. 将相同字节提供给两个新会话

用真实获授权代理和环境 ID 创建代理 A 的新会话,并且不在以下字段中加入记忆存储:resources。确认返回会话的资源,以及代理的实际工具和凭据,都没有其他通向该存储的路径。Anthropic 的会话指南分别说明创建及发送 user.message 的操作:

Python
session = client.beta.sessions.create(
    agent=approved_agent_id,
    environment_id=approved_environment_id,
)
client.beta.sessions.events.send(
    session.id,
    events=[{"type": "user.message", "content": [{"type": "text", "text": message_text}]}],
)

调用 events.send 前,回读私有快照并计算哈希。以确定性方式构造 message_text,包括明确的“经审查数据”标签、记录与来源及审查标识、不变的 JSON 文本及 SHA-256,最后加上一个原始来源能够回答的具体问题。展示的字段是应用消息格式,不是提供商响应字段。发送前,记录完整 UTF-8 消息字节及哈希、选定快照哈希、获授权代理 ID、会话 ID 和发送状态。保存发送结果及真实已发送事件 ID,或可用的事件列表回读。发送结果未知时,需要回读事件,不能盲目重发。

为代理 B 创建第二个新会话,使用其单独获批的代理 ID,同样不允许访问存储。重新读取同一份只写一次的快照,验证字节哈希,构造并记录 B 的完整消息,然后发送。两条消息的问题或收件者元数据可以不同;但要确认内嵌 JSON 字节和获批记录哈希完全相同。根据原始来源审查每个代理的回答和所有工具事件。看似合理的回答或引用,并不能证明模型内部依赖了注入文本;消息及提供商事件凭据能确立的是应用提供了什么。会话若有实时挂载或其他存储访问路径,就不要发送。

5. 只有重新审查来源后才能更新

原始来源改变时,直接检索当前记忆,并与所有者比较新旧证据。请人工批准精确的替换 JSON 字节,其中包含稳定记录 ID、更正的陈述或来源指针、新来源修订及检查、审查时间。保留旧凭据和哈希。记录 mem_... ID、当前直接读到的 content_sha256、拟替换哈希、操作人、批准和待处理状态。文档中的条件更新如下:

Python
client.beta.memory_stores.memories.update(
    memory_id=memory_id,
    memory_store_id=store_id,
    content=approved_replacement_json_text,
    precondition={"type": "content_sha256", "content_sha256": fresh_old_hash},
)

提供商对精确 UTF-8 内容计算哈希,不作规范化。前置条件不匹配会返回 HTTP 409 memory_precondition_failed_error。收到该响应或网络结果不确定时,重新检索实时记忆,按需查看版本历史。比较竞争的来源修订,并请所有者合并、拒绝或批准一份新的精确替换;绝不盲目重试旧写入。成功后,必须通过直接检索确认路径、完整替换文本、哈希及记忆版本 ID,才能把日志状态改为 confirmed。

从验证过的修订冻结一份新的获批快照。启动新的获授权 A、B 会话,不挂载存储,重复两次发送及来源检查。不要改动旧快照,也不要声称已发送消息会自行更新。将旧快照标记为不再可用于后续注入。所有者撤回记录时,停止新的发送,并执行其保留和删改政策:删除当前记忆不一定会删除保留版本。归档或删除整个存储需要另行决定。

什么才算完成

私有凭据应将原始许可和来源修订连接到精确获批 JSON 哈希;真实的工作区、存储、路径及 mem_... 身份与直接创建回读;一份不可变快照;两个不同、获授权且未挂载存储的会话 ID,以及发送消息哈希和经来源核查的回答;获批条件更新、更新后的直接回读和新会话检查。任何连接不确定,就将整个练习标为未完成,保留确切暂停原因。实际执行时,记录会话和工具的真实用量及账户对应费用;本指南仅依据文档,没有测量节省或模型表现。

对于相关但不同的工作,为后续会话审查一份 Dream 输出处理的是生成的存储提案。这里的流程从所有者批准的来源记录开始,固定两个消费者实际接收的内容。