AI 编程:从补全代码到协作式开发 封面
AI 系列

AI 编程:从补全代码到协作式开发的工程方法论

AI 编程助手最擅长的不是替你设计整个系统,而是缩短“想法—实现—验证”的循环。本文讲清三种模式的边界、上下文该怎么喂、以及 Spec 驱动的安全工作流。

AI 编程 核心概念示意图
AI 编程:三种模式的能力边界
AI 编程 工作流程示意图
AI 编程:Spec 驱动的协作工作流
AI 编程 实践检查示意图
AI 编程:验证与评审的检查清单

三种模式,能力边界各不同

把 AI 编程粗分三类,能避免“拿锤子找钉子”:补全模式(Copilot 类行内补全)最擅长局部、低决策密度的重复劳动——样板、正则、测试用例骨架,延迟低、上下文小;但它看不到全局,跨文件重构基本无能为力。聊天模式(Chat)擅长解释陌生代码、写单文件函数、根据报错给修复建议,决策密度中等,但缺乏“执行权”,改完要你手动落地。Agent 模式(Claude Code、Cursor Agent、WorkBuddy 类)能读目录、跑命令、改多文件、运行测试并自我修正,决策密度最高,代价是容易“自作主张”——改了你没让它改的文件、顺手加了依赖。

维度补全聊天Agent
上下文范围当前文件手动选取整个仓库
执行权有(危险)
最佳用途样板/重复解释/单点多文件任务
主要风险越权改动
为什么重要:先选模式再开工。让 Agent 去写一行正则是浪费,让补全去重构模块是强人所难。

上下文工程:喂什么,比模型多大更关键

Agent 的产出质量,很大程度取决于你喂给它的上下文是否“刚好够”。太多会稀释注意力、撑爆窗口;太少它会瞎猜。经验法则:明确给出相关的接口契约 / 类型定义 / 现有调用点,比泛泛说“在 UserService 里加个方法”强十倍。历史对话要裁剪——只保留与本任务相关的决策与报错,别把整段闲聊塞进去。善用 @file@symbol 这类引用把“精确片段”而非“整个大文件”喂进去。

一个反模式是“把整个 repo 丢给模型”。正确的上下文分层是:系统级(架构约定/编码规范)→ 任务级(本次改动涉及的文件与接口)→ 执行级(运行结果、测试报错)。层级清晰,模型才不容易跑偏。

踩坑提醒:Agent 改完后,先 git diff 比对它动了哪些文件。曾经有团队让 Agent“顺手”升级了某个依赖,结果 CI 全红。把改动范围限制在显式声明的文件,是低成本防护。

Spec 驱动开发:先写规格,再写代码

Spec-driven 的核心是把“要做什么”先用自然语言(甚至伪代码)写清楚,让模型围绕一份明确契约工作,而不是边做边猜。典型流程:写一份 spec.md 描述目标、接口、边界条件、验收标准 → 让模型据此产出实现计划 → 你确认计划 → 模型分步实现并提交。这样每次改动都有据可查,回归也有基准。

# spec.md 片段示例
## 目标
为 POST /orders 增加“库存不足时自动排队”的能力。

## 接口约束
- 请求体新增字段 `queueWhenOutOfStock: boolean`
- 返回 202 且 `orderId`,不阻塞主流程
- 并发下单需幂等(同 requestId 重复提交返回首次结果)

## 验收标准
- 单测覆盖:库存充足 / 不足排队 / 重复提交
- 集成测试:模拟库存服务超时,断言订单进入队列而非失败
- 不修改既有 GET /orders 的响应结构

工作流:一张图看清协作节奏

Spec 驱动 AI 编程工作流
写 Spec模型出计划人工确认Agent 分步实现跑测试/静态检查人工评审 diff合并
每个箭头都是一次“验证闸门”;模型只在人工确认的范围内执行,越权改动在此被拦下。

测试生成与代码评审的实战

模型最被低估的能力是测试生成。给定函数签名和边界条件,它能快速产出单元测试用例骨架,你只需补断言和 fixture。但警惕它“为覆盖率而写测试”——只断言 not null、不验证业务结果,这种测试是假的。评审侧,让模型扮演 reviewer:检查异常是否被吞掉、权限校验是否缺失、是否有 N+1 查询、是否引入了不必要的依赖。把这类清单固化成 prompt,比一次性提问稳定得多。

小贴士:让模型先“描述现有行为再动手改”,往往比直接说“修这个 bug”更准。它理解错了,你能在计划阶段拦下,而不是在 PR 里才看到离谱改动。

主流工具差异与配置要点

工具选择取决于“你想要多少自动化,以及愿意交出多少控制权”:Cursor 强调编辑器内多文件 Agent 与索引体验,适合在 IDE 里全程协作;Claude Code 偏终端/CLI,擅长把仓库当整体、自主跑命令与测试,适合后端与脚本任务;WorkBuddy 类把 Agent 嵌进更完整的工作流(任务管理、多工具编排),适合团队级自动化。配置上的共性要点:限定可访问的文件/命令白名单、开启确认模式(危险操作需人工批准)、把编码规范与测试命令写进项目级配置,让每次会话都自带上下文。

安全:别让便利变成事故

三个真实风险。秘钥泄露:Agent 读仓库时可能把 .env 内容贴进日志或回复,务必在上下文里排除密钥文件、用 git-secrets 扫描。许可证风险:模型可能“记忆式”吐出某 GPL 代码片段,商用需许可证合规检查(如 FOSSA / ScanCode)。能力评测:别只看 demo,用 SWE-bench 这类真实 GitHub issue→PR 基准衡量模型解决真实工程问题的能力,它比“让它写一个快排”更接近生产难度。

踩坑提醒:把 AI 生成代码直接合并进主干是高危操作。所有模型改动必须过编译、测试、静态检查、人工 diff 四道关,再谈合并。

AI 编程不是把键盘交给模型,而是把更多时间还给设计、判断和验证。选对模式、喂对上下文、用 Spec 框住范围、拿测试与评审兑现价值——你交付的不是更多代码,而是更可信的代码。