运行循环
Agent 到底循环什么?
循环的单位不是“消息”,而是 Step:组装一次模型请求,接收一次模型输出,并完成这次输出要求的工具调用。多个 Step 组成一个 Turn;多个排队的 Turn 可以由同一个持续运行的 Driver 依次排空。
问题 01
Turn 和 Step 为什么要分开?
答案:Turn 表示一次完整的任务推进区间,Step 表示其中一次模型判断。模型要求工具时,当前 Step 在工具完成后结束,但 Turn 仍未完成;工具结果会触发下一个 Step,直到模型不再要求行动。
问题 02
followup、steer 和 inject 有什么区别?
答案:三者传递的都是可识别的用户角色消息,差别在“投递到哪里”以及“是否唤醒 Driver”。followup 排到下一 Turn;steer 进入最近的下一 Step 并唤醒空闲 Agent;inject 也进入下一 Step,但只附加上下文,不会单独启动工作。
容易误解的点:followup() 没有“这条消息何时完成”的返回值;whenIdle() 观察的是整个 Agent 的排空状态,不能自动把某个后续输出归因给一条 followup。
问题 03
为什么工具执行后还要再请求一次模型?
答案:工具调用只表达“我需要这个事实或动作”,工具结果才提供真实世界的反馈。模型必须在下一 Step 看到结果,才能判断任务是否完成、是否需要补救,或怎样向用户解释。
问题 04
一个 Turn 在什么条件下真正结束?
答案:模型没有留下待执行工具,next-step 收件箱也已排空,运行循环才到达停止检查。agent/turn-stopping 监听器仍可提交 steering;循环会重新读取队列,有新输入就再开 Step,没有才记录 turn/end。