TRAE 在 Agent 代码编辑的实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. TRAE 在代码编辑中的
实践
演讲人:冯绪
TRAE / 架构师
2.
3. 01
目录
02
03
04
Agent 在 AI 编程助手中的价值
01
TRAE 编程助手的发展阶段
02
从代码补全到 Agentic Edit 的探索
03
总结和展望
4. Agent 在 AI 编程助手中的价值
5. Agent 在 AI 编程助手中的价值
AI 编程助手正经历从 辅助工具 到 自主智能体 的深刻变革
辅助工具
智能辅助
Agent 自主智能体
核心价值
自主定位文件与代码改动
通过对项目结构的理解和语义分析,自主识别相关代码文件和修改位置
关键能力
Q
代码编辑能力
定位文件的编辑位置,准确完成文件的修改
自动规划与执行 项目感知与上下文理解
将复杂任务分解为可执行子任务,制定详细执行计划并自主执行 理解项目结构、文件依赖和业务逻辑,超越当前文件的局部视角
变更矫正与迭代优化 代码验证与测试生成
通过测试和分析自主识别问题,生成新修改方案进行迭代 自动生成测试用例,验证修改的正确性,减少人工测试工作
6. Agent 在 AI 编程助手中的价值
AI 编程助手正经历从 辅助工具 到 自主智能体 的深刻变革
辅助工具
智能辅助
Agent 自主智能体
核心价值
自主定位文件与代码改动
通过对项目结构的理解和语义分析,自主识别相关代码文件和修改位置
关键能力
Q
代码编辑能力
定位文件的编辑位置,准确完成文件的修改
自动规划与执行 项目感知与上下文理解
将复杂任务分解为可执行子任务,制定详细执行计划并自主执行 理解项目结构、文件依赖和业务逻辑,超越当前文件的局部视角
变更矫正与迭代优化 代码验证与测试生成
通过测试和分析自主识别问题,生成新修改方案进行迭代 自动生成测试用例,验证修改的正确性,减少人工测试工作
7. 准确的文件定位和代码编辑能力
存在的挑战
文件定位能力有限 跨文件修改困难
传统 AI 助手需要用户手动指定文件或代码块,无法自主识别相关代码文
件 和修改位置 处理跨文件、跨模块的复杂修改时,传统 AI 助手自动化能力有限,需多
次干预
8. TRAE 编程助手的发展阶段
9. TRAE 编程助手的发展阶段
补全 & Chat
Chat Apply
编辑能力:代码续写,Chat 提
供代码片段,需要手动插入 编辑能力:根据代码块编辑文
件,具备一定的文件定位能力
用户体验:基础交互,效率提
升有限 用户体验:经用户选中的代码块
自动应用,一次性修改
Builder & Cue
编辑能力:Cue 提供即时的文
件改写、删除、续写等体验;
Builder 自动规划和查找要变更
文件,自动完成变更和迭代
用户体验:自动化的开发体验,
大幅提升开发效率
10. 补全 & Chat :基础交互的建立
代码补全
用户编辑代码
AI 给出续写建议
Chat
用户提问
AI 生成代码
手动复制粘贴
集成到项目
11. Chat Apply :自动化编辑
AI 生成修改代码
AI 识别
目标文件
用户确认采用
AI 编辑目标文件
12. Builder & Cue : 智能化编辑
• Cue • Builder
多行编辑、智能改写、光标预测 项目上下文感知、自主规划、多文件编辑
13. 编辑能力的逐步增强
补全 & Chat
代码续写
简单的替换
Chat Apply
根据目标代码自动改
写原文件
具备一定的文件定位
能力
Builder & Cue
Agentic Edit
智能的、自主的文件
编辑能力
14. 从代码补全到 Agentic Edit
15. 代码补全
16. 代码补全
• 让模型续写编辑器中的代码,是模型
最擅长的能力
• 通过 FIM、最近打开文件等优化手段
提升效果
• 局限性:只能编辑光标所在位置的代
码
17. Apply 让 Chat 更有用武之地
18. Apply
• Chat 模型输出的代码块的特点
• 只输出关键的代码,不输出所有的内容
• 其他无变更的代码使用缩略格式表示
19. Apply
• 为什么要求 Chat 模型输出这样的格式呢
• 节省 Token — 上下文窗口不足以让模型输出全文
• 为什么不输出 Diff 格式呢
• Chat 模型并不擅长输出 Diff 格式 — 准确性
不尽如人意
• Diff 格式对于用户的阅读体验较差
20. Apply
• Apply 要解决的问题 — 根据模型输出的代码正确地编辑原文件
原始文件 Chat 模型输出(Plan) 结果
… # …existing code… …
def calc_sum(a, b) :
return a + b def calculate_sum(num1,
num2) :
return num1 + num2 def calculate_sum(num1,
num2) :
return num1 + num2
def calc_min(a, b) :
…
+
# …existing code…
挑战:难以通过纯规则匹配的手段完成代码的合并
=>
def calc_min(a, b) :
…
21. Apply
• Apply 方案 — Apply 模型
• 基于上下文和语义的改写,正好发挥大模型的能力 : 训练专注于代码编辑任务的 Apply 模型
原文件内容
+
带有缩略的代码块
(Plan)
=>
Apply 模型
=>
编辑后的文件内容
22. Apply
• Apply 方案 — Apply 模型的选择和训练
• 对模型的要求
• 时延低
• 在代码编辑任务上能良好地遵循 Plan
• 长上下文支持
• 模型的训练
• 针对不同 Chat 模型的输出偏好,生成不同缩略格式的训练数据
• 针对不同场景(加注释、import 依赖、删除代码、重命名等)构造不同数据
• 针对常用的编程语言构造数据
23. Apply
• Apply 案例演示 — 给文件添加注释
24. Apply
• Apply 案例演示 — 给文件添加注释
25. Apply
• Apply 方案 — 局限性
• 额外的资源开销:需要使用 Apply 模型来进行编辑任务
• 某些场景下效率不高:即时只修改一行代码,也需要重新生成整个文件
• 长文件限制:方案特性注定有一半的 token 用于输入,无法处理太长的文件,准确性上也会有所下降
26. Cue — 补全不再只是续写
27. Cue
• 能力扩展到光标之外,覆盖整个工作空间
• 多点编辑:支持代码的删除和替换,多行同时变更
• 光标预测:预测下一次光标移动的位置,快速跳转
• 跨文件编辑:智能识别需要编辑的文件
28. Cue
• Cue 的挑战
• 理解用户意图 — 确定用户想要完成什么任务
• 确定更改位置 — 决定在哪里进行更改
• 确定如何编辑 — 准确高效地执行更改
• Cue 的核心技术
• 通过用户编辑历史让模型推测用户的意图
• 基于 RAG 技术的上下文感知 — 仓库级别的编辑能力
29. Agentic Edit — 自主的文件编辑
30. Agentic Edit
• 随着模型能力的增强, Builder 产品形态出现
• Builder 可以自主地搜索整个仓库,自主决定要编辑的文件
• 可多次编辑相同文件或不同文件,过程中保持一致性
• 增加了多种编辑能力
31. Agentic Edit
• Builder 具备更多的代码编辑能力
• write_to_file:新建文件或者完全覆盖旧文件,多用于模型新建文件的场景
• delete_file:删除掉项目中的某个文件,需要用户确认
• update_file :编辑项目中的文件
32. Agentic Edit
• 文件编辑方案的迭代:Apply -> Search/Replace
Apply 方案在 Builder 模式下有一些局限性
• 一次编辑分为两个阶段(Chat 模型输出 & Apply 模型编辑),有额外的开销,两个阶段误差叠加,更容易编辑错误
• 跨行编辑效率低,长文件处理难度较高,准确性也较低
33. Agentic Edit
• Search / Replace 方案
模型能力不断地提升,代码编辑能力被大模型内化
• 更强的指令遵循能力
• 更强的格式化输出能力
• 更强的工具调用能力
Search / Replace 方案被越来越多地使用在文件编辑功能上
34. Agentic Edit
• Search / Replace 方案
• 提供 update_file 工具供模型调用,由模型指定文件路径、 old_str 和 new_str
• 在原文件中匹配 old_str,找到编辑位置,并替换成 new_str
原始文件 old_str 结果
… def calc_sum(a, b) :
return a + b …
def calc_sum(a, b) :
return a + b
def calc_min(a, b) :
…
+
new_str
def calculate_sum(num1,
num2) :
return num1 + num2
=>
def calculate_sum(num1,
num2) :
return num1 + num2
def calc_min(a, b) :
…
35. Agentic Edit
• Search / Replace 方案 — 优势
• 无需再次调用编辑模型:避免了两个阶段调用带来的误差
• 不受上下文窗口限制:适用于任意长度的文件的编辑
36. Agentic Edit
• Search / Replace 方案 — 劣势
•
模型输出要求高:要求模型能够严格输出符合要求的内容和格式
•
•
大量变更时输出的 token 会翻倍,拆分成多次编辑效率低
•
•
特别是在需要转义的场景中,特别容易出错
使用数组的方式来提升效率,但数组的格式会进一步提高对模型输出的格式要求
工程复杂度高:为了应对模型输出的不确定性,需要做模糊匹配以及出错时的修复操作
37. Agentic Edit
• Apply 方案和 Search/Replace 方案应用于不同的场景
• Chat 场景下,使用 Apply 方案 — 用户体验更好
• 长文件编辑场景和 Builder 模式下,使用 Search / Replace — 准确性更高
38. Builder 的 Show Case
使用 Builder 模式完
成一个太阳系行星
示页面
• 根据用户命令
• 完成需求开发
• 过程中感知编译
错误自行修正
39. 总结和展望
40. 总结
• TRAE 编程助手的发展阶段和产品形态
• 补全 & Chat
• Chat Apply
• Builder & Cue
• TRAE 编程助手的代码编辑能力的演进
• Apply — 通过训练 Apply 模型,完成代码编辑任务;但仍存在长文件处理不佳的问题
• Cue — 更低的延迟,更强的补全能力,RAG 的加持,提供多点编辑和光标预测能力
• Agentic Edit — 充分利用模型的编辑能力,Builder 模式下提供更准确且不受文件长度限制的编辑能力
41. 未来展望
编辑准确性和效率的进一步
提升 协作与集体智能 认知增强与自主性提升
• 探索单文件不同行和多文件的并
行编辑,提升代码编辑的效率 • Multi-Agent 协作框架 • 模型思考与规划能力的进一步激
发
• 通过自我纠正机制,提升编辑的
准确性 • 角色分化 & 领域专业化 • 代码生成质量自我反思
• 生态开放 & 自定义Agent分享 • 更有效的会话历史管理能力,在
有限的模型上下文窗口内达到最
佳效果
42.
43. THANKS
探索 AI 应用边界
Explore the limits of AI applications