Trae Agent 是如何理解仓库级代码,如何解决复杂问题?

早上5点就起来读书了,看完《论语别裁》里仁篇,还学了下波动方程和傅立叶变换,大早上学习效率就是高。

这几天也关注到头条的Trae Agent开源了,因此读了下源码,重点想知道它是如何分析全仓库代码的,毕竟全代码当prompt输入也不现实,LLM有长度限制,就算没限制也会看了后面,忘了前面。还有一个问题是如何解决复杂问题,怎么拆分复杂任务,又如何确保多个子任务的完成,如何边观察边修正错误的。

Trae Agent代码不多,其实重点就在工具调用,关键就是Bashtool与SequentialThinkingTool。

  • 如何理解仓库级代码?

先来看第一个问题。这主要还是通过LLM调用bash工具来搜索代码,定位问题相关代码来理解的。不过没看到有安全限制,默认直接执行,要是LLM抽风,来个`rm -rf /` 就有得玩了。

通过bash工具来搜索代码过于粗糙了,因为会把符号定义与使用都搜索出来,而很多时候我们更需要的是获取符号的定义代码,因此会造成输出信息的干扰。这种方式简单且通用,就是搜索结果作二次筛选。

其实有更好的其它方案,有兴趣的可以去了解下LSP(Language Server Protocol)。

  • 如何解决复杂问题?

重点就于SequentialThinkingTool,它能实现更长链的思考,特别适合复杂问题的解决。传统的思维链虽能拆分任务,但对于复杂问题,需要很多步骤来解决的,经常是走个2,3步就收工,很难长链思考与执行,而且还无法观测与修正,除非你用多agent协同解决。

sequential_thinking 是一个可反复调用的结构化思考脚手架。
- 每一次调用 = 一条“思维记录”(thought)。
- 参数:当前 thought 内容、第几条、总条数、是否还需要下一条。
与一次性输出整条 CoT 不同,它把思考过程切成可观察、可回溯、可干预的小段,从而更容易在 10-20 步内保持逻辑一致。

假设code_analyze_agent允许调用该工具SequentialThinkingTool来分析代码,解决项目bug并修复,那其交互流程可能如下:

用户└─► code_analyze_agent:issue 描述└─► sequential_thinking(1/5)└─► bash: find . -name "*.py" | xargs grep "KeyError"└─► sequential_thinking(2/5)└─► bash: python repro.py → 得到 Traceback└─► sequential_thinking(3/5)└─► 得出“root cause 是 dict.pop 的默认值缺失”└─► sequential_thinking(4/5)└─► str_replace_based_edit_tool:修改 src/foo.py└─► sequential_thinking(5/5)└─► bash: pytest tests/ → 全部通过└─► task_done() → 向用户提交报告

详细示例对话

Agent 系统提示(来自 Trae-Agent)

You can call sequential_thinking as much as you need.  Set totalThoughts ≥ 5. You may run bash commands between thoughts.

Step 1 – 理解问题

sequential_thinking(  thought="用户说:‘运行 flask app 时报 KeyError: "missing_config_key"’。我需要先弄清楚缺的是哪个 key。",  thoughtNumber=1,  totalThoughts=6,  nextThoughtNeeded=true)

Step 2 – 收集证据

bash: grep -R "missing_config_key" .# 输出:config/default.py:21:  raise KeyError("missing_config_key")

Step 3 – 复现

bash: python -m pytest tests/test_config.py::test_default -v# 输出:FAILED KeyError: "missing_config_key"

Step 4 – 诊断

sequential_thinking(  thought="问题根源:代码尝试从 os.environ.pop('MISSING_CONFIG_KEY') 读取但无默认值。我应该给它一个缺省值。",  thoughtNumber=4,  totalThoughts=6,  nextThoughtNeeded=true)

Step 5 – 修改

str_replace_based_edit_tool(  file="config/default.py",  old_str="value = os.environ.pop('MISSING_CONFIG_KEY')",  new_str="value = os.environ.pop('MISSING_CONFIG_KEY', 'dev-default')")

Step 6 – 验证

bash: pytest tests/test_config.py -q# 输出:1 passedsequential_thinking(  thought="测试通过,边缘情况也已覆盖;可以结束任务。",  thoughtNumber=6,  totalThoughts=6,  nextThoughtNeeded=false)task_done()

序列思考与思维链的对比

能力

CoT(思维链)

Sequential Thinking

步骤修正

❌ 需全流程重生成

✅ 局部修正(is_revision

多路径探索

❌ 单一路径

✅ 多分支(branch_id

跨会话连续性

❌ 仅限单次对话

✅ 持久化存储历史思考

外部工具集成

⚠️ 有限

✅ 无缝调用(如代码分析器)

一句话总结
sequential_thinking 把 LLM 的“黑盒长链思考”拆成了可观测、可调试、可脚本化的若干小步;code_analyze_agent 通过“思考→工具→结果→再思考”的循环,像人类工程师一样步步为营地解决复杂问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值