免费公开课程 · 5/40
第 5 章 放弃幻想:大模型是"超级实习生",不是资深程序员
本章目标
必交产物:监督闭环记录
O1 · 能够追踪“生成候选”“工程审查”“证据放行”之间的前向与反馈路径(产物:监督闭环记录)
证据:监督闭环记录画出“生成候选”“工程审查”“证据放行”的前向路径和返回路径
O2 · 能够构造监督闭环记录,注明每轮输入、判断和回写证据(产物:监督闭环记录)
证据:监督闭环记录为每一环写明输入、判断、输出和负责人
O3 · 能够把一次模型生成转化为含审查与放行证据的监督闭环(产物:监督闭环记录)
证据:产物记录一轮候选、审查发现、修正和放行依据
前置学习:第 4 章 AI 编码是什么,不是什么
初学者路径
本章迁移任务是:能够把一次模型生成转化为含审查与放行证据的监督闭环。先按图中的“反馈闭环”关系完成监督闭环记录的第一项证据,再逐项核对责任人与判断标准。
有经验者路径
先用当前项目完成这一任务:能够把一次模型生成转化为含审查与放行证据的监督闭环。提交监督闭环记录后,再对照正文复核关系类型、缺失证据和授权边界。
图解文字说明
图先从“生成候选”前向经过“工程审查”到“证据放行”,再以虚线返回起点。前向箭头产生结果,返回箭头承载观察和修正;若结果没有回写到下一轮输入,流程只是单程而不是闭环。
关系语义:三环先沿前向路径产生结果,再由返回路径把观察写回;没有回写就不构成闭环。
**公开课程改编版。**正文依据内部教材整理,保留概念、流程与示范。案例规模、用时、提升比例及目标阈值均用于教学,不是本站交付成果或通用标准。工具、平台与技能描述需在实际环境核验。提示词不能授予权限;重试次数不自动触发恢复;恢复须先保护工作并确认目标、共享状态和外部数据影响。
课程讲解
5.1 超级实习生的三大特征:知识渊博但毫无经验、执行力爆表但毫无责任心、逻辑自洽但极易确认偏误
我们之所以在与 AI 的协作中陷入困境,根源在于一个普遍的误解:我们试图与大模型”拟人化”相处,把它想象成一位经验丰富的资深程序员。我们期望它能理解上下文、预见风险、权衡利弊,并对最终的代码质量负责。
这是一个致命的错误。
大模型不是程序员,它更像一个”超级实习生”。这个比喻或许有些冒犯,但它能极其精准地揭示 AI 编程的本质。让我们来详细解剖这位”超级实习生”的三大特征:
特征一:知识渊博,但毫无经验。
这位实习生堪称”行走的维基百科”——他记住了几乎所有主流框架的 API 文档、背下了开源社区的海量代码、通读了问答网站的全部精华。你问他如何用 Go 语言实现一个 gRPC 服务,他能立刻给你一套完整的代码骨架。在”知识广度”和”记忆力”上,他秒杀任何人类程序员。
然而,他毫无”经验”。经验不是”知道”一个东西,而是”踩过”一个坑。经验是知道那个看似平坦的业务场景下藏着一个性能陷阱;是知道某个看似无害的第三方库在特定操作系统下会引发内存泄漏;是知道产品经理口中的”只是一个小改动”背后可能牵涉三个模块的联动重构。
一个典型的差距:你让 AI 给 Web 应用添加”记住我”功能。AI 的”知识”让它立刻生成把认证令牌存在 localStorage 的方案;而人类工程师的”经验”看到 localStorage 就会警铃大作——它存在跨站脚本攻击(XSS)风险,一个有经验的开发者会选择安全性更高的 HttpOnly Cookie。AI 提供了”能用”的方案,经验让你选择了”安全可用”的方案。
特征二:执行力爆表,但毫无责任心。
这位实习生精力无限,从不抱怨 996。你让他写 100 个单元测试,他眼都不眨一下;你让他把项目里所有 var 换成 let 和 const,他瞬间就能完成。他是一个完美的”执行机器”。
然而,他毫无”责任心”。一个有责任心的程序员提交代码前会反复思考:“我的修改会不会影响其他模块?边界条件都考虑了吗?日志打得够不够清晰?“AI 没有这种顾虑。它依据上下文预测下一个 token 的分布;贪心解码每步取最高概率项,采样会按分布选择,不等于总取最大值(见 Transformers 生成策略)。这种生成机制本身不构成对项目工程可靠性的承诺。
一个典型的差距:你的项目有个紧急 Bug,某个关键函数在输入为 null 时会崩溃。你把错误日志和代码扔给 AI 要求”紧急修复”。AI 的”执行力”让它立刻在函数入口加了一句 if (input === null) { return; }——程序不崩了,问题”解决”了。而人类工程师的”责任心”会追问:为什么 input 会是 null?是上游哪个环节出的问题?提前 return 会不会让下游产生更隐蔽的 Bug?应该简单返回,还是抛异常让问题在源头暴露?AI 用一个”补丁”掩盖了症状,责任心驱使你去寻找”病根”。
特征三:逻辑自洽,但极易产生确认偏误。
AI 的逻辑推理能力在很多时侯令人惊叹,它能理解复杂的代码依赖并在此基础上修改。然而,它极易陷入确认偏误(Confirmation Bias)——一旦 AI 在一个错误的认知或假设上开始了工作,它后续的所有行为都会倾向于去”证实”和”维护”这个最初的错误,而不是推翻它。这在人类身上也很常见,但在 AI 这里被无限放大,因为它没有”自我反思”的元认知能力。
一个典型的差距:你让 AI 修复一个它自己引入的 Bug——它不会想”我最初的思路可能错了”,它会想”我最初的思路没错,一定是某个细节没处理好”。于是它在错误的地基上不断添砖加瓦,试图把一栋已经倾斜的危楼”扶正”,结果只能越修越乱,最终轰然倒塌。第 6 章我们会看到这个陷阱的完整演进。
小结:将 AI 视为”超级实习生”,意味着我们要从内心深处接受它的不完美。我们要像对待一个真实世界里的实习生那样,充分利用他的优势(速度快、知识广),同时也要用一套行之有效的管理机制,去规避他的劣势(缺经验、无责任、易偏执)。放弃”AI 是完美伙伴”的幻想,是我们迈向有效驾驭的第一步,也是最关键的一步。
5.2 你的真实角色:Tech Lead / 架构师 / 产品经理 / 最终决策者
既然 AI 是”超级实习生”,那么我们——人类开发者——的角色是什么?
答案是:Tech Lead(技术主管)、架构师、产品经理,以及最终的”决策者”。
在 AI 原生时代,软件开发的价值链正在发生深刻的重构。过去,一个程序员 80% 的时间可能花在”实现”上——查阅 API、编写业务逻辑、调试语法错误。现在,这些”实现”层面的工作正在被 AI 以极高的效率接管。这并不意味着人类程序员要失业了,而是意味着我们的价值核心,正在从”动手敲代码”,向上游的”动脑做决策”迁移。
我们的工作,不再是把砖头一块块砌成墙,而是成为那个”画出图纸、规定材质、验收质量”的人。具体来说,你作为”决策者”的角色,体现在以下四个关键层面。
5.3 四个决策职责:定义边界与约束、拆解需求与任务、验证结果与质量、做出权衡与取舍
决策一:定义边界与约束(The Architect)。
这是你最重要的职责。在项目启动之初,甚至在让 AI 写下第一行代码之前,你就必须像一位城市规划师一样,为整个项目划定清晰的边界。
- 技术选型决策:这个项目用 React 还是 Vue?数据库是 MySQL 还是 PostgreSQL?你不能指望 AI 为你做出最优选择,它只会给你最”流行”或最”常见”的选择。你需要基于团队技术栈、业务场景、性能要求、运维成本做出权衡。
- 架构模式决策:项目采用微服务还是单体?前后端完全分离还是耦合?这些高阶决策定义了代码组织的”骨架”,AI 将在这个骨架内填充血肉。骨架搭错了,血肉再丰满也是畸形的。
- 环境与兼容性决策:需要支持哪些操作系统?最低兼容到哪个浏览器版本?是否有离线的、内网的、信创的特殊运行环境?这些约束必须第一时间以极其明确的语言告诉 AI,否则它会默认在最理想、最现代的环境下生成代码,导致交付时出现灾难性的兼容问题。
决策二:拆解需求与任务(The Product Manager)。
AI 无法理解模糊的、充满人性的商业需求。你不能直接把产品经理的原话”我想要一个更酷的用户登录体验”扔给 AI。你需要扮演翻译官和项目经理的角色,将一个宏大的商业目标,拆解成一系列清晰、明确、无歧义的”技术任务卡”。
- 从”What”到”How”的翻译:“更酷的登录体验”意味着什么?是增加社交账号登录?是实现无密码登录(手机验证码、邮箱链接)?还是加入一个动态背景动画?你需要将这些可能性转化为具体的技术需求。
- 任务的优先级与依赖关系排序:是先做 UI 界面,还是先写后端 API?用户注册功能是否依赖邮件发送服务?你需要为 AI 规划出一条逻辑清晰的”工作流”,而不是让它像无头苍蝇一样想到哪写到哪。
决策三:验证结果与质量(The QA & Auditor)。
AI 提交了它的”作业”,你的工作才刚刚开始。你不再是代码的”生产者”,而是代码的”第一质检员”。
- 功能性验证:代码是否实现了预期功能?所有正常业务流程是否都能跑通?
- 边界与异常验证:输入为空、超长字符串、恶意脚本时,程序是否会崩溃?网络断开、服务器 500 时,前端是否给出友好提示?这些都是 AI 极易忽略的”角落”。
- 非功能性验证:性能如何?日志是否规范、足以支撑未来排查?是否遵循团队编码规范?是否存在明显安全漏洞?
- 代码审查(Code Review):你依然需要做 Code Review,但审查的重点变了——不再逐行检查语法拼写,而是把精力放在更高维度:架构是否合理?模块划分是否清晰?命名是否表达了业务意图?是否存在潜在的逻辑炸弹?
决策四:做出权衡与取舍(The Pragmatist)。
软件工程的本质是”权衡的艺术”。在资源有限、时间紧迫的真实商业世界里,不存在”完美”的方案,只有”合适”的方案。
- “快与脏”vs”慢与美”:这个紧急的线上 Bug,是先用临时的补丁快速止血,等下个版本再彻底重构?还是宁愿让用户多等一天,也要一步到位做最优雅的修复?这个决策,AI 给不了你答案。
- 技术债务的取舍:为了赶项目上线,我们引入了一个临时的技术方案,这会形成一笔”技术债务”。这笔债务是否可以接受?我们计划何时、用什么方式偿还它?你需要像一个精明的财务官一样,管理项目的”技术负债表”。
- 放弃与砍掉:开发过程中,你发现某个功能(比如兼容 IE8)的实现成本远超其带来的价值。此时,你需要有魄力做出”砍掉这个功能”的决策,说服产品经理和老板,而不是让 AI 和你一起在无底洞里浪费生命。
从”写代码的人”到”做决策的人”,这不仅是工作内容的变化,更是一次深刻的思维模式升级。它要求我们跳出代码的细节,从系统、商业和工程的全局视角去思考问题。我们的价值,不再由”写了多少行代码”来衡量,而由”做出了多少个高质量的决策”来定义。
5.4 约束是第一性原理:用限制换取确定性
现在我们明确了:AI 是超级实习生,我们是决策者。那么,我们该如何将自己的”决策”有效地传递给这位实习生,并确保它能准确无误地执行呢?
答案就是”约束”(Constraint)。
在 AI 编程的实践中,有效约束是连接人类智慧与 AI 算力的唯一桥梁,是我们将不确定的概率世界,转化为确定的工程产品的核心法则,是整个方法论的”第一性原理”。
很多人对”约束”有天然的反感,认为它代表着限制、不自由。但在工程领域,尤其是在与一个充满不确定性的系统(如大模型)协作时,约束恰恰是通往自由和创造力的唯一途径。
约束的本质:用”限制”换取”确定性”。
想象一下,AI 的潜在能力是一个无限广阔的”可能性空间”。当你给它一个模糊的指令”写一个登录页面”,它可以在这个空间里随机选择一个点——可能是 React 写的、可能是 Vue 写的、可能是用最古老的 jQuery 写的。每一次的结果都可能不同,充满了不确定性。
而”约束”的作用,就是在这个无限空间里画出一个个”围栏”,急剧地缩小 AI 的选择范围:
- 你增加一条约束:“使用 React 18 和 TypeScript”——可能性空间被大大缩小;
- 你再增加一条约束:“UI 组件库必须使用 Ant Design 5.0”——空间进一步缩小;
- 你继续增加约束:“状态管理必须用 Zustand,不能用 Redux”;
- 你最后增加一条约束:“不允许使用任何 useEffect 来发起 API 请求,必须封装在自定义 Hook 中”。
当你施加了足够多、足够精确的约束后,AI 的”可能性空间”被压缩到一个很小的候选区域。此时,它生成的结果就从一个不确定的、随机的”猜测”,变成了一个高度确定的、符合你预期的”工程制品”——当然,候选区域仍需你的验收来最终把关。
用限制换取确定性,这就是约束的魔力所在。你放弃了让 AI”自由发挥”的虚幻权力,换来了对最终产出实实在在的掌控力。
约束的价值:降低认知负荷,聚焦高维决策。
当没有约束时,你需要审查 AI 生成的每一行代码,去理解它的实现逻辑、评估它的优劣,这是一个极其耗费心力的过程。而当有了清晰的约束后,你的审查模式发生了根本性的改变——你不再需要问”这段代码写得好不好?“,你只需要问一个更简单的问题:“这段代码是否遵守了我设定的所有约束?“它用的是 React 18 吗?用的是 Ant Design 吗?用 Zustand 了吗?有没有在 useEffect 里写 fetch?
你的认知负荷从”理解一个复杂的开放性问题”降低到了”检查一个封闭性的清单”。这让你能把宝贵的脑力资源,从繁琐的代码细节中解放出来,投入到更重要的”高维决策”中去。
约束的类型:构建一个全方位的”护城河”。
这套约束体系就像围绕着你的项目挖掘的一条条”护城河”,确保 AI 这头巨兽永远在你规划好的安全航道内行进:
- 架构约束:最内层的护城河,通过文档和项目结构,定义技术栈、模块边界和设计模式(本书第四部分);
- 流程约束:控制航行节奏的船闸,通过会话管理和提问技巧,引导 AI 的思考路径,防止它”狂奔”或”兜圈子”(本书第六部分);
- 环境约束:应对外部环境的堤坝,当 AI 面对它看不见的真实运行环境时,通过日志遥测等手段为它建立有效的感知(本书第六部分);
- 质量约束:最终的质量检验关卡,通过自动化测试和持续集成,建立一条不可逾越的”电网”,任何不符合质量标准的代码都无法通过(本书第八部分)。
掌握”有效约束”的艺术,就是掌握了在 AI 时代进行复杂软件开发的核心竞争力。它要求我们从一个追求”加法”(不断实现新功能)的开发者,转变为一个精通”减法”(不断排除错误可能)的架构师。
【拿来就用】人机协作角色分工卡
请将这张卡片打印出来,或者放在你的桌面背景上。在每一次与 AI 交互前,快速浏览一遍,提醒自己和”搭档”各自的角色与职责。
| 开发阶段 | AI(超级实习生)角色 | 你(技术决策者)角色 |
|---|---|---|
| 需求分析 | 信息检索员 & 方案生成器:根据关键词快速查找相关技术资料;基于明确指令生成多个初步技术方案草案 | 翻译官 & 过滤器:将模糊的业务需求翻译成清晰、可执行的技术任务;基于经验和项目背景,筛选出可行性高的选项 |
| 架构设计 | 绘图员 & 填充者:根据指定的架构模式生成代码骨架和目录结构;填充你已定义好的模块接口和数据结构 | 总设计师 & 决策者:做最终的技术选型、架构模式和核心模块划分决策;定义所有关键的约束条件(技术栈、版本、兼容性、安全红线) |
| 编码实现 | 代码生成器 & 体力劳动者:编写具体的业务逻辑、工具函数、UI 组件和单元测试;执行重复性、模式化的编码任务 | 指挥官 & 质检员:下达清晰、分步骤的编码指令;审查 AI 生成的代码,重点关注逻辑、边界、性能和可维护性;确认代码是否遵守了所有既定约束 |
| 调试排错 | 日志分析师 & 猜想提供者:根据错误日志和代码分析可能的原因;按需生成调试用的日志打印代码;提出多种可能的修复方案 | 侦探 & 主刀医生:复现问题,收集关键证据;从 AI 的猜想中结合经验判断出最可能的”根因”;做出最终修复策略决策并指挥 AI 执行 |
| 测试验证 | 测试用例生成器:根据函数签名和业务逻辑生成单元/集成测试样板代码;快速生成各种边界情况和异常输入的测试数据 | 质量保证负责人:设计整体测试策略(单元、集成、端到端);编写核心的、最关键的测试用例;建立并维护自动化测试”电网”,设定不可逾越的质量红线 |
| 重构优化 | 模式匹配执行者:执行明确的、模式化的重构任务;扫描并报告潜在的”坏味道” | 系统健康守护者:识别系统中的”技术债务”和架构瓶颈;做出重构决策、权衡成本收益;确保重构没有破坏现有功能 |
独立练习
使用虚构或已获授权的脱敏材料,先独立作答,再查看参考。将产物保存为 chapter-05.md,写上版本、决定、证据和缺项。
为分类模块写一份委派卡:已知事实、未知项、允许修改文件、禁止操作、输出格式、检查命令。找出一句无法验证的要求并替换。
本章必交产物:监督闭环记录
以下证据必须出现在本次独立练习的提交物中;正文原有问题用于提供内容,不能替代这些验收项。
- O1: 监督闭环记录画出“生成候选”“工程审查”“证据放行”的前向路径和返回路径
- O2: 监督闭环记录为每一环写明输入、判断、输出和负责人
- O3: 产物记录一轮候选、审查发现、修正和放行依据
查看参考反馈(先独立作答)
参考反馈
将‘像资深工程师一样保证正确’替换为‘只改分类函数,不改样本和期望;给出差异和运行结果’。模型资历是比喻,不能据此信任输出。未知规则应显式列出并请求业务确认。若检查尚未运行,明确写未验证;让执行者列出需要补充的上下文,而不是凭空选择业务规则。
自评与下一步
对照本章目标检查:决定是否明确,依据是否能复现,未知项是否如实记录。参考给出一种判断方式,不是唯一答案;若不同结论能提供同等证据,可请同伴复核。缺少证据的部分记未完成,再回到对应步骤补充。
来源与边界
登记来源只支持本章涉及的外部事实;监督闭环记录、示例数字和练习情境属于课程内部教学设计,必须在实际项目中重新验证。
- Transformers 文本生成策略
Hugging Face · 2026-09-17 · 贪心、采样和束搜索使用不同的下一 token 选择策略,解码选择会影响输出。
- NIST AI 风险管理框架
National Institute of Standards and Technology · 2026-09-17 · AI 风险治理需要跨设计、开发、部署和使用阶段持续识别、测量、管理与记录。
记录本章练习
仅保存本浏览器的自检记录,不上传作业,不代表评阅通过或认证。请在自己的章节文件中保留证据与缺项。