周复盘:把 AI 当实习生,还是当工程搭档?

0 阅读13分钟

在这里插入图片描述

开篇

这两周,我们已经做了不少事情:

  • 盘点自己的开发工作流。
  • 搭建 AI 编程工作台。
  • 学习如何写高质量 Prompt。
  • 让 AI 补全需求、拆解任务和先写方案。
  • 用 AI 导览陌生项目。
  • 审查 AI 生成的代码。

看起来,我们已经掌握了很多技巧。

但技巧越多,越容易出现一个新的问题:

我到底应该把 AI 当成什么?

有人把 AI 当作一个“高级搜索框”。

遇到问题就问一句,得到答案就结束。

有人把 AI 当作“自动写代码工具”。

需求粘贴进去,代码复制出来,出了问题再继续修补。

还有人把 AI 当作一名“不会犯错的高级工程师”。

只要模型给出了完整方案,就默认它已经理解了项目和业务。

我更愿意把这几种使用方式概括成两个比喻:

把 AI 当实习生
        VS
把 AI 当工程搭档

这两个比喻不是为了给 AI 分级,而是为了帮助我们看清自己的协作方式。

如果你把 AI 当实习生,重点是:

给任务
  ↓
给上下文
  ↓
检查结果
  ↓
指出问题
  ↓
让它继续修改

如果你把 AI 当工程搭档,重点则会进一步升级:

共同澄清目标
  ↓
共同拆解问题
  ↓
共同比较方案
  ↓
共同验证结果
  ↓
共同沉淀知识

今天做一次阶段复盘,看看这两种方式到底有什么区别,以及中级开发者应该怎样逐步建立更成熟的 AI 协作模式。

本文不会讨论什么

本文不是要给 AI 赋予人格,也不是要把开发者和模型放在完全平等的位置上。

本文不会:

  • 认为 AI 可以替代开发者承担最终责任。
  • 建议把所有任务都交给 AI 处理。
  • 认为只要 Prompt 足够好,就不需要测试和评审。
  • 把“工程搭档”理解成无条件相信 AI 的输出。
  • 讨论某个具体模型的排名或工具选择。

本文只讨论一个工程问题:

我们应该如何组织和管理与 AI 的协作,才能让它从一次性工具变成稳定的生产力系统?

一、把 AI 当实习生,通常是什么样

“实习生”这个比喻不代表能力低,而是强调:

  • 它需要明确任务。
  • 它缺少完整上下文。
  • 它可能误解隐含规则。
  • 它的结果必须经过检查。
  • 它需要根据反馈迭代。

很多 AI 编程场景,其实都适合先采用这种工作方式。

1. 任务必须足够具体

不要只说:

帮我实现用户管理。

可以改成:

请在现有用户模块中新增“修改手机号”能力。

范围:
- 只允许当前用户修改自己的手机号。
- 修改前需要验证旧手机号。
- 修改成功后记录安全日志。

不在范围内:
- 不修改登录流程。
- 不修改找回密码流程。
- 不新增短信供应商。

请先输出实现方案和待确认问题,暂时不要写代码。

任务越清楚,AI 越容易产出可检查的结果。

2. 上下文不能只靠猜

实习生不知道项目约定时,需要我们主动提供信息:

项目使用 Java + Spring Boot。
业务异常统一使用 DomainException。
用户数据由 UserService 管理。
手机号修改需要经过 AuthService 验证。
修改后需要补充 Service 层单元测试。

如果上下文不完整,就应该允许 AI 先提问,而不是要求它直接补全。

3. 结果必须有验收标准

一个好的任务交付,不是“代码看起来完整”,而是能够回答:

  • 哪些场景应该成功?
  • 哪些场景应该失败?
  • 失败后数据是否保持不变?
  • 是否需要日志、通知或审计?
  • 如何通过测试证明实现正确?

把这些标准写清楚,AI 才知道什么叫完成。

二、把 AI 当实习生的优点和局限

优点:边界清晰,风险可控

在这种模式下,开发者始终掌握:

  • 任务范围。
  • 技术方案。
  • 修改权限。
  • 验收标准。
  • 最终合并决定。

适合以下场景:

  • 第一次接触 AI 编程。
  • 修改生产代码。
  • 处理高风险业务。
  • 项目上下文还没有整理好。
  • 团队需要逐步建立信任。

局限:容易陷入“你写我改”

如果每轮协作都只是:

你写代码
  ↓
我发现问题
  ↓
你再修代码
  ↓
我继续发现问题

AI 就会变成一个被动执行器。

它可能完成很多局部动作,但无法帮助你发现更高层次的问题:

  • 当前任务是否值得做?
  • 有没有更小的修改范围?
  • 方案是否会增加未来维护成本?
  • 这个问题是不是应该通过流程或数据约束解决?

