AI 编程与 Coding Agent
AI 写代码是大模型落地最成功的场景之一,从代码补全到能自主修 bug 的 Coding Agent。理解它的原理、形态与评估,是 AI 应用方向的高频考点。
一、AI 编程的三种形态
| 形态 | 说明 | 代表 |
|---|---|---|
| 代码补全(Completion) | 在编辑器里实时补全光标处代码 | GitHub Copilot 补全 |
| 对话式(Chat) | 问答、解释、生成、重构 | Copilot Chat、通义灵码 |
| Coding Agent(自主智能体) | 自主读代码库、改多个文件、跑测试、迭代修复 | Claude Code、Cursor Agent、Cline、Aider、Devin |
趋势是从「补全/对话」走向「Agent」——给一个任务(如修复某 issue),让它自主完成整个流程。
二、代码补全的关键:FIM
代码补全不是简单的「续写」——光标处往往要根据前文和后文填中间(如函数体中间)。这用到 FIM(Fill-In-the-Middle,中间填充) 训练:把代码重排成「前缀 + 后缀 + 中间」的格式训练,让模型学会基于上下文双向补全。
补全还需仓库上下文:把当前文件、相关文件、import 的符号等放进上下文(属于 上下文工程)。
三、代码大模型
专门在海量代码上训练/继续训练的模型,理解多语言、API、代码结构:
- DeepSeek-Coder、Qwen-Coder:开源代码模型的代表,中文社区常用。
- Code Llama:Meta 开源。
- StarCoder:BigCode 开源。
- 通用大模型(GPT、Claude)本身代码能力也很强。
四、Coding Agent 怎么工作?
以「修复一个 GitHub issue」为例,Coding Agent 的典型循环(Agent 在代码域的应用):
理解任务 → 探索代码库(读文件/搜索/看结构)
→ 定位相关代码 → 制定修改方案
→ 编辑文件 → 运行测试/编译
→ 失败则看报错、反思、再改(Reflexion)
→ 测试通过 → 提交关键能力:
- 仓库级理解:代码库远超上下文窗口,需用检索(代码 RAG)、AST/调用图、按需读文件来获取相关上下文。
- 工具使用:读写文件、执行 shell、跑测试、搜索代码(通过 Function Calling/MCP)。
- 自我验证:用「能否编译/测试是否通过」作为可验证的反馈信号驱动迭代(这点和 推理模型 的 RLVR 思路相通)。
- 安全沙箱:执行代码要隔离,防止破坏环境。
五、代码 RAG 与普通 RAG 的不同
- 切分按语法结构(函数/类)而非固定长度,保持语义完整。
- 跨文件依赖:用调用关系/依赖图辅助检索(GraphRAG 思路),而非孤立片段。
- 符号检索:常结合精确的符号/定义查找(grep、LSP)而非纯向量。
六、评估
- HumanEval / MBPP:函数级代码生成,指标 Pass@k(见 评测基准)。
- LiveCodeBench:持续更新新题,防数据污染。
- SWE-bench:考真实 GitHub issue 的修复(要改对仓库里的代码并通过测试),最贴近 Coding Agent 的真实能力,是当前最受关注的标尺。
七、挑战
- 幻觉 API:编造不存在的函数/参数 → 需文档检索、执行验证。
- 大仓库上下文:装不下 → 检索 + 按需读 + 上下文工程。
- 多文件一致性:改一处要同步改相关处。
- 正确性保证:生成 ≠ 正确 → 必须跑测试验证、人工审查。
- 安全:执行不可信代码、误删文件 → 沙箱 + 人工确认关键操作。
八、高频追问
Q:代码补全为什么需要 FIM? 补全常要在前文和后文之间填中间(如函数体),不是单纯续写。FIM 训练把代码重排成「前缀+后缀+中间」让模型学会基于双向上下文补全,比纯左到右更适合补全场景。
Q:Coding Agent 和普通代码补全的区别? 补全是单点、实时、被动的;Coding Agent 是自主的——给一个任务,它会自己探索代码库、改多个文件、跑测试、根据失败迭代,完成端到端的开发任务。
Q:代码 RAG 和普通文本 RAG 有何不同? 切分按语法结构(函数/类)而非固定长度;需处理跨文件依赖(调用图/GraphRAG);常结合精确符号检索(grep/LSP)而非纯向量。
Q:SWE-bench 考的是什么?为什么重要? 考真实 GitHub issue 的修复——模型要在真实仓库里改对代码并通过测试。它远比 HumanEval 这类函数级题贴近真实工程,是衡量 Coding Agent 实际能力的关键标尺。
Q:Coding Agent 怎么保证生成代码正确? 用「编译/测试是否通过」作为可验证反馈,失败就看报错、反思、再改,迭代到通过;再辅以人工审查。这种「可验证奖励驱动迭代」是 Coding Agent 可靠性的核心。
Q:让 Agent 执行代码有什么风险?怎么防? 可能误删文件、执行恶意/破坏性命令。需在沙箱/容器中隔离执行、最小权限、关键操作(删除、推送、安装)人工确认。