停止是安全边界,不是优化项

循环可以因为:步数用尽、墙钟超时、token 预算打满、工具连续失败、用户点了取消。缺任何一项,取消请求到达时你不知道该杀掉哪一次模型调用。

取消怎么做才不会脏写

  • 每个 run 有 run_id,工具调用可中断或最多做到「最多一次」。
  • 用户取消先置 cancelled,再停排队中的下一步;已经发出的副作用用补偿或确认回滚。
  • 不要在 finally 里默默吞掉取消,否则日志看起来像成功。

日志要能回放

至少记下:输入、选择的工具和参数、观察结果、停止原因、耗时和费用。按 trace_id 把多步串起来。日志系统和「任务中途被取消」两份草稿并入本文。