这里拿 Pi Agent Harness来展开讲讲:核心区别只有一个:注入时机。
一、Steering:插进正在跑的那一轮 Pi很硬核——你按Enter发的steering消息,在当前turn把已发起的工具跑完后才投递,并中断剩余未执行的工具。靠三样落地:独立steering队列(先入队,不拼context);工具返回后的边界检查点(不等turn结束才查);一根AbortSignal挂model stream和并行工具上。还有"完成债务":steering被接收后下一步模型必须处理,否则"已读"是假象。
二、Follow-up:排队等当前轮跑完 ,进follow-up队列,纯FIFO。Pi检测到toolCalls.length===0(准备跳出while循环)才dequeue下一条作新轮开启,不需AbortSignal,只要"turn结束触发下一轮"钩子。
三、粒度还能配 Pi 给 steeringMode/followUpMode:默认one-at-a-time,也能设all(排队消息一次性全塞进下一轮context)。这也解释 LangGraph 的 interrupt() 为何分 graph-level(像follow-up)和 node-level(像steering)。自己撸Agent框架照这骨架抄。







