AI 辅助编程实战手册:从 Prompt 工程到 Agent 工作流的效率跃迁
过去两年,AI 编程工具从"玩具"变成了"生产力"。但很多开发者仍然停留在"让 AI 写一段代码,然后自己改"的初级阶段。这篇文章不讲概念,只讲实操——从 Prompt 工程到 Agent 工作流,覆盖我在日常开发中验证过的 10+ 个高效实践。
一、Prompt 工程:别让 AI 猜你的意图
很多人抱怨 AI 生成的代码质量差,本质上是 Prompt 写得不好。把 AI 当成一个"懂所有语言但不知道你项目上下文的新同事",你就能写出更好的 Prompt。
1.1 上下文是 Prompt 的灵魂
一个好的 Prompt 应该包含以下要素:
| 要素 | 说明 | 示例 |
|---|---|---|
| 角色设定 | 定义 AI 的身份和专业领域 | "你是一个 Vue3 全栈开发专家" |
| 技术栈 | 明确使用的框架、库、版本 | "Vue 3.4 + Element Plus + Pinia" |
| 约束条件 | 代码风格、命名规范、性能要求 | "使用 Composition API,不要用 Options API" |
| 输出格式 | 指定返回格式 | "只输出代码,不要解释" 或 "先解释思路,再给代码" |
| 正例/反例 | 给参考示例 | "像这样处理错误…不要直接 console.log" |
来看一个实际对比。先看一个"菜鸟" Prompt:
帮我写一个用户登录功能。
再看一个"老手" Prompt:
你是一个 Vue3 全栈开发专家。请帮我实现一个用户登录功能:
技术栈:Vue 3.4 + Composition API + Element Plus + Pinia
后端:Express + JWT + MySQL
要求:
1. 前端:登录表单包含用户名、密码、记住我复选框
2. 表单校验:用户名 3-20 位字母数字,密码 6-20 位
3. 登录成功后存储 token 到 localStorage,跳转到 /dashboard
4. 登录失败显示 Element Plus 的 ElMessage 错误提示
5. 后端:密码使用 bcrypt 验证,JWT 有效期 7 天
6. 错误处理:区分"用户不存在"和"密码错误"
7. 使用 async/await,不要用 .then()
请分别输出前端 Login.vue 和后端 auth.js 的完整代码。
差距一目了然。好的 Prompt 让 AI 一次生成可用代码,差的 Prompt 需要反复沟通。
1.2 分步提问法:把大任务拆成小步骤
不要试图让 AI 一次性完成整个功能。我的经验是:先让 AI 帮你设计方案,再让它逐模块实现。
# 第一步:设计方案
我正在开发一个天然气安装工程管理系统,需要实现"多公司用户切换"功能。
请帮我设计技术方案,包括:
- 前端如何存储当前选中的公司 ID
- 后端 API 如何根据公司 ID 过滤数据
- 权限如何在不同公司间隔离
只输出方案,不要代码。
# 第二步:实现具体模块
根据上面的方案,帮我实现后端中间件,在每次请求中注入当前公司 ID。
这种"分步提问法"的好处是:每一步 AI 的注意力都集中在单一任务上,输出质量明显更高。我实测下来,分步提问比一次性提问的代码可用率高出 40% 以上。
1.3 纠错式对话:把 AI 的错误变成学习机会
AI 写的代码有问题时,不要直接说"不对",而是用以下模式:
# 错误做法
❌ "你写的代码不对,重写。"
# 正确做法
✅ "你这段代码在处理并发请求时会有竞态问题,因为第 23 行的全局变量
没有加锁。请用 Redis 分布式锁来解决,并解释为什么这样更安全。"
这种反馈方式有两个好处:一是 AI 能精准定位问题,二是你在纠正的过程中也在加深理解。把每次纠错当作 Code Review,你获得的不仅是修复后的代码,还有背后的原理。
二、AI 驱动的代码审查:让 AI 做你的 Reviewer
2.1 提交前自查清单
每次 git commit 之前,我都会用 AI 跑一遍自查:
请帮我审查以下代码,从这几个维度检查:
1. 安全漏洞:XSS、SQL 注入、敏感信息泄露
2. 性能问题:不必要的重渲染、内存泄漏、N+1 查询
3. 边界情况:空值处理、并发安全、超时处理
4. 代码规范:命名是否清晰、是否有冗余代码
5. 可维护性:是否有足够的注释、逻辑是否过于复杂
以下是代码:
[粘贴你的代码]
请按优先级(P0/P1/P2)列出发现的问题,并给出修复建议。
这个 Prompt 模板我已经用了半年,帮我在提交前拦截了不少低级的 NPE(空指针异常)和未处理的 Promise rejection。
2.2 用 AI 写单元测试
写测试是很多开发者的"痛点",但这恰恰是 AI 最擅长的事。给 AI 一个函数,它能瞬间生成覆盖各种边界情况的测试用例:
// 源函数
function calculateProjectCost(items, discountRate = 0) {
if (!Array.isArray(items)) throw new Error('items must be an array');
const subtotal = items.reduce((sum, item) => {
if (item.quantity < 0) throw new Error('quantity cannot be negative');
return sum + item.price * item.quantity;
}, 0);
if (discountRate < 0 || discountRate > 1) throw new Error('invalid discount rate');
return subtotal * (1 - discountRate);
}
给 AI 这个函数,让它用 Vitest 写测试,输出如下:
import { describe, it, expect } from 'vitest';
describe('calculateProjectCost', () => {
it('应该正确计算无折扣的总价', () => {
const items = [{ price: 100, quantity: 2 }, { price: 50, quantity: 3 }];
expect(calculateProjectCost(items)).toBe(350);
});
it('应该正确应用折扣率', () => {
const items = [{ price: 100, quantity: 1 }];
expect(calculateProjectCost(items, 0.2)).toBe(80);
});
it('传入非数组参数应抛出异常', () => {
expect(() => calculateProjectCost('invalid')).toThrow('items must be an array');
});
it('数量为负数应抛出异常', () => {
const items = [{ price: 100, quantity: -1 }];
expect(() => calculateProjectCost(items)).toThrow('quantity cannot be negative');
});
it('折扣率超出范围应抛出异常', () => {
expect(() => calculateProjectCost([], 1.5)).toThrow('invalid discount rate');
});
it('空数组应返回 0', () => {
expect(calculateProjectCost([])).toBe(0);
});
});
我现在的习惯是:写完一个工具函数,直接把代码喂给 AI 让它生成测试,然后一键粘贴到 __tests__ 目录。覆盖率从之前的 40% 提升到了 85%。
三、Agent 工作流:让 AI 自己跑完一整套任务
3.1 什么是 Agent 工作流?
传统 AI 对话是你一句我一句。Agent 工作流则是:你给一个目标,AI 自己规划步骤、执行操作、检查结果、修正错误,直到任务完成。整个过程你只需要看最终结果。
一个典型的 Agent 工作流包含四个阶段:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 规划 │ → │ 执行 │ → │ 验证 │ → │ 修正 │
│ Plan │ │ Execute │ │ Verify │ │ Fix │
│ 分解任务 │ │ 调用工具 │ │ 检查结果 │ │ 重试/调整 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
↑ │
└──────────────────────────────────────────────────┘
反馈循环
3.2 实战:用 Agent 工作流自动部署项目
以下是我在 FinBoost 项目中实际使用的 Agent 工作流 Prompt:
你需要完成以下部署任务,按照步骤逐一执行,每步成功后继续下一步,
失败则分析原因并重试(最多 3 次):
任务:将 FinBoost 项目部署到生产服务器
步骤:
1. cd /e/workbuddy && git pull origin main
- 检查是否有冲突,有冲突则列出冲突文件
2. npm run build
- 检查构建输出是否有错误
3. 将 dist/ 目录通过 scp 上传到服务器 154.23.185.226:/www/wwwroot/finboost/
- 上传前备份旧版本到 /www/backups/finboost-YYYYMMDD-HHmmss/
4. SSH 连接服务器,执行 pm2 reload finboost-api
- 检查 pm2 status 确认进程状态为 online
5. curl http://154.23.185.226:3004/api/health 验证服务可用
- 期望返回 {"status":"ok"}
每完成一步,用 ✅ 标记。遇到错误,用 ❌ 标记并描述错误信息。
这种工作流的核心价值在于:你不需要盯着屏幕看 AI 一步步操作,而是给它一个明确的流程和验证标准,让它自己跑。我现在的部署操作已经从"手动 15 分钟"缩减到"一条指令 + 喝杯咖啡回来看结果"。
3.3 Agent 工作流的设计原则
通过大半年的实践,我总结了设计 Agent 工作流的四条黄金法则:
| 原则 | 说明 | 反面示例 |
|---|---|---|
| 原子化步骤 | 每步只做一件事,结果可独立验证 | "构建并部署并测试"——出了问题不知道哪一步挂的 |
| 显式验证 | 每步都要有明确的成功标准 | "检查一下是否正常"——什么叫"正常"? |
| 失败重试 | 设定重试次数和退避策略 | 一次失败就放弃,实际上可能只是网络抖动 |
| 可观测性 | 每步输出结构化日志 | 只输出"成功"或"失败",看不到中间状态 |
四、AI 编程工具的选型与搭配
4.1 主流工具对比
| 工具 | 定位 | 强项 | 弱项 | 适合场景 |
|---|---|---|---|---|
| GitHub Copilot | IDE 内联补全 | 上下文感知强,补全精准 | 不理解项目全局架构 | 日常编码、写样板代码 |
| Cursor | AI-first IDE | 多文件编辑、Agent 模式 | 学习曲线、稳定性 | 复杂重构、跨文件修改 |
| Claude Code / Copilot Chat | 终端 Agent | 自主执行、工具调用 | 需要清晰指令 | 部署、调试、文件操作 |
| Windsurf | AI IDE | Flow 模式、级联推理 | 生态较新 | 全栈开发、项目搭建 |
| 通义灵码 | 国内 IDE 插件 | 中文理解好、免费 | 英文代码生成弱 | 国内开发者、中文项目 |
4.2 我的日常搭配
经过一年多折腾,我目前的 AI 编程工具栈是:
主力 IDE:VS Code + GitHub Copilot(内联补全)
复杂任务:Cursor(多文件 Agent 模式)
终端操作:Claude Code CLI(部署、日志分析、批量操作)
文档/翻译:ChatGPT(技术文档润色)
中文项目:通义灵码(作为 Copilot 的补充)
一个典型的工作流是:在 VS Code 里写业务代码,Copilot 实时补全;遇到需要跨多个文件重构的任务,切到 Cursor 用 Agent 模式批量处理;部署时在终端用 Claude Code CLI 一键执行。
五、AI 辅助编程的常见陷阱与规避
5.1 陷阱一:盲目信任 AI 的代码
AI 生成的代码看起来专业,但可能包含以下隐患:
- 过时的 API:AI 训练数据有截止日期,可能使用已废弃的 API
- 虚构的库:AI 会"编造"不存在的 npm 包或函数
- 安全漏洞:AI 倾向于生成"能跑就行"的代码,忽略安全实践
- 许可证问题:AI 生成的代码可能借鉴了 GPL 协议的代码
规避方法:永远用 npm docs 或官方文档验证 AI 引用的 API;对安全敏感代码(认证、加密、支付)必须人工审查;关键模块不要直接用 AI 生成的代码,而是让它给方案、自己写实现。
5.2 陷阱二:过度依赖导致能力退化
我见过一些初级开发者,离开 Copilot 就不会写代码了。这是最危险的陷阱。
规避方法:
# 正确的 AI 使用节奏
周一~周五:正常工作,AI 辅助(占编码量 60-70%)
周六上午:关掉所有 AI 工具,纯手写 2 小时代码
每周复盘:回顾这周 AI 帮了哪些忙、哪些地方应该自己多想
保持"脱离 AI 也能独立开发"的能力,这是底线。
5.3 陷阱三:忽视代码审查
AI 生成的代码如果不审查直接合并,相当于让一个"不懂你业务逻辑的实习生"直接提交到主分支。
规避方法:建立 AI 代码审查 Checklist:
□ 业务逻辑是否正确(AI 不理解你的业务规则)
□ 错误处理是否完善(AI 倾向于写 happy path)
□ 是否有硬编码的配置(数据库连接、API Key 等)
□ 日志记录是否充分(出问题时能快速定位)
□ 是否引入了不必要的依赖
□ 性能是否可接受(AI 可能会写 O(n²) 的循环)
六、效率提升的真实数据
最后分享一组我自己的数据。从 2025 年初开始系统化使用 AI 辅助编程,对比前后的效率变化:
| 指标 | 使用前 | 使用后 | 提升 |
|---|---|---|---|
| 新功能开发速度 | 平均 3 天/功能 | 平均 1.5 天/功能 | 50% ↑ |
| Bug 修复时间 | 平均 2 小时 | 平均 45 分钟 | 62% ↑ |
| 单元测试覆盖率 | ~40% | ~85% | 112% ↑ |
| 代码审查通过率 | ~70% | ~90% | 28% ↑ |
| 技术文档产出 | ~1 篇/月 | ~3 篇/月 | 200% ↑ |
| 新技术学习时间 | 平均 1 周 | 平均 2 天 | 70% ↑ |
数据不会说谎。AI 辅助编程不是替代开发者,而是把开发者从重复劳动中解放出来,让我们有更多时间思考架构、设计模式和业务逻辑。
七、结语:AI 时代开发者的核心竞争力
有人说 AI 会让程序员失业。我不同意。AI 淘汰的是"只会写 CRUD"的开发者,而真正有价值的能力——系统设计、业务理解、技术决策——AI 在可预见的未来都无法替代。
我总结 AI 时代开发者的三层竞争力:
第一层:会用 AI 工具 ← 入门(3 个月可达)
第二层:会设计 Agent 工作流 ← 进阶(6 个月可达)
第三层:知道 AI 该做什么、不该做什么 ← 核心(持续积累)
大部分人停留在第一层,少数人进入第二层。而真正的护城河在第三层:你比 AI 更清楚项目的业务上下文,更理解用户的真实需求,更能在模糊的需求中做出正确的技术取舍。
这篇文章分享的是我自己的实战经验,希望能帮你从第一层跨入第二层。如果你也有好用的 AI 编程技巧,欢迎在评论区交流。