跳到主要内容
版本:1.0(冻结)

Agent 生命周期

生命周期描述的是 Agent 的逻辑存在状态,而不是操作系统进程状态。进程可以重启,Agent 可以继续存在;任务可以结束,Agent 仍然可以保持活动或进入休眠。

状态模型

Created -> Initializing -> Active <--------------------+
| | |
| +-> Sleeping -> Waking ---+
| | |
| +-> Evolving -------------+
| | |
+-------------+-> Recovering -----------+
|
+-> Terminating -> Terminated

状态定义

状态含义允许的主要行为退出条件
Created身份记录已创建,尚未具备运行条件写入初始身份和配置初始化命令被接受
Initializing加载配置、能力、记忆索引和依赖校验版本、获取租约、建立环境连接初始化成功或进入恢复
Active可以接收事件、规划和执行动作观察、决策、行动、评估、记忆休眠、演化、恢复或终止事件
Sleeping逻辑存在但不执行常规任务接收有限唤醒事件、维护最小租约唤醒、终止或恢复事件
Waking从快照重建运行上下文验证快照、重建连接、追赶事件激活成功或进入恢复
Recovering正在修复不一致或失败状态诊断、补偿、回滚、重放、隔离恢复成功、降级或终止
Evolving正在评估候选长期变更实验、回归、审批、发布或拒绝返回活动态或进入恢复
Terminating正在有序停止并固化最终记录停止接单、处理在途动作、最终快照终止提交完成
Terminated逻辑生命已结束只读审计和归档无;该状态不可逆

WakingTerminating 是明确的过渡状态,避免把有副作用的唤醒或终止过程压缩成一个瞬时状态转换。

状态转换规则

每次状态转换必须包含:

  • transition_id:全局唯一标识,用于幂等提交;
  • agent_id:目标 Agent;
  • from_stateto_state:预期起点和终点;
  • reason:业务原因或故障原因;
  • trigger:用户、Agent、系统事件或恢复流程;
  • expected_version:防止并发覆盖的状态版本;
  • requested_atcommitted_at:请求和提交时间;
  • actor:发起者与授权主体;
  • evidence_refs:日志、指标、快照或审批记录引用。

转换采用“校验 -> 准备 -> 执行副作用 -> 提交”的结构:

TransitionRequested
-> GuardChecked
-> TransitionPrepared
-> SideEffectsApplied
-> TransitionCommitted

如果在提交前失败,Runtime 必须根据已完成步骤执行重试、补偿或恢复;不能仅修改最终状态字段来掩盖中间失败。

关键转换

创建与初始化

  1. 分配不可复用的 agent_id
  2. 写入身份、所有者、使命、初始策略和模式版本。
  3. 校验所需能力、权限和资源上限。
  4. 建立记忆索引、消息地址和运行租约。
  5. 生成第一个可恢复快照。
  6. 原子提交到 Active

初始化失败时,Agent 不能伪装成 Active。可恢复错误进入 Recovering;不可恢复的配置错误保留在 Created 或进入终止流程,并保存原因。

休眠

休眠用于减少资源占用,而不是丢弃状态。进入 Sleeping 前必须:

  • 停止接受新的普通任务;
  • 完成、取消或转移在途动作;
  • 固化必要工作记忆和待处理事件游标;
  • 释放计算资源和短期连接;
  • 保留唤醒条件、身份记录和最小可达地址。

唤醒

唤醒不是简单启动进程。Waking 需要验证:

  • 快照模式和逻辑版本兼容;
  • Agent 身份与恢复目标一致;
  • 写租约未被其他实例持有;
  • 休眠期间事件是否需要追赶、合并或丢弃;
  • 外部依赖和权限是否仍然有效。

只有这些检查通过后才能进入 Active

恢复

任何状态都可以在检测到不一致后进入 Recovering,但恢复策略取决于失败类型。恢复完成必须产生新的快照或明确引用已经验证的恢复点,不能复用未经验证的内存状态。

终止

终止分为请求和提交两个阶段:

  1. 进入 Terminating,拒绝新任务。
  2. 处理在途副作用和未确认消息。
  3. 撤销租约、权限和凭据引用。
  4. 生成最终审计记录和可选归档快照。
  5. 提交 Terminated

Terminated 不允许直接回到其他状态。需要继续原使命时,应创建新 Agent,并显式记录继承关系。

心跳、租约与失联

心跳只证明实例在某个时间点仍能回应,不能单独证明业务健康。建议将健康状态拆成:

  • 进程存活:实例是否可达;
  • 租约有效:实例是否仍拥有写权限;
  • 依赖健康:模型、存储、队列和工具是否可用;
  • 进度健康:任务游标是否持续前进;
  • 语义健康:输出是否满足约束和质量阈值。

写租约必须有期限和持有者。续租失败后,旧实例应立即停止产生外部副作用,防止“双活”同时写入。

快照与恢复点

生命周期快照至少包含:

Snapshot
├── identity: id / version / owner / mission
├── lifecycle: state / state_version / lease
├── goals: active / queued / suspended
├── tasks: cursors / pending effects / deduplication keys
├── memory: indexes / working set / retention metadata
├── world: entities / relations / observation watermark
├── capabilities: versions / permissions / performance evidence
├── relationships: peers / roles / trust / active protocols
└── recovery: checkpoint / schema_version / created_at / checksum

快照不是数据库全量备份。它是足以重建 Agent 逻辑连续性的、版本化且一致的恢复单元。

并发与幂等

生命周期控制面必须防止:

  • 同一 Agent 同时存在两个有效写实例;
  • 相同唤醒事件重复创建实例;
  • 超时重试导致重复终止或重复迁移;
  • 旧版本实例覆盖新版本快照;
  • 恢复重放再次执行已完成的外部动作。

推荐使用预期版本比较、唯一转换 ID、租约和副作用幂等键共同解决,而不是只依赖分布式锁。

生命周期不变量

  1. 所有状态转换都可通过事件记录重建原因链。
  2. 任意时刻最多一个实例拥有写租约。
  3. Active 必须对应一个已验证的恢复点或初始化快照。
  4. Sleeping 不持有常规计算资源,但保留可唤醒信息。
  5. Terminated 不可逆,且不再持有运行权限。
  6. 恢复过程不能降低身份版本或覆盖更新后的记忆。

验收场景

后续实现至少需要通过以下场景:

  • 初始化中断后重试,不产生两个 Agent 身份;
  • Active 实例失联后,新实例获得租约,旧实例无法继续写;
  • 休眠期间收到多个重复唤醒事件,只启动一次;
  • 快照模式不兼容时拒绝进入 Active,并给出迁移或回滚路径;
  • 终止期间外部调用超时,系统进入可诊断状态而不是直接标记成功;
  • 恢复重放时已提交副作用不会重复发生。