所以,“实习生模式”适合控制风险,但不应该是协作的终点。

三、把 AI 当工程搭档,意味着什么

工程搭档不是“让 AI 自己做决定”。

它意味着我们把 AI 提前放进工程思考过程,而不是只在最后让它生成代码。

1. 从交付任务升级为共同理解问题

可以先这样开始:

这是当前需求和项目上下文。

请先不要给实现代码。
请帮助我确认:
1. 这个问题真正要解决的是什么?
2. 当前描述中有哪些隐含假设?
3. 可能影响哪些模块和用户行为?
4. 有哪些不做的事情?
5. 怎样定义本次任务完成?

这一步不是让 AI 替我们做产品决策,而是借助它扩大问题观察范围。

2. 从“给出答案”升级为“比较选择”

当任务存在多个方案时,不要直接问:

哪个方案最好?

可以要求它展示取舍:

请比较以下三个方案:
1. 在现有 Service 中增加逻辑。
2. 新增独立领域服务。
3. 通过异步事件处理。

请从以下角度分析:
- 实现复杂度
- 对现有代码的影响
- 数据一致性
- 性能
- 测试难度
- 后续扩展成本

最后给出推荐方案,但说明推荐依赖哪些前提。

工程判断的价值不只是选择一个答案,而是知道这个答案在什么前提下成立。

3. 从“写完代码”升级为“共同验证”

搭档关系必须包含反馈闭环:

方案
  ↓
实现
  ↓
测试
  ↓
运行结果
  ↓
问题反馈
  ↓
修复和复盘

没有真实测试、日志和运行结果,AI 只能根据静态上下文推测。

因此可以把结果反馈给它:

这是测试输出和运行日志。

请不要直接修改代码。
请先判断:
1. 失败发生在哪个阶段?
2. 当前现象与预期有什么差异?
3. 哪些原因可以从日志直接确认?
4. 哪些只是可能原因?
5. 下一步最小验证动作是什么?

这比直接说“帮我修复这个报错”更接近工程排障。

四、两种模式的核心区别

对比维度AI 实习生AI 工程搭档
参与时间需求明确后需求澄清阶段就参与
主要任务执行具体工作共同分析和执行
上下文方式开发者主动提供AI 协助发现上下文缺口
输出重点代码和局部结果方案、取舍、代码和验证
反馈方式指出错误并修改用证据共同定位问题
风险控制依靠人工检查依靠流程、证据和检查
知识沉淀结果用完即丢形成 Prompt、文档和检查卡
最终责任开发者承担仍由开发者承担

需要特别强调:

工程搭档模式不是减少人工审查,而是把人工判断前移,并且让 AI 参与更多有价值的思考环节。

五、中级开发者最适合采用的协作分层

我不建议一开始就把所有决策交给 AI。

更稳妥的方式,是根据任务风险分层。

第一层:执行型任务

AI 可以直接协助完成:

  • 生成样板代码。
  • 补充字段映射。
  • 编写简单查询。
  • 生成基础测试。
  • 整理注释和文档。
  • 做格式化和局部重命名。

这类任务的共同特点是:

  • 规则明确。
  • 修改范围小。
  • 结果容易验证。
  • 失败成本较低。

第二层:分析型任务

AI 可以参与:

  • 需求拆解。
  • 代码库导览。
  • 调用链分析。
  • 方案比较。
  • 风险识别。
  • 测试矩阵设计。

但输出必须经过开发者确认。

第三层:决策型任务

以下事项不应该直接交给 AI 决定:

  • 核心业务规则。
  • 权限模型。
  • 数据迁移策略。
  • 资金和支付流程。
  • 安全边界。
  • 生产事故处置。
  • 跨团队架构取舍。

AI 可以提供选项和风险分析,但最终决策需要由有业务和系统上下文的人完成。

可以用这张表快速判断:

任务类型AI 可以做什么开发者必须负责什么
执行型生成和修改验证范围和结果
分析型提问、归纳和比较确认事实和取舍
决策型提供备选方案和风险做最终判断和承担责任

六、真正高效的 AI 协作,不是少说话

很多人以为 AI 提效就是减少输入。

实际上,真正高效的协作往往需要更多高质量交流:

说明目标
  ↓
补充上下文
  ↓
确认理解
  ↓
限定范围
  ↓
请求最小实现
  ↓
执行验证
  ↓
反馈证据

表面上看,Prompt 变长了。

但总耗时通常会下降,因为它减少了:

  • 反复返工。
  • 错误方向的代码。
  • 跨模块误修改。
  • 测试阶段才发现的需求遗漏。
  • 线上才暴露的边界问题。

可以把一次任务的总成本理解为:

总成本
=
前期澄清成本
+
实现成本
+
返工成本
+
验证成本
+
事故成本

