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),仅供参考