状态快照挂在执行生命周期上:执行前恢复,中断与结束时保存
openJiuwen 存的是状态快照,不是事件流。Checkpointer 抽象在 agent、agent team、workflow 三类执行体的前后各留一个挂载点:执行前 recover 把上次的状态整块恢复进 session,需要人工交互而中断时、执行完成时各 save 一次。底层是可替换的 KV 存储(BaseKVStore),键按「会话:命名空间:实体:后缀」分区,agent、agent-team、workflow、workflow-graph 各占一个命名空间(见同目录 base.py 的常量)。代价是只能回到保存点,保存点之间发生了什么不留痕。
- 适合
- 只关心「从上次保存点接着跑」、不需要回溯过程的业务流程。
- 代价
- 只能回到保存点,保存点之间发生了什么不留痕,审计与分叉都做不了。
async def pre_agent_execute(self, session: BaseSession, inputs):
"""Prepare agent execution by recovering agent state."""
session_logger.info(
"Agent checkpoint restore initiated",
event_type=LogEventType.CHECKPOINT_RESTORE,
session_id=session.session_id(),
agent_id=session.agent_id(),
metadata={"operation": "pre_execute", "storage_type": "persistence"}
)
await self._agent_storage.recover(session)
if inputs is not None:
session.state().update({INTERACTIVE_INPUT: [inputs]})
# ...(758-781 行:interrupt_agent_execute:需要人工交互时同样调用 save)
async def post_agent_execute(self, session: BaseSession):
"""Save agent state after execution completes."""
session_logger.info(
"Agent checkpoint save on completion",
event_type=LogEventType.CHECKPOINT_SAVE,
session_id=session.session_id(),
agent_id=session.agent_id(),
metadata={"reason": "agent_finished", "storage_type": "persistence"}
)
await self._agent_storage.save(session)