模块 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
- 制造重复、乱序、延迟和网络分区
- 验证状态只单向合法迁移
- 证明不会重复收费、发信或写入关键数据