☰
团队用上 AI 写代码,先被换掉的不是写代码的人
2026/10/26 7:27:06 网站建设 项目流程

版权与内容来源声明
本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式,也不对任何收益结果作承诺。转载请注明出处。

一、需求评审会上,最先变的不是人头

1.1 同一个需求,开会时吵的东西换了

两年前,一张「把合同里的金额、付款节点、甲乙方抽出来给业务看」的需求单,开完会接下来的三天是你的:定接口、写解析、补异常、提测。现在开完会,散会前群里就有一个能跑的版本躺在那里。

会议时长没怎么变,变的是会上在吵什么。以前吵「这个接口怎么设计」,现在吵的是另外三句:「这条规则到底算不算对」「这个字段能不能放进模型上下文」「出错的时候谁先知道」。

三句里没有一句在问「怎么写」。这就是本文要讲的事:团队引入 AI 写代码之后,被削弱的那一层,恰好是过去最容易被当成「技术能力」来衡量的一层。

1.2 把一条链路竖着切三层

同一个功能,可以按它在团队里承担的角色切成三层:

  • 翻译层:把一句人话变成能跑的实现。输入是需求单、原型、接口文档,输出是可提交的代码。
  • 判断层:决定什么算对、允许它碰什么、失败之后往哪退。这一层的产出是标准、边界和退路。
  • 责任层:上线之后出了问题,谁签字、谁对外解释、谁决定回滚。

AI 压的是第一层的成本,而且压得很彻底:它不累、不抱怨、不改需求。第二三层没有被压下去,原因不是模型不会写这几样东西,而是这三层本质上是「有人要为此负责」。责任无法由模型承担——模型没有一个可以被追责的位置。

所以「先被换掉的不是写代码的人」这句话的准确含义是:被换掉的是「只承担翻译这一层」的岗位位置,而不是「会写代码」这项技能。

1.3 会写代码变成入场券,不再是差异点

这里有个很容易走偏的推论:既然翻译层变便宜了,那会写代码就不值钱了。恰恰相反——不会写的人,连 AI 给的东西错在哪都看不出来。

区别在于性质变了:从「差异点」变成「入场券」。入场券不能省,但它不再让你显得特别。

给一个三分钟就能做的判据:随手拿一段 AI 生成的函数,你能不能在三分钟内说出它在什么输入下会错、错了会造成什么后果。

说得出,你在判断层;说不出但能改,你在翻译层;连改都要查半天文档,先把基础补上,别急着谈定位。这三句话不是评价谁高谁低,是告诉你下一步该往哪儿使劲。

二、只承担「翻译」的岗位位置,薄在哪

2.1 翻译层的三个特征

一个位置薄不薄,不看它难不难,看它的产出具备什么性质。翻译层的产出,通常同时具备三个特征:

  1. 输入是别人给的:需求单、原型、接口文档,缺一样就动不了工;
  2. 输出可被另一个实现替换:同样的功能,换个库、换个写法也能完成,差别只在风格;
  3. 失败可回滚到上一版:写错了改回来就行,代价控制在一两次提交之内。

三个特征合起来指向同一件事:这个位置产出的东西可以被比较、被替换、被批量生产。而 AI 最擅长的正是「可比较、可替换、可批量」。

2.2 三种位置放在一张表里看

位置每天在决定什么团队用上 AI 之后你留下的证据出问题先被问什么
翻译层这段逻辑用什么写法实现变薄:产能被拉平,个体差异被抹掉提交记录、能跑的版本「你这段是怎么写的」
判断层什么算对、能碰什么、失败怎么退变厚:需要判断的地方变多,因为候选变多验收条件、边界清单、退路设计「你的判断依据是什么」
责任层出事谁签字、对外怎么解释不变:责任没法委派给模型复盘记录、决策留痕「这次为什么不回滚」

这张表的用法不是给自己贴标签,而是对照「最近一个月你真正在做的事」落在哪一行。注意是「真正在做」,不是「被安排了却一直没做」。

2.3 反直觉的地方:更快反而更薄

翻译层被加速之后,有个副作用常被忽略:速度是可比较的,判断不是。

于是团队很自然地用速度评价人——同一个需求,谁先交谁显得强。这时候如果你只交代码,你就在参加一场自己一定会输的比赛,因为对手不睡觉。

