更新于

AI 结对编程实战指南:让 AI 真正成为你的副驾驶


“结对编程”这个概念在极限编程(XP)时代就已存在——两个工程师坐在一台电脑前,一人写代码,一人审查思路。AI 编程助手出现后,这种模式发生了质变:你可以随时召唤一个不疲倦、博览群书、响应毫秒级的”副驾驶”。但很多开发者用了半年 Copilot 或 Cursor 之后发现:AI 的建议质量时好时坏,自己似乎只是在”接受补全”而非真正结对。

本文要解决的问题是:如何设计工作流和提示词,让 AI 真正参与你的思维过程,而不只是一个高级自动补全

一、结对编程的两种模式:司机与导航

传统结对编程有”司机(Driver)“和”导航(Navigator)“两个角色。在 AI 结对中,这两种模式都可以复现:

模式一:你是司机,AI 是导航

你写代码,AI 实时审查逻辑,提出改进建议,指出潜在 bug。适合:你对业务逻辑了解更深,但想让 AI 帮你做代码质量把关。

工具:Cursor 的 Chat 面板(选中代码 + 问”这段逻辑有什么问题?”)、GitHub Copilot Chat。

模式二:AI 是司机,你是导航

你给出需求和约束,AI 生成代码骨架,你负责修正方向和审查细节。适合:快速原型、样板代码生成、不熟悉的技术栈。

工具:Claude Code 的 agentic 模式、Cursor Composer、Copilot Workspace。

关键原则:两种模式的切换应该是有意识的决策,而不是随机漂移。当你发现自己只是在按 Tab 键接受补全,说明已经失去”导航”的主动性,需要重新介入。

二、上下文管理:AI 结对最被忽视的环节

AI 的输出质量直接取决于它能看到多少相关上下文。大多数开发者在这一点上浪费了大量潜力。

坏的实践:直接问”帮我写一个用户注册功能”。

好的实践

我在用 FastAPI + SQLAlchemy + PostgreSQL 构建用户系统。
相关文件结构:
- models/user.py:User 模型,字段见下
- services/auth.py:现有登录逻辑
- schemas/user.py:Pydantic 模型

User 模型:
@dataclass
class User:
    id: UUID
    email: str
    hashed_password: str
    is_active: bool = True
    created_at: datetime

现在需要实现注册端点 POST /auth/register:
1. 接收 email + password
2. 检查 email 是否已存在
3. bcrypt 加密密码
4. 写入数据库,返回 201 + user_id
5. 邮件确认流程先不做

请按照 services/auth.py 的代码风格来写。

上下文的关键要素:技术栈、相关文件片段、约束条件、风格参考

Cursor 的上下文技巧

  • @file 引用:在 Composer 中用 @auth.py 直接引用文件,比复制粘贴更精准
  • @codebase 语义搜索:让 AI 自己找相关文件(适合大型项目)
  • .cursorrules:项目级别的持久指令,相当于一直在场的”架构师提醒”

三、任务拆解:驾驭 AI 生成大型功能

让 AI 一口气生成几百行代码通常效果不好。更有效的方式是分步骤、逐层深入

以实现一个”商品搜索 + 筛选 + 分页”功能为例:

第一步:先设计数据结构
"列出实现这个功能需要哪些数据模型字段和 API 端点,不用写代码,先给出设计方案"

第二步:生成接口定义
"按照上面的设计,写出 TypeScript 的接口类型和 API 契约"

第三步:逐个实现端点
"实现 GET /products 端点,先写基本查询,不含筛选逻辑"

第四步:添加筛选
"在上面的基础上,加入 category、price_range、in_stock 三个筛选参数"

第五步:添加分页
"加入基于游标(cursor-based)的分页,不用 offset 分页"

每一步结束后,你作为”导航”介入审查,确认方向正确再继续。这种方式比”一次性生成所有代码”的错误率低得多,也更容易定位问题。

四、代码审查:让 AI 帮你做 CR

AI 在代码审查方面的能力经常被低估。以下是几个高效的 CR 提示词模板:

