案例分析一:从“文件不存在”到找到真实入口——Main Loop 如何让 Agent 自己改路径?

场景背景

假设我们要做 Coding Agent 的一个最小能力,找到 Python 项目的入口文件。

最开始模型根据常见经验认为入口是:

app.py

如果这是固定 Workflow:

read app.py
 ↓
运行 app.py
 ↓
结束

那么第一步失败,后面就很难继续。

问题矛盾

真实项目结构并不统一。

可能是:

src/main.py
server.py
manage.py
cli.py
run.py

我们不可能把所有可能入口都硬编码。

Main Loop 的价值就在这里。

输入与前置条件

模拟项目:

project/
├── README.md
├── pyproject.toml
└── src/
    └── main.py

可用 Tool:

read_file
list_files

最大步数:

10

解决过程

第一轮:

Reason:
常见 Flask 项目可能使用 app.py

Action:
read_file("app.py")

Tool 返回:

Observation:
FILE_NOT_FOUND

关键来了。

这不是任务失败。

Observation 被重新放回 messages。

第二轮模型看到:

app.py 不存在

于是:

Reason:
不能继续假设入口名,应该先看目录结构

Action:
list_files()

得到:

Observation:
["README.md", "pyproject.toml", "src/main.py"]

第三轮:

Reason:
发现 src/main.py,很可能是真实入口

Action:
read_file("src/main.py")

得到内容后,模型结束。

把这三轮连续摆出来,可以清楚看到错误并没有截断任务:FILE_NOT_FOUND 被写回后,下一轮先查看目录,再依据真实文件列表读取 src/main.py。

图片[1]-案例分析一:从“文件不存在”到找到真实入口——Main Loop 如何让 Agent 自己改路径?-大赛人网

这条路径的重点是“证据改变动作”。如果第一轮错误没有进入 messages,模型就缺少改道依据,很可能继续重复读取并不存在的 app.py。

输出结果

最终可以输出:

已找到项目入口:
src/main.py

调查过程:
1. 尝试读取 app.py,文件不存在
2. 查看项目文件列表
3. 发现 src/main.py
4. 成功读取并确认入口文件

复盘与迁移

这个案例真正要理解的不是“怎么找 main.py”。

而是,失败结果本身也可以推动任务前进。

只要 Tool Error 被包装成 Observation,再放回下一轮 Context,模型就有机会修正路线。

这也是为什么后面我们不会轻易让 Tool Exception 直接炸掉整个进程。

我们更希望:

错误
 ↓
结构化 Observation
 ↓
模型重新决策

这套机制可以迁移到:

  • SQL 查询为空;
  • API 返回 404;
  • Shell 超时;
  • 测试失败;
  • 文件权限不足;
  • 参数不合法。
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容