解法不是更快,是换记分牌。把「我判断了什么」留成痕迹:一条被写进仓库的验收条件、一次被拦下的越界调用、一条提前设计好的退路。这些东西模型交不出来,因为它们不是产出物,是决策。

三、四个信号:你现在站在哪一档

3.1 先约定这套信号的用法

四个信号只问一个问题:这件事是谁做的。

答案允许是「我和别人一起」,但不允许是「我也能做」。因为在判断层,「我也能做」和「我做了并留下了东西」之间隔着一次真实的承担。

每个信号给两样东西:往哪边偏的观察方法,以及一件明天上班就能看的事。

3.2 逐项拆开看

信号一:需求是谁拆的。

观察方法:翻最近三次需求单,看「验收条件」或「完成定义」那一栏是谁填的。那一栏空着、由你在评审会上补齐,偏判断层;产品填完你直接接单,偏翻译层。

判断层的人拿到的是「业务想在某种情况下少一步人工」,然后自己拆出做什么、不做什么;翻译层的人拿到的是「做一个 XX 功能」。

信号二:验收标准谁写的。

观察方法:看测试用例从哪来。照着代码分支反推出来的用例,本质是复述实现,不是验收。

判据很硬:不看实现,你能不能把用例写出来。能,标准在你手上;不能,标准在实现里,而实现现在可能是 AI 写的。

信号三:AI 生成代码的最后一公里谁审。

观察方法:打开仓库最近二十个提交,数一下作者和审核者是同一个人的有几个;再翻 diff,看有没有哪一次是被「人」拦下来的。

如果提交即合并、没人看,这一项就偏翻译层。如果有人说得出「这一行在空输入下会崩」,偏判断层。

顺着这条线索,有个具体到能立刻用的小手段:当 AI 写的代码里出现一个可疑的常量、一个不该出现的表名,你要能查到它是哪一次提交带进来的。

⚠️代码待验证

gitlog -S"某个可疑字符串"--oneline

这个命令形态在本机用两次提交的临时仓库验证过(截至 2026-10-24,git 版本 2.55.0.windows.3):普通提交历史有两条,加上检索字符串后只返回引入它的那一次提交。文中用占位字符串呈现,字符串换成你实际要查的那段;含空格或中文时把引号用对,必要时加--all扫全部分支。

信号四:线上出问题谁签字。

观察方法:看值班表、看复盘文档谁主持、看「要不要回滚」这个决定是谁下的。

偏翻译层的时候,出问题第一句是「你这段怎么写的」;偏判断层的时候,第一句是「你当时的判断依据是什么、下次怎么提前发现」。

四条放在一张表里,方便打印出来对着勾:

信号偏翻译层的表现偏判断层的表现明天能观察的一件事
需求谁拆拿到的是「做一个功能」拿到的是业务目标,自己拆边界翻最近三张需求单,看验收条件那栏的字迹
标准谁写用例照实现反推用例先于实现存在试着不看代码写三条用例,看写不写得出
最后一公里谁审提交即合并有人能指出具体哪一行会崩数最近二十个提交里,作者与审核者不同的有几个
线上谁签字先被问「怎么写的」先被问「判断依据」查一次值班表和复盘文档的主持人

3.3 算个粗分,知道自己该改哪一项

每一项按 0 / 1 / 2 打分:0 = 明显偏翻译层,1 = 混合,2 = 明显偏判断层。四项相加:

  • 0 到 2 分:位置最薄。先做第 5 章的边界清单,因为它一周内能补完,而且补完立刻降低你的风险敞口。
  • 3 到 5 分:混合档。缺的通常是验收标准,从第 4 章开始,别一上来就搞兜底。
  • 6 到 8 分:已经在判断层。重点变成把兜底演练做成习惯(第 6 章),因为这个档位最容易被「上次也没事」麻痹。

这个分数不用给任何人看。它的唯一作用是让你只改一项,而不是四个方向一起用力。

四、第一张清单:验收标准,把「我觉得对」变成「可判定」

4.1 口头标准为什么会失效

AI 的输出是概率性的:同一个输入,两次可能不一样。这意味着验收标准不能是「看着对不对」,必须是「满足哪几条」。

否则每次评审都在重新定义对错,而定义权会滑到说话最大声的那个人手里——这跟技术能力没关系,跟位置有关系。

