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(或你)写实现
这种方式有两个额外好处:
- 写测试的过程逼迫你更清晰地定义需求,发现需求歧义
- 测试用例本身就是最好的上下文,供后续开发引用
六、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 中转,无需翻墙、按量计费。