Agent 类基于 asyncio.CancelledError 实现中断机制,支持在模型推理或工具执行的任意阶段停止执行。中断之后,智能体的上下文会保持一致状态,会话可以立即通过新的输入消息继续。
中断智能体有两种方式,取决于智能体是否正在运行:
- 智能体正在运行:通过对承载
reply/reply_stream的协程调用task.cancel()来中断。这会在智能体内部触发asyncio.CancelledError,从而干净地展开当前的推理-行动步骤。 - 智能体处于暂停状态:通过
reply_stream传入一个UserInterruptEvent。如果智能体当前正在等待用户确认或外部工具执行,它会清理待处理状态并结束本次回复。对于每一个待处理的工具调用,智能体会合成一个标记为”被用户中断”的ToolResultBlock,并依次产出对应的ToolResultStartEvent、ToolResultTextDeltaEvent、ToolResultEndEvent以及最后的ReplyEndEvent,使智能体重新处于可以接受用户输入的状态。如果智能体并未处于暂停状态,则该事件是空操作,reply/reply_stream会立即返回。
使用
agent.state.reply_id 引用当前处于暂停状态的回复。有关智能体如何进入暂停状态,请参见人机交互。