适当增加前期澄清,往往可以降低后面的返工和事故成本。

七、我会固定保留的 7 条 AI 协作原则

原则 1:先让 AI 复述,再让它实现

如果目标都没有对齐,代码越多,返工越多。

原则 2:先给最小上下文,再按需补充

不要一开始把整个仓库丢给 AI,也不要只给一句需求。

原则 3:事实、推测和建议必须分开

AI 的“应该”“通常”“可能”都需要进一步验证。

原则 4:复杂任务先要方案,简单任务至少要范围

不是所有修改都需要完整设计,但所有修改都应该有边界。

原则 5:让 AI 提前暴露风险,而不是等报错后再修

边界、权限、并发、异常和测试都应该在代码生成前被讨论。

原则 6:用测试和运行结果反馈,不用情绪描述反馈

“还是不对”不如提供输入、日志、堆栈和实际结果。

原则 7:把有效对话沉淀成团队资产

好的 Prompt、检查清单、调用链和排障流程,不应该只停留在一次聊天里。

八、从“会用 AI”升级到“会管理 AI 协作”

前 14 天的学习重点,不是记住多少 Prompt,而是建立一套稳定的协作节奏。

我会把它整理成 5 个步骤:

第一步:定义目标

这次任务要改变什么?
用户能观察到什么结果?
哪些事情明确不做?

第二步:准备上下文

相关代码在哪里?
项目约定是什么?
已有测试和限制是什么?

第三步:设计交互

这次需要 AI 执行、分析,还是比较方案?
需要一次完成,还是分阶段完成?

第四步:建立验证

什么现象说明完成?
哪些边界和风险必须覆盖?
用什么测试、日志或运行结果证明?

第五步:沉淀资产

这次协作中,哪些 Prompt、检查项和结论可以复用?

当这 5 步逐渐固定下来,AI 才真正进入你的开发系统。

九、一个可以直接复用的协作启动 Prompt

以后接到一个中等复杂度的开发任务,我会先使用下面这段 Prompt:

请作为我的工程协作助手,协助我完成下面的开发任务。

任务:
<填写需求>

项目上下文:
<填写技术栈、相关模块、已有约定和限制>

请先不要写代码,先完成以下工作:
1. 用自己的话复述任务目标。
2. 列出本次范围和明确不在范围内的内容。
3. 区分已知事实、推测和待确认项。
4. 指出需要阅读的文件和项目上下文。
5. 列出可能的边界、异常、安全和并发风险。
6. 给出可选实现方案及取舍。
7. 设计验收标准和测试矩阵。

输出要求:
- 不确定的内容单独列出。
- 不要把通用最佳实践冒充项目事实。
- 没有得到确认前,不生成完整代码。
- 最后给出进入实现阶段前的最小确认清单。

这段 Prompt 的作用不是让 AI 直接完成全部工作,而是建立一次有边界的工程协作。

十、我的第二周复盘检查卡

[ ] 我没有把 AI 当成无条件正确的高级工程师
[ ] 我能明确告诉 AI 当前任务的目标和范围
[ ] 我会主动提供项目约定和验收标准
[ ] 我允许 AI 先提问,而不是强迫它立即写代码
[ ] 我能区分执行型、分析型和决策型任务
[ ] 我会要求 AI 说明依据、风险和触发条件
[ ] 我使用测试、日志和运行结果进行反馈
[ ] 我没有把最终责任交给 AI
[ ] 我把有效 Prompt 和检查清单保存下来
[ ] 我正在形成一套可重复的 AI 协作流程

如果只能做到“让 AI 写代码”,说明还停留在工具使用阶段。

如果已经能够让 AI 参与澄清、分析、验证和复盘,才开始进入工程协作阶段。

十一、总结

把 AI 当实习生,强调的是:

明确任务
提供上下文
检查结果
持续反馈

把 AI 当工程搭档,强调的是:

共同澄清问题
共同分析方案
共同识别风险
共同验证结果
共同沉淀方法

对于中级开发者来说,最稳妥的选择不是二选一,而是根据任务复杂度进行切换:

  1. 简单、局部、易验证的任务,可以让 AI 承担更多执行工作。
  2. 中等复杂度任务,让 AI 参与分析、方案和测试设计。
  3. 高风险和决策型任务,让 AI 提供辅助判断,但由开发者掌握最终决定。

请记住:

AI 编程的进阶,不是让 AI 替你做更多决定,而是让你更有能力管理目标、上下文、风险和验证。

下一篇文章,我们进入一个更贴近真实生产环境的场景:

用 AI 调试一个线上问题:从报错到根因定位。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注专栏。
也欢迎在评论区留言:你现在更常把 AI 当实习生,还是已经开始把它当工程搭档?


✍坚持原创,求关注,点赞,收藏