安全性审查

审查以下代码,重点检查:SQL 注入、XSS、未经授权的资源访问、敏感数据泄露。
对每个问题给出:风险等级(高/中/低)、具体位置、修复建议。
[粘贴代码]

性能审查

这段代码会在高并发(估算 1000 QPS)下运行。
找出潜在的性能瓶颈,重点关注:N+1 查询、无索引字段查询、同步阻塞操作。
[粘贴代码]

可维护性审查

按照 SOLID 原则,指出以下代码中违反单一职责、开放封闭原则的地方,
并给出重构方向(不用写完整代码,给出思路即可)。
[粘贴代码]

表格展示不同 CR 场景的推荐工具:

场景工具提示词重点
提交前自检Claude Code / Cursor Chat安全 + 明显 bug
PR 互审辅助GitHub Copilot Chat风格一致性 + 逻辑漏洞
技术债评估Claude 长上下文架构问题 + 重构优先级
性能调优任意工具具体瓶颈 + 量化影响

五、测试驱动的 AI 结对

TDD(测试驱动开发)和 AI 结对有意想不到的协同:先让 AI 写测试,再让 AI(或你自己)写实现

# 第一步:描述行为,让 AI 写测试用例
"""
函数 calculate_discount(price, user_tier) 的行为规格:
- user_tier = "regular":无折扣
- user_tier = "silver":9折
- user_tier = "gold":8折
- user_tier = "vip":7折
- price 必须 > 0,否则抛出 ValueError
- 返回值精确到两位小数

请写 pytest 测试用例,覆盖正常路径和边界条件。
"""

# AI 生成测试后,你审查测试是否覆盖了真实需求
# 然后再让 AI(或你)写实现

这种方式有两个额外好处:

  1. 写测试的过程逼迫你更清晰地定义需求,发现需求歧义
  2. 测试用例本身就是最好的上下文,供后续开发引用

六、Claude Code 的 agentic 结对模式

Claude Code 的独特之处在于它可以直接读写文件、运行命令,实现真正的 agentic 结对。以下是一个典型的多步任务流:

# 示例:用 Claude Code 重构一个模块
claude "阅读 src/services/payment.py 的全部内容,
然后识别所有直接调用第三方 API 的位置,
将它们抽象为一个 PaymentGateway 接口,
原有逻辑封装为 StripeGateway 实现,
修改完成后跑一遍 pytest tests/test_payment.py,
确保测试全部通过。"

Claude Code 会依次执行:读文件 → 分析 → 修改 → 运行测试 → 报告结果。这是真正意义上的”自动化导航员”——你给方向,它执行并报告。

Claude Code 结对的适用场景

  • 大范围重构(跨多文件的命名规范统一、接口抽象)
  • 自动生成测试(分析现有代码,补全测试覆盖)
  • 依赖升级(识别 breaking changes,批量修复)
  • 文档生成(读代码,写 docstring 或 README 片段)

七、常见陷阱与应对

陷阱一:过度信任,不审查

AI 生成的代码可能包含逻辑错误或过时的 API 用法。规则:所有 AI 生成代码在提交前,必须逐行过一遍——至少像审查实习生的 PR 一样认真。

陷阱二:上下文污染

长对话中,早期的错误假设会”污染”后续建议。如果 AI 开始给出明显不对的建议,不要继续追问——开启新对话,重新提供干净的上下文。

陷阱三:依赖替代思考

结对编程的价值在于两个思维碰撞。如果你只是在被动接受 AI 的方案,说明你已经放弃了”导航”的角色。定期问自己:我同意这个方案吗?为什么?

陷阱四:忽视 AI 的”不知道”信号

当 AI 给出非常模糊或充满”可能”、“取决于”的回答时,通常意味着它对这个具体问题没有足够的信息。这时应该提供更多上下文,或者换一个更具体的问法。

八、相关阅读

想在 AI 结对编程中使用最新的 Claude、GPT-4o 等模型,YoTradeApi 提供稳定的多模型 API 中转,无需翻墙、按量计费。