一个自检:把你现在的验收标准念给一个没参与项目的人听,他能不能不看结果就判断通过与否。不能,说明它还是意见,不是标准。

4.2 模糊说法怎么改成可判定的句子

模糊说法为什么不能用可判定的写法
摘要要准确「准确」没有边界,谁都能说自己准摘要里出现的每个金额、日期必须原文可查,单位与原文一致
回答要友好友好无法判定,也无法回归信息不足时必须说明缺哪个字段,不得编造补全
性能要能接受能不能接受取决于当时的心情单次请求的尾部时延超过三秒即降级,降级后返回缓存结果并标注
覆盖常见问题「常见」没有定义,永远吵不完给定五十条历史工单,必须落入预设分类之一,未命中的进人工队列并记录
输出要稳定稳定指结构还是指内容同一输入连续五次的字段结构必须一致,值可不同但类型不得变

写这种句子有个笨办法:把「要怎样」改写成「什么情况下算没做到」。人对着反例判断,比对着形容词判断准得多。

4.3 让标准能被机器读,才不会退化成意见

验收条件只写在会议纪要里,下一次需求变更时它就会消失。写进仓库,它才有资格参与流程。

下面这份是结构示例,文件名假定为acceptance.yaml,不是可以直接投产的配置:

⚠️代码待验证

feature:合同金额抽取owner:对该功能对错负责的人cases:-id:amount-unitgiven:正文金额写作「壹拾万元整」must:输出 100000,币种 CNY,单位元on_fail:进人工队列,不写库-id:missing-fieldgiven:合同缺少付款节点章节must:输出空数组,并在 notes 里写明缺失字段名on_fail:整条记录标为待补,不进入下游结算limits:tail_latency_ms:3000cost_per_call_cny:0.02

三点说明。第一,每条用例只写「给定什么、必须怎样、不满足怎么办」,不写实现细节,否则标准会跟着实现漂移。第二,失败动作要具体到「进队列」还是「写库」,含糊的失败动作等于没有。第三,limits里的数字必须能被监控读到,写在文档里的阈值没人会盯。

最后一条判据:验收标准的所有权,看它能不能在你不参会的情况下继续生效。能,它属于团队;不能,它属于你个人,你休假它就失效。

五、第二张清单:系统边界,先算失败半径

5.1 边界不是权限申请单

申请权限的时候,人想的是「我需要什么」;写边界清单的时候,要问的是「它一旦乱来,最坏能坏到哪」。这两个问题方向相反:前者做加法,后者做减法。

本文用「失败半径」这个词指代后者的结果,一句话解释:它能碰到的数据 × 它能执行的动作 × 它能持续的时间。三者任意一个放大,半径都会放大。

一个只读单表的脚本,半径是一张表;一个既能读合同又能写结算结果的链路,半径是一整个结算周期。

5.2 边界要回答的四个问题

四问写成什么形式默认值常见反例
读什么表名 / 字段清单 + 敏感级别只给最小集「先给它库连接,反正只查」
写什么可写 / 只读 / 禁止 三档禁止写生产库「顺手把结果写回业务表」
花多少钱单次上限 + 单日上限超限即拒绝「先跑起来,账单月底看」
替谁做决定建议 / 执行 / 需人确认需人确认「它判断能退就退」

四问里最容易被跳过的是第三问。成本上限不是财务问题,是边界问题:一个没有上限的链路,等于允许它在一次故障里把所有预算烧完。

5.3 清单长什么样

⚠️代码待验证

清单:合同抽取(默认拒绝) [读] 业务库.contract 的 id / amount / party —— 只读,禁止导出整表 [读] 对象存储 contracts/ 下的 PDF —— 只读,单次最多 20 份 [写] 业务库.contract_extract —— 只允许插入,不允许更新原表 [禁] 结算系统、发票系统、任何删除语句 [钱] 单次 0.02 元,单日 50 元,超限直接失败并告警 [决] 只给建议,不改业务状态;涉及金额的写操作必须人工确认

这份东西的价值不在写得多全,在于「禁」那一行有人签过字。

一条判据:如果一份边界清单里没有「禁」这一项,它就不是边界清单,是愿望清单。再补一条:随机抽一条问「谁批准的这一条」,答不出来,说明它是从别处抄来凑数的。

这份《岗位能力自查表》:把本章的边界四问和第三章的四个信号做成了一张可打印的对照页,适合贴在工位上每周勾一次。放在资料包里,扫码即可获取:

