金句:最好的 AI 编程工具不是执行你的命令,而是理解你的意图——就像一个好的架构师,听懂了你说的,也听懂了你没说的。
一、两种不同的 AI 编程哲学
在 AI 编程工具领域,存在两种根本不同的设计哲学:
哲学 A:指令执行派
- "你说什么,我做什么"
- 精确、可预测、安全
- 代表:早期 GitHub Copilot
哲学 B:意图理解派
- "你想要什么,我帮你实现"
- 灵活、主动、有时会超出预期
- 代表:Claude(Anthropic)、Windsurf(Codeium)
本讲我们深入分析这两款工具,以及"意图理解"如何改变你的开发工作流。
二、深入 Claude:不只是聊天模型
Claude 在编程领域的独特优势
很多开发者把 Claude 当作"更好的 ChatGPT",但这低估了它的价值。Claude 在编程领域有几个独特的能力:
1. 超长上下文处理(200K tokens)
Claude 3.5 Sonnet 支持 200K token 上下文窗口,相当于约 15 万行代码。这意味着:
- 可以一次性输入整个中型项目的代码库
- 可以分析完整的数据库 Schema + 业务逻辑
- 可以理解跨越多个文件的复杂依赖关系
2. 代码理解深度
Claude 在代码理解方面的表现通常优于同级别模型,特别是:
- 识别潜在的安全漏洞
- 理解设计模式的适用场景
- 分析代码的可维护性问题
3. "诚实"文化
Claude 被训练成更倾向于说"我不确定"而不是给出自信但错误的答案,这在代码领域尤为重要。
Claude API 编程工作流
场景:代码审查助手
import anthropic
client = anthropic.Anthropic(api_key="your-api-key")
def code_review(code: str, language: str, context: str = "") -> str:
"""
使用 Claude 进行代码审查
"""
prompt = f"""请对以下 {language} 代码进行专业的代码审查。
审查维度:
1. 正确性:逻辑是否有 Bug?边界情况是否处理?
2. 安全性:是否存在注入风险、数据泄露等安全问题?
3. 性能:是否有明显的性能问题?
4. 可维护性:代码是否清晰易读?命名是否语义化?
5. 最佳实践:是否遵循 {language} 的最佳实践?
项目上下文:
{context}
待审查代码:
```{language}
{code}
请用中文回复,每个维度给出具体的评分(1-5分)和改进建议。"""
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=2048,
messages=[{"role": "user", "content": prompt}]
)
return message.content[0].text
使用示例
code = """ def get_user(user_id): sql = f"SELECT * FROM users WHERE id = {user_id}" return db.execute(sql) """
review = code_review( code=code, language="Python", context="这是一个用户管理系统的查询接口,直接暴露在 REST API 层" ) print(review)
**Claude 的输出会包含**:
- 正确性:3/5 — 缺少空值检查
- ⚠️ 安全性:1/5 — **严重 SQL 注入漏洞**,user_id 直接插入 SQL 字符串
- 改进建议:使用参数化查询 `db.execute("SELECT * FROM users WHERE id = ?", (user_id,))`
---
## 三、深入 Windsurf:Agent 编程的先行者
Windsurf 由 Codeium 团队推出,它的核心创新是 **Cascade(瀑布流)系统**——一种真正的 Agent 编程模式。
### Windsurf vs Cursor 的关键差异
Cursor Composer 工作方式: 用户发出指令 → AI 规划任务 → 生成代码 → 等待确认 → 下一步
Windsurf Cascade 工作方式: 用户描述目标 → AI 持续执行 → 遇到问题自主决策 → 完成目标 ↑ ↑ 更少干预 更强自主性
### Cascade 的三个核心能力
**能力一:主动探索代码库**
不需要你用 @ 手动引用文件,Windsurf 会自主探索相关文件:
用户:"在用户注册后发送欢迎邮件"
Windsurf 自动做的事: → 搜索 UserService.ts,找到注册逻辑 → 搜索现有的邮件发送代码 → 查看 .env 文件中的邮件配置 → 找到测试目录,理解测试规范 → 然后在正确的位置插入代码
**能力二:终端命令执行**
Windsurf 可以直接在终端执行命令:
- 安装依赖(npm install / pip install)
- 运行测试(npm test)
- 启动开发服务器
- 查看运行日志
**能力三:自我修正循环**
代码生成 → 运行测试 → 测试失败 → 分析原因 → 修改代码 → 再次运行
这个自我修正循环可以运行多轮,直到测试通过。
---
### Windsurf 实战:实现完整的认证系统
**提示词**:
使用 FastAPI + SQLAlchemy 实现 JWT 认证系统:
- POST /register:用户注册(email + password)
- POST /login:登录,返回 access_token
- GET /me:获取当前用户信息(需要认证)
- 密码使用 bcrypt 加密
- 错误处理要完善
- 生成对应的单元测试
**Windsurf 执行过程**(实际日志):
[Cascade] 分析项目结构... [Cascade] 未找到现有数据库配置,创建 database.py [Cascade] 创建用户模型 models/user.py [Cascade] 创建认证路由 routers/auth.py [Cascade] 添加 JWT 工具函数 utils/jwt.py [Cascade] 更新 main.py,注册新路由 [Cascade] 运行:pip install python-jose[cryptography] passlib[bcrypt] [Cascade] 创建测试文件 tests/test_auth.py [Cascade] 运行测试:pytest tests/test_auth.py [Cascade] ❌ 测试失败:TokenExpiredError 未处理 [Cascade] 修复 utils/jwt.py 中的异常处理 [Cascade] 再次运行测试... [Cascade] ✅ 所有测试通过(7/7)
整个过程用户只输入了一次提示词。
---
## 四、意图理解的背后:AI 如何猜到你的"言外之意"?
**技术原理**:现代 LLM 通过以下几个层面理解意图:
1. **字面层**:你明确说了什么
2. **语境层**:当前代码库的技术栈和模式
3. **惯例层**:行业最佳实践和常见模式
4. **推断层**:基于上下文推断未说出的需求
**示例**:
用户说:"给 User 模型添加 soft delete 功能"
字面:添加软删除 语境:项目用 Django + PostgreSQL 惯例:Django 软删除通常用 is_deleted 字段 + Manager 过滤 推断:
- 需要修改所有查询,排除已删除记录
- 需要保留 deleted_at 时间戳(审计需要)
- 可能需要一个 restore() 方法
- Admin 界面可能需要特殊处理
优秀的 AI 工具会把这四个层面都考虑进去,而不只是字面执行。
---
## 五、如何让 AI 更好地理解你的意图
**技巧一:描述目标,而不是步骤**
❌ 低效:"在 User 表添加一个 is_deleted 字段,然后修改查询方法" ✅ 高效:"给 User 模型实现软删除功能,要符合项目现有的编码风格"
**技巧二:提供背景,而不是只说需求**
❌ 低效:"优化这个查询" ✅ 高效:"这个查询在数据量超过 10 万时响应超过 3 秒, 用户访问频率很高(每分钟约 1000 次), 请优化它的性能"
**技巧三:说明约束,而不是假设 AI 知道**
❌ 低效:"实现用户搜索功能" ✅ 高效:"实现用户搜索功能,要求: 1. 不能引入新的搜索依赖(预算限制) 2. 支持中文搜索 3. 响应时间 < 200ms(P99)"
---
## 六、工具选择指南总结
需求场景 推荐工具 ───────────────────────────────────────── 需要精细控制每一步 Cursor 需要快速完成完整功能 Windsurf 需要代码审查和安全分析 Claude API 需要团队规范统一 GitHub Copilot 需要理解复杂业务逻辑 Claude (长上下文) 需要自动化测试驱动开发 Windsurf Cascade
---
**章节小结**:Claude 的超长上下文和深度代码理解让它成为复杂项目分析的利器;Windsurf 的 Cascade 系统则代表了 Agent 编程的未来——你不需要描述每一步,只需要描述你想要的结果。理解"意图驱动"而非"指令驱动",是 Vibe Coding 进阶的关键一步。