返回 G01~G90 教材库
G36 · 总 Day 216教材已备 ≠ 学习已完成

G36:Agent Memory Schema、Tool Contract 与状态边界

Agent memory 是带来源、时效和写入规则的外部状态系统,tool contract 则明确动作参数、返回、错误与副作用;二者共同限制 Agent 能记住什么、相信什么和改变什么。

2027-03-29agent-memory、tool-contract、state、permission、provenance

内容类型:预习教材(不代表已完成)
日期:2027-03-29
阶段:P3 · AGI Foundations 90
总路线:Day 216 / 360
周次:W6 · Memory、Planning 与 Tool Use
节奏:周一概念与论文
状态:教材已备;学习未完成
标签:agent-memory、tool-contract、state、permission、provenance

一句话定义

Agent memory 是带来源、时效和写入规则的外部状态系统,tool contract 则明确动作参数、返回、错误与副作用;二者共同限制 Agent 能记住什么、相信什么和改变什么。

学习目标

  1. 区分 working、episodic、semantic 与 procedural memory,以及模型 context 和系统持久状态。
  2. 为工具定义 precondition、input schema、postcondition、error、idempotency 与 permission。
  3. 理解记忆写入、检索、压缩和遗忘各自可能引入的失真。
  4. 画出显式状态、模型生成文本、工具事实和人工决定之间的信任边界。

核心知识

  • Working memory 保存当前任务的短期变量;episodic memory 保存带时间和来源的事件;semantic memory 保存经验证、可复用的事实;procedural memory 保存操作规则或策略。分类是系统设计语言,不代表人类记忆的完整认知模型。
  • Context window 是本次推理输入,不自动成为长期记忆。持久 memory 需要明确 write/read/update/delete,否则每次摘要都会悄悄改写事实。
  • 一条可审计记忆至少含 content, source, observed_at, valid_from, expires_at, confidence, scope, supersedes。模型生成的推测不能与工具返回、用户确认或数据库事实共用同一信任等级。
  • Tool contract 不只是函数签名。它还需描述只读或写入、副作用是否幂等、超时后状态是否未知、允许的主体、速率和人工确认点。
  • Planner 只能提出动作,runtime 才执行经过策略检查的 contract。把自然语言计划直接解释成任意代码,会把模型误差扩大为系统副作用。

机制与推导

把 Agent 的显式状态写成:

[ x_t=(g_t,w_t,e_t,k_t,p_t) ]

其中 (g_t) 是目标,(w_t) 是 working state,(e_t) 是事件引用,(k_t) 是检索到的语义事实,(p_t) 是权限上下文。一次安全状态转移不是单纯 LLM(x)->x',而是:

propose(x_t) -> action candidate
validate(schema, precondition, permission)
execute(idempotency_key, timeout)
observe(typed result | typed error | unknown)
commit(event, source, timestamp)
reduce(x_t, event) -> x_{t+1}

若工具超时,系统可能处于 unknown,不能直接重试有副作用动作。用幂等键 (k) 可要求同一逻辑操作满足:

[ execute(k,a);execute(k,a)\equiv execute(k,a) ]

但这只在工具端真正实现幂等时成立。客户端重复携带键不构成保证。

记忆检索可写为候选集合 (M_q=\operatorname{topK}_m score(q,m))。真实效用不只由相似度决定,还受时效、权限和来源影响:

[ U(m\mid q)=\alpha sim(q,m)+\beta relevance(m)-\lambda age(m)-\rho risk(m) ]

这些权重不是通用真理。更重要的是先过滤无权限或已过期条目,再排序;不能让高向量相似度覆盖策略禁令。

最小练习或观察步骤

  1. 选择一个本地“阅读案件摘要并提出下一步问题”的合成任务,列出 working、episodic、semantic、procedural 四类候选状态。
  2. 定义两个 stub:lookup_case 只读,append_note 有本地副作用。为每个工具写 JSON-like input/output、错误枚举、timeout 与 permission。
  3. 构造三条同内容不同来源的记忆:用户确认、工具返回、模型推测。设计检索输出必须保留来源标签。
  4. append_note 加 idempotency key,手推成功、明确失败、超时未知、重复请求四条状态路径。
  5. 设一条过期事实和一条新事实,检查系统是覆盖、并存还是标记 superseded;禁止静默改写旧事件。
  6. 只记录结构化 action/result,不要求保存隐藏思维链;没有实际运行就不填写成功率或恢复时间。

常见误区与边界

  • 把完整 transcript 当作完美记忆,忽略噪声、冲突、token 成本和跨 session 状态。
  • 模型说“我记得”就当事实已持久化;没有外部存储与来源便不可审计。
  • 把向量相似度当真实性,返回过期、越权或被污染的高相似文本。
  • 工具返回 HTTP 成功就等于业务后置条件满足;还需验证 typed result 与系统状态。
  • 所有动作失败都自动重试,导致重复扣款、重复提交或状态冲突。
  • 本日只构建本地 stub 与边界,不授予网络、凭证、资金或生产写权限。

研究/系统场景连接

金融调查 Agent 的“客户地址”“风险意见”“主管决定”不能同权存储:地址可能来自主数据,风险意见来自模型,主管决定来自授权人工。检索时必须保留 provenance,写工具默认只允许追加草稿而不改变案件状态。研究场景中,实验 Agent 可把论文元数据、本人观察与模型总结分层;若不分层,后续自我引用会把生成文本伪装成外部证据。记忆架构因此不等于“更多上下文”,而是可追溯的知识状态管理。

自检问题

  1. context window 与 persistent memory 的所有权和生命周期有何区别?
  2. 为什么 tool schema 不能替代 permission 与 side-effect contract?
  3. 超时后为何可能进入 unknown 而不是 failed
  4. 同内容不同来源的记忆应怎样表示?
  5. 哪些信息绝不应由模型自行升级为事实?

专业课程对齐

  • 阅读 ReAct 原始论文,关注 reasoning/acting/observation 的交替接口,不把可见轨迹等同于完整内部机制。
  • 阅读 Toolformer 原始论文,区分“学会在文本中插入 API 调用”与生产系统中的权限、验证和副作用控制。
  • 阅读 MemGPT 原始论文,观察其 memory tier 隐喻如何组织有限上下文,并列出该隐喻没有自动解决的真实性与治理问题。

深入学习提示

深入时可研究 event sourcing、temporal database、capability-based security 与 retrieval policy,但每加入组件都先回答它拥有哪类状态、谁能写、怎样撤销。可以用状态机手推替代完整框架安装。真正需要理解的是错误如何从记忆或工具跨越边界传播,而不是背诵 Agent 框架名字。

学后填写区

  • 实际定义的 memory schema:
  • 实际定义的 tool contract:
  • 一个来源冲突:
  • 一个 timeout/幂等边界:
  • 未授予的权限:
  • 尚未理解的问题:
本页是未来 P3 的预习教材。等 P1、P2 完成并正式进入 P3 后,再填写真实理解、实验现象与不确定项;现在阅读不会改变P1 唯一进度账本