六、第三张清单:兜底,失败之后往哪退

6.1 兜底的三件套

兜底不是「写好异常处理」,是三样具体的东西:

  • 开关:能在不发新版本的情况下,把这条链路整条关掉;
  • 降级:关掉之后业务继续走的路径,人工、旧规则、缓存快照,三者至少有一条;
  • 留痕:关掉之后能查清刚才发生了什么,谁触发的、影响了多少条。

三件缺一件,兜底就只是一句口头承诺。顺序也不能反:先有降级路径,才敢装开关;先有留痕,才敢复盘。

这里有个反常识的点:开关的价值不在于「用得上」,而在于「敢用」。一个从来没被关过的开关,第一次关的时候往往就是事故现场。

6.2 五类失败,各自的退路

失败类型退路谁触发时限
模型超时或被限流返回缓存结果并标注「非实时」自动立即
结构化输出校验不通过重试一次,仍不通过转人工自动三十秒内
抽取值与原文对不上该条不写库,进人工队列自动当批处理完
同批次错误集中出现关开关,全量转人工值班人十分钟内
成本超限拒绝新请求,保留已完成的自动立即

表格里「谁触发」这一列比「退路」更重要。全部写成「自动」的清单,通常意味着没有人真的想过谁来拍板。

6.3 兜底要演练,不演练等于没有

演练只需要三件事:关掉、走一遍、看有没有人喊。下面是在预发环境跑的一组动作,覆盖开关与降级两条路径。两个期望值要在跑之前先写好:关掉之后主流程仍返回正常状态码(走人工或旧规则),坏输入进人工队列而不是静默丢弃。

⚠️代码待验证

exportFEATURE_AI_EXTRACT=off# 关开关curl-s-o/dev/null-w"%{http_code}\n"http://localhost:8000/api/extractcurl-s-XPOST http://localhost:8000/api/extract\-H"Content-Type: application/json"-d'{"file":"not_exist.pdf"}'

代码里那层「校验不通过就转人工」,最小骨架大致是这样:

⚠️代码待验证

defrun_one(item,extract,validate,review_queue):try:raw=extract(item)exceptTimeoutError:return{"status":"degraded","reason":"timeout"}problems=validate(raw)# 返回未满足的验收条目 idifproblems:review_queue.push(item,raw,problems)return{"status":"needs_review","problems":problems}return{"status":"ok","data":raw}

这段代码没什么技巧,值得看的是它的形状:三条出口,每条都有名字。有名字的出口才能被统计,被统计才能被改进。

演练完只记一个数:从关掉开关,到业务恢复正常流转,中间花了几分钟。

超过十分钟,说明降级路径没人走过;超过一小时,说明降级路径只存在于 PPT 里。这个分钟数比任何文档都可信,因为它无法被美化。

七、两件不要做的事,和明天能动手的三件小事

7.1 别用「我学了多少框架」当进度

框架是最容易被替换的一层,把它当进度,等于把体力度量成了能力。下面这些「看起来像进度」的东西,换一个更硬的替代:

看起来像进度为什么不算换成这个
学完三个框架框架换代快,且不能替你判断用其中一个把真实输入跑通到落库,能演示给别人看
收藏二十篇提示词技巧模型一升级,多数作废写下三条可判定的验收条件,提交进仓库
背得出智能体的几种范式范式不承担后果画出一次失败时的退路,并完整演练一遍
项目里用上了向量库用了什么,不等于判断了什么说清为什么是它,以及什么情况下它不合适

一个粗糙但有效的区分:能写进仓库、能被别人复用的,算进度;只能写进简历的,先别当进度。

7.2 别把「AI 能写」当交付

能跑、能验收、能退出,是三件事。

只满足第一件的,是演示,不是交付。演示的典型特征是在准备好的输入上跑得动;交付的典型特征是在没想到的输入上失败得体面——有出口、有记录、有兜底。

所以「AI 十分钟就写完了」这句话,作为状态描述是成立的,作为交付结论是不成立的。中间差的正是第二三层:谁定标准、谁划边界、谁签字。

7.3 明天上班能做的三件事

