模块 2Tool 与 Agent Runtime

分布式运行基础

长任务把普通请求变成分布式状态机

  • 模型和 Tool 延迟远高于常规函数调用
  • 人工审批可能暂停数小时或数天
  • 扩容、发布和进程崩溃会中断本地内存
  • 网络超时不能证明远端没有执行

Run、Step、Attempt 与 Event

稳定身份

  • Run ID
  • Step ID
  • Attempt ID
  • Tool Call ID 和幂等键

事件信封

身份与版本

  • Event ID、类型和 Schema 版本
  • 生产者、租户与 Trace

因果与时间

  • Run/Step/Attempt 关联
  • 产生时间、父事件和序列位置

载荷与安全

  • 业务载荷和状态版本
  • 敏感级别、脱敏和保留策略

快照与事件的分工

  • 快照服务快速恢复
  • 事件服务审计和重放

先接受 At-least-once,再设计幂等

  • Exactly-once 通常不能跨越所有外部系统承诺
  • 消费者确认时机决定丢失或重复窗口
  • 重复消息必须能安全识别
  • 幂等结果需要与业务副作用一起考虑

同一 Run 的顺序与并发

乐观并发控制

  • 状态版本
  • Compare-and-swap
  • 冲突后重读与决策

按 Run 或业务实体分区

  • 降低乱序
  • 避免热点
  • 跨分区操作不再天然有序

晚到事件

  • 过期 Attempt 结果不得覆盖新状态
  • 保留证据但拒绝推进

租约、心跳和时间语义

  • Worker 用租约声明暂时所有权
  • 心跳失联后允许重新领取但可能产生重叠执行
  • 业务 Deadline、队列可见性超时和网络超时分开
  • 不能依赖不同机器的绝对时钟完成因果判断

部分失败的恢复顺序

  • 在可重复边界保存检查点
  • 只重试可重试 Attempt,并保留退避与上限
  • 无法自动恢复的事件进入隔离队列并携带上下文
  • 定期对账发现“状态成功但副作用缺失”等不一致

用故障注入验证语义

  • 提交前、提交后、确认前分别杀死 Worker
  • 制造重复、乱序、延迟和网络分区
  • 验证状态只单向合法迁移
  • 证明不会重复收费、发信或写入关键数据