ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Trae Agent 错误恢复:任务中断后,如何把丢掉的进度找回来

Trae Agent 错误恢复:任务中断后,如何把丢掉的进度找回来

Trae Agent 错误恢复:任务中断后,如何把丢掉的进度找回来

【免费下载链接】trae-agentTrae Agent is an LLM-based agent for general purpose software engineering tasks.项目地址: https://gitcode.com/gh_mirrors/tr/trae-agent

让 Trae Agent 帮忙重构一个模块,跑到一半服务重启,两小时的改动全没了。重跑一遍,等于从头再来。Trae Agent 错误恢复 把每次执行都写进一份轨迹文件,任务中断后你可以从最近的一次存档继续,而不必把走过的路再走一遍。

先看懂恢复的完整链路

它其实是一条清晰的链路:边执行边记录轨迹,每调用一次模型或工具就往文件里追加一笔;任务中断后,顺着 agent_steps 找到最后跑成功的步骤来定位断点;再把上次的上下文装回来,从那个位置继续执行。落到具体载体,就是那份轨迹文件——你可以把它理解成游戏的存档点:代理每走一步自动存一次档,崩了就从最近的档续上,不必从头开局。

轨迹文件里都存了什么

默认落在trajectories/目录下,文件名带时间戳,比如trajectory_20250415_143022.json,天然不重名。这份轨迹由 trajectory_recorder.py 写成 JSON,内容分六类:

  • 任务元数据:项目路径、基础提交版本
  • LLM 交互:输入消息、模型响应、token 用量
  • 工具执行轨迹:工具参数、返回结果、报错
  • 成功标志:任务是否跑完
  • 最终结果:实际产出
  • 耗时与配置:起止时间、provider、模型名
{ "task": "修复认证模块内存泄漏", "start_time": "2025-04-15T14:30:22", "provider": "anthropic", "model": "claude-sonnet", "llm_interactions": [], "agent_steps": [], "success": false, "final_result": null }

每次状态变更后,save_trajectory()会把整份文件重写一遍(原子化写入),进程中途崩掉,已经落盘的部分也不会损坏。

中断之后,如何接着把活干完

中断之后怎么接着干,拆开看就是围绕那份轨迹文件做的几个动作。

怎么找回上次停在哪一步

恢复先要定位。系统打开最近的轨迹文件,倒着看 agent_steps 里每一步的 state 字段,找到最后一个标记成功的步骤,那就是该续上的位置,比从头重跑省掉大量重复劳动。

如何把上下文重新装回来

光知道停在哪不够,还得还原当时的局面。trae_agent.py 的new_task()支持resume_from_trajectory参数:传进那份文件后,它取回最后一轮模型交互的输入消息,当作新一轮的起点,相当于读档,把进度拉回中断前那一刻。

# 从轨迹文件取回最后一轮的输入消息 if "resume_from_trajectory" in extra_args: data = json.load(open(extra_args["resume_from_trajectory"])) self._initial_messages = data["llm_interactions"][-1]["input_messages"]

从哪里开始往下跑

上下文和工具状态恢复后,execute_task()会跳过已完成的部分,从断点继续:

if self.resume_from_step > 0: # 定位到断点 self._current_step = self.resume_from_step return await super().execute_task()

两条命令跑通恢复

最基础的用法是给--resume传那份轨迹文件,把任务从中断处续上:

trae-cli run --task "优化图片加载性能" \ --resume trajectories/trajectory_20250415_143022.json

想换个地方存轨迹,用--trajectory_path指定路径,方便归档重要的任务:

trae-cli run --task "重构登录模块" \ --trajectory_path ./login_task.json

存档救不了的三种情况

外部依赖状态:代理调了第三方接口、改了数据库里的数据,这些状态不在轨迹文件里。重启后接口 token 过期、数据库连接断开,存档也接不上。这类环境更适合容器化,让 docker_manager.py 把依赖一起管起来。

大文件变更:改动上百个文件后再恢复,要逐一重放比对,速度慢。配合 Git 把中间变更用git stash暂存,恢复时从提交点续,能明显减轻负担。

非幂等网络调用:"下单""发消息"这类请求重放一次就多一次副作用,没法安全重试。在 base.py 的工具层做幂等设计,让重复调用不产生额外影响,才是稳妥做法。

这套"边执行边存档、中断后从最近存档续上"的机制,让长任务不必推倒重来。下一步值得关注的,是如何自定义轨迹里到底记录哪些字段。

【免费下载链接】trae-agentTrae Agent is an LLM-based agent for general purpose software engineering tasks.项目地址: https://gitcode.com/gh_mirrors/tr/trae-agent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进