不用等职位变化,也不用等团队改流程。三件小事,加起来不到一小时:

  1. 下次评审会上补一条:「这条需求在什么情况下算没做完」。一句话,把你的位置从接单往判断挪一格。
  2. 挑一个手上的功能,把验收条件写成三行可判定的句子,提交进仓库,哪怕先放在注释里。
  3. 找最近一次线上问题,问一句「如果这段代码是 AI 写的,谁签字」。答案会直接告诉你第四个信号在哪一档。

三件事的共同点是:都在留下能被别人看见的判断痕迹。痕迹积累到一定数量,你的位置就不再是「写代码的那个」,而是「定标准、划边界、兜后果的那个」。

回到标题:被换掉的不是写代码的人,是只交代码、不留判断的位置。

这份《三张清单 + 兜底演练记录表》:验收、边界、兜底三份可填空模板,加上一张记录「关开关到恢复用时」的演练表,复盘时直接贴进文档。放在资料包里,扫码即可获取:

附表 A:本文引用事实与出处对照表

事实出处(文档名 + 发布方 + 链接)本文位置
git log -S"字符串"只返回引入该字符串的那次提交;本机两次提交的仓库中,普通历史为两条,加-S后仅返回一条;git 版本 2.55.0.windows.3本机实测(2026-10-24),Windows 11 + Git Bash,临时仓库仅用于该验证第 3.2 节
四个可观察信号(需求谁拆、标准谁写、最后一公里谁审、线上谁签字)与 0 / 1 / 2 计分法经验判断,非引用:本文归纳自日常研发协作中的分工形态,无公开统计或官方文件支撑第 3 章
三张清单的字段设计(验收的「给定—必须—失败动作」、边界四问、兜底的开关/降级/留痕)经验判断,非引用:按可执行性倒推出来的结构,不是行业标准第 4、5、6 章
三个经验阈值:三分钟判断一段代码的风险、尾部时延三秒、关开关到恢复十分钟经验判断,非引用:可按各自团队的响应能力调整,不构成通用标准第 1.3、4.2、6.3 节
本文未使用任何行业统计数字说明:写作时尝试检索 Google SRE 站点(sre.google)的相关章节原文,本机请求失败,未取得原文,因此全文不引用任何外部统计与外部原文,仅保留可复现的本机实测一条全文

附表 B:术语速查表

术语一句话解释在本文哪里用到
翻译层把需求变成可运行实现的那一层工作第 1.2、2.1 节
判断层决定什么算对、能碰什么、失败往哪退的那一层第 1.2、2.2 节
责任层上线后谁签字、谁解释、谁决定回滚第 1.2、2.2 节
失败半径能碰到的数据、能执行的动作、能持续的时间三者相乘的结果第 5.1 节
验收标准判断一条输出对错的规则,写成可判定的句子而非形容词第 4 章
可判定别人不看结果只听规则,也能判断通过与否第 4.2 节
diff一次改动前后的差异,审查的对象就是它第 3.2 节
最后一公里从生成代码到合并进主干之间的那段人工审查第 3.2 节
降级主链路不可用时,业务改走的替代路径第 6.1 节
开关不发版就能整条关掉某个功能的配置项第 6.1 节
留痕把关键动作记下来,事后能查清谁触发、影响多少条第 6.1 节
人工队列自动判断不可信时的去处,比静默丢弃更负责第 6.2 节
尾部时延最慢那批请求的耗时,比平均值更能反映体验第 4.2 节

写在最后:这篇用到的资料

写这篇文章时,把相关的官方文档和源码又翻了一遍,顺手也整理了几份配套的东西:

  • 大模型学习路线图:从零基础到能自己动手做 Agent,按阶段说明每一步该学什么、哪些可以先跳过
  • 《LangChain + LangGraph + MCP 智能体开发实战》视频课:7 个模块,从私有化部署、Embedding+RAG 到 MCP+Agent 全流程
  • AI 大模型知识库(在线可查):Agent Skills 从入门到落地、Claude Skills 完全指南等专题,按目录浏览即可
  • 640 套 AI 大模型行业报告 + 经典 PDF 书籍:看行业落地案例和别人怎么做的时候用得上
  • 大模型零基础到精通教学视频:跟着敲一遍,比只读文档快得多

资料是我自己整理的,放在下面这个码上,扫码即可获取:






添加时备注「AI」,优先通过。

资料按「先路线、再动手、最后查漏」的顺序整理好了,建议先看学习路线那一份,照着它挑一条适合自己当前基础的路径再往下看。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询