--- title: "04-AI驱动开发新范式:VibeCoding与智能IDE" created: 2026-05-15 tags: - 博客 --- # AI驱动开发新范式:VibeCoding与智能IDE 如果你是 Java 开发者,你大概率已经用了很多年的 IntelliJ IDEA。写代码、运行、调试、部署——这套流程熟悉到肌肉记忆。 但在 2025-2026 年,有个新词开始频繁出现在程序员社区:**Vibe Coding**。它不是一种具体的工具或框架,而是一种全新的开发方式——**你用自然语言描述需求,AI 负责实现代码。** 更关键的是,这并不是取代程序员的叙事,而是正在发生的现实。 ## 你已经在做 Vibe Coding 了,只是没意识到 如果你用过 Cursor 或 Claude Code,你是否经历过这种场景: 你打开 AI 对话框,输入: > "在这个 Service 里加一个方法,根据用户 ID 查最近 30 天的订单,按金额降序排列,分页返回,还要算一下总金额。" AI 没有让你手动指定什么。它自己去找了 Order 实体类,看了字段定义,找到了对应的 Repository,了解了项目的 SQL 方言和分页方式,然后生成了完整的方法——包括 Service 层、Repository 查询、DTO 映射和分页逻辑。 你做的事情只是:**描述需求 → 审查代码 → 确认**。 这就是 Vibe Coding 的核心——**你关注"要什么"(What),AI 关注"怎么做"(How)。** ### 和传统开发的对比 | 维度 | 传统开发 | Vibe Coding | | --- | --- | --- | | **输入** | 精确的代码语法 | 自然语言描述需求 | | **关注点** | 语法正确、API 调用、设计模式 | 业务逻辑、用户体验、系统架构 | | **细节处理** | 手动写每一个方法 | AI 自动生成实现 | | **调试方式** | 打断点、看堆栈 | 描述症状,AI 分析并提出修复 | | **学习曲线** | 掌握语言和框架的精确知识 | 理解需求 + 读代码 + 审查质量 | | **速度** | 取决于打字速度和知识熟练度 | 取决于需求表达的清晰度 | Vibe Coding 不是"不用学编程了"。恰恰相反——你需要更强的代码审查能力、系统设计能力、需求分析能力。你不再是"写代码的人",而是"指导 AI 写代码的人"。 ## Vibe Coding 的典型工作流 来看一个完整的 Vibe Coding 工作流: ``` 阶段1: 需求描述(你主导) "我需要一个 REST API,功能是:用户上传一张图片, 系统用 OCR 识别图片中的文字,把文字翻译成英文,存到数据库, 然后返回翻译结果。" 不需要指定用什么 OCR 库、怎么调翻译 API、数据库表结构怎么设计。 阶段2: 上下文理解(AI 主导,自动化) AI 读取项目结构: - 识别出是 Spring Boot 3 + MyBatis Plus 项目 - 发现已有 FileUploadService 和 TranslationService - 理解项目使用 MySQL 和 MinIO 做文件存储 阶段3: 方案设计(AI 主导) AI 设计实现方案: - 新建 OcrImageController → 接收上传请求 - 复用 TranslationService.translate() 方法 - 新建 ImageRecord 实体和 Mapper - 使用 Tesseract OCR 库解析图片 阶段4: 代码生成(AI 主导) AI 逐个生成文件: - POST /api/ocr/upload 接口 - ImageRecord 实体类 + 数据库 DDL - OCR 处理 Service(调用 Tesseract) - 文件上传到 MinIO 的集成 阶段5: 审查与调整(你主导) 你审查生成的代码: - "Tesseract 对中文识别效果差,换成 PaddleOCR" - "数据库字段加个 source_language 和 target_language" - "翻译前先做文本清洗,去掉 OCR 噪点" AI 根据反馈逐条修改。 阶段6: 测试与修复(AI 主导,你确认) AI 编写单元测试 → 运行 → 发现失败 → 分析原因 → 修复 → 重新运行 你只需要在关键节点确认。 ``` 整个过程中,你没写一行代码,但功能做完了。你做的事情是:**定义需求、审查质量、给出反馈**。 ## 主流 AI 开发工具对比 截至 2026 年 5 月,AI 编程工具有这样几类: ### IDE 集成型(在编辑器里用 AI) | 工具 | 平台 | 特点 | 适合谁 | | --- | --- | --- | --- | | **Cursor** | VS Code 分支 | AI-first 编辑器,Tab 补全 + 内联编辑 + Chat | 全栈开发者 | | **GitHub Copilot** | VS Code/JetBrains | 最早的 AI 代码补全,IDE 原生集成 | 所有开发者 | | **Windsurf** | 独立 IDE | Cascade 模式,自动跨文件编辑 | 全栈开发者 | ### CLI 终端型(在命令行里用 AI) | 工具 | 公司 | 特点 | | --- | --- | --- | | **Claude Code** | Anthropic | Claude 4.7 驱动,终端原生,可操作文件/Shell/Git,支持自定义 Skills | | **Codex CLI** | OpenAI | o4-mini 驱动,本地运行,沙箱隔离,支持 AGENTS.md | | **Gemini CLI** | Google | Gemini 3.1 驱动,免费额度大,Google 生态集成 | ### 这几种该怎么选 **如果你习惯在 IDE 里写代码**: Cursor 或 Copilot 是最自然的选择。它们在编辑器中提供补全、Chat、内联编辑,不需要离开熟悉的环境。 **如果你要做大量跨文件的重构、搭建新项目、或者排查复杂 Bug**: CLI 型工具(Claude Code / Codex CLI)更适合。它们能在终端中自主导航项目、读取和修改多个文件、执行命令并检查结果。 **如果你主要用 Java + Spring 生态**: ``` IDE 写局部代码 → Copilot(IntelliJ 原生集成最丝滑) 重构/搭建/排查 → Claude Code(终端里描述需求,跨文件操作) 快速原型/学习 → Cursor(AI-first 体验最激进) ``` ## Claude Code 实战:一个 Java 开发者的日常 对于 Java 开发者来说,CLI 型工具的体验可能比较陌生。下面是一个真实的 Claude Code 使用场景: ``` # 场景1:需求驱动的功能开发 $ claude > 在这个 Spring Boot 项目中加一个接口: > GET /api/users/{id}/order-summary > 返回这个用户的历史订单汇总,包括: > - 总订单数 > - 总消费金额 > - 最常购买的商品分类 top3 > - 月均消费趋势(最近6个月) > 用现有的 Order 和 OrderItem 表,不需要新建表。 # Claude Code 会做的事: # 1. 找到 UserController 或相关 Controller # 2. 读取 Order 和 OrderItem 的实体定义 # 3. 读取项目使用的 ORM(JPA/MyBatis) # 4. 设计 SQL 查询逻辑 # 5. 创建 DTO 类(OrderSummaryResponse) # 6. 在 Service 层实现计算逻辑 # 7. 在 Controller 添加端点 # 8. 运行项目验证编译通过 # 场景2:Bug 排查 $ claude > 用户反馈 /api/orders/create 接口偶尔返回 500, > 错误日志显示 "DataIntegrityViolationException"。 > 帮我排查可能的原因并修复。 # Claude Code 会做的事: # 1. 读取 OrderController 的 create 方法 # 2. 追踪 Service → Repository 的调用链 # 3. 检查实体类的字段约束(@Column nullable, unique 等) # 4. 查找哪个字段可能违反约束 # 5. 分析是什么输入导致了这个问题 # 6. 提出修复方案并实施 # 场景3:代码重构 $ claude > 把 PaymentService 里的微信支付和支付宝支付逻辑 > 重构为策略模式。保持对外接口不变,所有现有测试通过。 # Claude Code 会做的事: # 1. 读取 PaymentService 完整代码 # 2. 分析微信/支付宝各自不同的处理逻辑 # 3. 设计 PaymentStrategy 接口 # 4. 提取 WechatPaymentStrategy 和 AlipayPaymentStrategy # 5. 修改 PaymentService 使用策略工厂 # 6. 运行现有测试确保不破坏功能 ``` ## AGENTS.md / CLAUDE.md:让 AI 理解你的项目 Vibe Coding 有一个前提——AI 需要了解你的项目上下文。如果每次都要从零开始解释项目结构,效率会大打折扣。 **AGENTS.md**(或 **CLAUDE.md**)就是解决这个问题的。这是一个放在项目根目录的 markdown 文件,包含: ``` # AGENTS.md ## 项目概述 这是 XX 电商平台的后端服务,基于 Spring Boot 3.x + MyBatis Plus。 ## 技术栈 - Java 17, Spring Boot 3.2, MyBatis Plus 3.5 - MySQL 8.0, Redis 7, MinIO (文件存储) - Maven 管理依赖 ## 项目结构 - controller/ → REST API 层(返回统一响应体 ApiResponse) - service/ → 业务逻辑层(接口+实现分离) - mapper/ → 数据访问层(MyBatis Plus BaseMapper) - entity/ → 数据库实体 - dto/ → 数据传输对象(request/response 分开) - config/ → Spring 配置类 ## 编码规范 - Controller 只做参数校验和路由,不写业务逻辑 - Service 层处理所有业务逻辑和事务 - 异常统一用 GlobalExceptionHandler 处理 - API 响应统一包装为 ApiResponse {code, message, data} - 数据库时间字段用 LocalDateTime,DTO 中用 String 传输(ISO格式) ## 关键约定 - 任何涉及金额的计算,必须用 BigDecimal,禁止用 float/double - 数据库查询必须在 Mapper 层,不要在 Service 里拼接 SQL - 所有外部 API 调用必须设置超时时间(连接 5s,读取 30s) - 敏感信息(手机号、身份证)在日志中必须脱敏 ``` 有了这个文件,AI 从一开始就"懂"你的项目。Codex CLI 会读取 AGENTS.md,Claude Code 会读取 CLAUDE.md,Cursor 会读取 .cursorrules。 **写 AGENTS.md 比写文档重要**。传统文档是人看的,写完就过时。AGENTS.md 是 AI 看的,每次对话都会用,所以要保持更新。 ## Spec-driven Development:更进一步 Vibe Coding 的进阶是 **Spec-driven Development(规格驱动开发)**。核心想法是:**在写代码之前,先写一份详细的规格说明书(Spec),然后让 AI 严格按照 Spec 来实现。** ### 为什么需要 Spec 直接跟 AI 说"帮我做一个用户登录功能"有几个问题: 1. **理解偏差**:AI 可能用 JWT,而你想要 Session。AI 可能做成用户名登录,而你想要邮箱登录。 2. **遗漏细节**:错误处理、密码加密、登录限流、验证码——这些非功能性需求在口头描述中容易被忽略。 3. **不可复现**:同一个需求换个说法,AI 可能做出不同的实现。 Spec 就是给 AI 的"合同"——写清楚验收标准,AI 按标准交付。 ### Spec 长什么样 ```typescript # Spec: 用户登录功能 ## 功能概述 实现用户名/密码登录,返回 JWT Token,支持登录限流。 ## 接口定义 POST /api/auth/login - Request: { "username": string, "password": string } - Response: { "token": string, "expiresIn": number } - 错误: 401 用户名或密码错误, 429 登录过于频繁 ## 业务规则 - BR1: 用户名不区分大小写 - BR2: 密码使用 BCrypt 加密存储和比对 - BR3: 同一 IP 每分钟最多尝试 5 次,超过返回 429 - BR4: 登录成功后返回 JWT,有效期 24 小时 - BR5: JWT 中包含 userId、username、roles ## 数据模型 - 使用现有 users 表(id, username, password_hash, status) - status=0 的账户不允许登录,返回"账户已禁用" ## 安全要求 - SR1: 登录失败时不区分"用户不存在"和"密码错误" - SR2: 敏感日志(登录失败原因)只记录到审计日志,不输出到应用日志 - SR3: JWT Secret 从环境变量读取,不允许硬编码 ## 测试用例 - TC1: 正确用户名和密码 → 200 + token - TC2: 错误密码 → 401 - TC3: 不存在用户 → 401 - TC4: 连续失败 5 次 → 429 - TC5: 禁用账户 → 401(提示"账户已禁用") ``` 有了这份 Spec,你交给 Claude Code 或任何 AI 工具,它就有了明确的验收标准。审查代码时,也可以对照 Spec 逐项检查。 ### Spec-driven 的完整流程 ``` 需求分析 → 你写 Spec(定义"要什么") ↓ Spec 审查 → AI 审查 Spec 完整性(有没有遗漏的边界条件) ↓ 代码生成 → AI 按照 Spec 逐条实现 ↓ 测试生成 → AI 根据 Spec 中的测试用例生成测试代码 ↓ 审查验收 → 你对照 Spec 审查代码和测试结果 ↓ Spec 归档 → Spec 和代码一起提交到 Git ``` 这套流程的核心变化是:**Spec 成为代码之前的"第一产物"**。代码是可变的实现细节,Spec 才是你真正要的东西。 ## Vibe Coding 的最佳实践 经过一年多的实践,社区总结出了几条经验: ### 1. 小步快跑,不要一口吃成胖子 ``` ❌ 错误做法: "帮我做一整个电商后台管理系统" ✅ 正确做法: "先做用户列表页,包含分页和搜索。" → 审查确认 → "好,现在加用户详情页。" → 审查确认 → "现在加用户编辑功能。" ``` 每完成一小步就审查,发现偏差及时纠正。别等 AI 生成了几千行代码再回头看——那时候你已经看不懂了。 ### 2. 教会 AI 你的偏好,而不是每次都纠错 ``` ❌ 每次都说: "不要用 Lombok,用显式的 getter/setter" "不要用 @Autowired 字段注入,用构造器注入" ✅ 写进 CLAUDE.md: ## 编码偏好 - 禁止使用 Lombok,所有 getter/setter/constructor 显式编写 - 依赖注入统一使用构造器注入,禁止 @Autowired 字段注入 - 日志使用 @Slf4j(允许这个 Lombok 注解) ``` 把偏好写进项目配置里,一劳永逸。 ### 3. 让 AI 写测试,不是你来写 AI 最擅长的事情之一就是生成测试用例。让它为刚生成的代码写测试,运行不过就让它自己修。 ``` $ claude > 为刚才创建的 OrderSummaryService 写单元测试。 > 覆盖正常场景、空订单、大数量订单三个情况。 > 跑完测试如果有失败的,直接修复。 ``` ### 4. 始终审查 AI 生成的代码 **绝不盲目信任 AI 的代码。** 即使它看起来正确,也要审查: - 有没有注入漏洞(SQL 拼接、XSS) - 有没有性能陷阱(N+1 查询、未建索引) - 有没有线程安全问题(共享可变状态) - 有没有边界处理遗漏(null 值、空集合、超大输入) AI 能写出语法正确、逻辑通顺的代码,但它不保证安全和性能。审查的责任在你这。 ### 5. 用 Git 做安全网 在让 AI 做大规模改动前,先提交当前代码。这样如果改坏了,一个 `git reset --hard` 就能回来。 ``` git add -A && git commit -m "checkpoint: before AI refactoring" # ... 让 AI 改代码 ... git diff # 仔细审查改动 # 如果满意就保留,不满意就 reset ``` ## 这改变了什么,没改变什么 **改变的**: - 写代码的速度(快 5-10 倍是常见反馈) - 学习新技术栈的门槛(AI 帮你填语法细节) - 开发的重心(从"怎么写"到"写什么") **没改变的**: - 系统设计的核心能力(AI 不会替你决定架构) - 代码审查的重要性(反而更重要了) - 领域知识的价值(AI 不理解你的业务,你才理解) - 调试能力的需求(AI 生成的代码同样有 Bug) > 一句话总结 Vibe Coding:**你的价值不再是你敲键盘的速度,而是你判断什么值得做的能力。** ## 小结 **Vibe Coding**:用自然语言描述需求,AI 负责实现代码。你关注 What,AI 关注 How。 **主流工具**: - IDE 型:Cursor、Copilot、Windsurf(在编辑器里用 AI) - CLI 型:Claude Code、Codex CLI、Gemini CLI(在终端里让 AI 自主操作) **AGENTS.md / CLAUDE.md**:放在项目根目录的 AI 上下文文件,让 AI 从一开始就懂你的项目 **Spec-driven Development**:写代码之前先写规格说明书,AI 严格按 Spec 实现,你对照 Spec 验收 **最佳实践**: 1. 小步快跑,逐步审查 2. 把偏好写进配置文件,一劳永逸 3. 让 AI 写测试,自己盯质量 4. 始终审查 AI 生成的代码 5. Git 是安全网——大规模改动前先 commit 下一篇接着聊聊 **Computer Use 与 Agent 安全**(AI 操作浏览器和电脑的技术、安全沙箱机制、Prompt 注入防御)。