Skip to content

mini-swe-agent:最小循环的停止契约

固定官方仓库 SWE-agent/mini-swe-agent@04d809ceab9df28f9adaed044884180159172930。本篇聚焦 DefaultAgentLocalEnvironment 的一条基类路径;只做静态源码核对,未启动模型或执行命令。

mini-swe-agent 消息账本与退出契约

查看原尺寸 SVG(可缩放)

文字版 · 可编辑图源 · 关键代码导读

核心设计

DefaultAgent.run() 先向 self.messages 加入 system 与 user 任务消息,再不断调用 step()step() 几乎就是 execute_actions(query())query() 把当前消息列表送给模型并追加 assistant 消息;execute_actions()message.extra.actions 交给环境执行,再追加格式化的观察消息。每轮 finally 都调用 save();若最后一条消息的 roleexit,循环停止并返回它的 extrarun · query / execute

因此,这个实现的停止契约是消息尾部的 exit 角色,并非模型直接返回一个布尔值。LocalEnvironment 执行命令后,仅在首行输出恰为 COMPLETE_TASK_AND_SUBMIT_FINAL_OUTPUT 且返回码为 0 时抛出 Submitted,它携带的 exit 消息会被 run() 捕获并加入消息列表。提交哨兵 · 异常变消息

停止不只一种

  • query() 在模型请求前检查 step、成本、墙钟限制;超限抛出携带 exit 消息的异常。限制
  • 模型输出格式错误并非立即结束:run() 把反馈消息加入列表、增加连续错误次数;达到配置阈值时写入 RepeatedFormatErrorexit 消息。格式错误分支 · 工具调用解析错误
  • 一般未捕获异常也会加入 exit 消息,但随后重新抛出,不能把它说成正常返回。异常分支

范围边界

本图只画 DefaultAgent 的最小核心。mini CLI 在此提交上默认选择 InteractiveAgent,它覆盖 query()execute_actions() 等以支持 human / confirm / yolo 和完成确认;不能把基类图当作默认 CLI 的全部行为。CLI 选择 · 交互子类 · 覆盖方法

save() 只有 output_path 非空才写轨迹文件;异常/中断的实际环境恢复、模型重试和命令安全边界均未实测。保存条件

图的文字说明 · mini-swe-loop

图从左侧消息账本读到中间的调用循环,再沿底部的“是 / 否”箭头判断去向。messages 是不断追加的账本,而非泛化的“模型—工具—观察”流水线。开头写入 system 和 user 任务。循环中,query() 读取当前账本,检查限制,向模型取得 assistant 消息并追加;execute_actions() 将动作交给环境,追加观察消息。格式错误可添加反馈并继续;提交或限额等中断异常携带消息。每轮调用 save(),然后检查最后消息:只有 role="exit" 才跳出循环并返回该消息的 extra。一般未捕获异常会重新抛出,不能算正常的 exit 返回。

右侧列表说明不同的 exit 来源:本地环境命令输出首行的提交哨兵、查询前限制、达到阈值的连续格式错误。这些是可能的分支,不是必经顺序;图也不是运行轨迹。mini CLI 默认使用交互子类,这张图仅解释其基类循环,不覆盖确认模式。源码与边界

固定官方源码版本:SWE-agent/mini-swe-agent@04d809ceab9df28f9adaed044884180159172930


在线预览稿:书稿仍在校稿,系统篇以文内固定源码版本为准;静态阅读不等于运行验收。