Appearance
52. Code Agent 怎么设计?
难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 5 min
👔面试官:Code Agent 怎么设计?
🙋♂️我:让模型生成代码,执行后反馈结果。
👔面试官:基础,但要更系统:不是"会写几行代码",而是读代码库、定计划、改文件、跑验证、根据结果继续修正的闭环。而且最大难点是上下文治理、验证闭环、失败处理。你能展开吗?
💡 简要回答
六层设计:
| 层级 | 职责 |
|---|---|
| 任务理解 | 判断是读代码、改bug、补测试、重构 |
| 代码库理解 | 代码搜索、符号索引、依赖关系 |
| 计划与执行 | 列出修改计划,读/改文件,跑命令 |
| 工具层 | 搜索、读文件、编辑、运行测试、执行命令 |
| 反馈闭环 | 根据lint、测试、报错继续修正 |
| 安全治理 | 权限限制、变更日志、人工接管 |
三大难点:
- 上下文治理(代码库太大,怎么拿相关上下文)
- 验证闭环(怎么判断修复真的生效)
- 失败处理(修不好时怎么停、怎么交还给人)
📝 详细解析
三大难点详解
难点一:代码库上下文治理
真实代码库可能有数百万行,无法全部塞入上下文。需要:
- 代码搜索:用 Tree-sitter 解析 AST,构建符号索引(函数名、类名、变量名)
- 语义检索:对代码片段做 Embedding,根据任务描述召回相关代码
- 依赖分析:静态分析调用链,找出与修改点相关的上下游代码
典型工具:ctags、LSP(Language Server Protocol)、tree-sitter。
难点二:验证闭环
Code Agent 必须能自我验证修改是否正确:
- 运行 Linter(pylint、eslint)检查语法和风格
- 运行单元测试(pytest、jest),观察测试通过率变化
- 用 CI 系统构建并运行所有测试
- 根据失败信息继续修正,而不是停止
难点三:失败处理
无限重试是危险的。设计原则:
- 设定最大修改轮次(如 5 轮)
- 每轮记录修改 diff 和测试结果
- 超过轮次上限后暂停,把当前状态和失败原因交给人工
工具设计
code_search(query) # 语义代码搜索
read_file(path, lines) # 读取文件指定行
edit_file(path, old, new) # 精确替换代码片段
run_tests(test_files) # 运行测试套件
run_command(cmd) # 执行 shell 命令🎯 面试总结
Code Agent 是面向代码任务的执行系统,不只是代码补全放大版。关键:上下文治理、验证闭环、失败处理。