版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AICODING·工程实践深度解析AICoding深水区实战指南从提示词到Runtime主权,编码让位后人如何守住决策与质量基于PUBGMobile后台团队两万字实践长文·六大模块深度拆解目录CONTENTS·六大模块01AI已经能端到端交付了对照组实验与三个核心发现02提示词的尽头是基础设施约束下沉框架,报错即注入03编排的尽头是RuntimeAgentTeams实验与主权边界04分数不可信,问题在题集变异击杀率与评测方法论05人退到决策点验收杠杆与机器独有的事实06把判据变成流程嵌套环体系与资产治理01AI已经能端到端交付了对照组实验·三个核心发现·机器提供事实,人做判断三个月,三十万行代码,没有一行是人写的第一章·04这个季度我们做了一个内部平台,给codingagent做支撑。通用技术栈、全新项目、没有历史包袱——对AI最友好的对照组环境。7个服务1800+次提交16万行生产代码0行人工编码十一万行测试代码、八万多行前端,设计文档全部由AI落笔。这意味着业务代码离AI端到端交付已经不远了——但人做了什么?做了大量的决策。核心结论:AI的产出能力已经够用,正因为产得又多又快,兜底比以前更必要。发现一:人的工作量没有减少,只是从落笔挪到了拍板第一章·05原本以为AI全权接过代码之后,人会轻松下来。每天要读的东西会变少,要拍的板会变少。实际情况完全没有。每天要读的东西一点没少,只是从读代码变成读方案、读结论、读证据;要拍的板一点没少,只是从这段怎么写变成这条路走不走。七十多篇设计文档,全部由AI落笔,每一篇的取舍都是人定的海量spec文档最后被删掉了,删完项目照跑。spec的价值在于逼你在动手前把问题定义清楚;一旦想清楚了,文档本身是可丢弃的。真正不可替代、无法委托给AI的那一步,是想清楚它——brainstorming。核心从来不是spec这个载体,而是产出它的过程中被迫想清楚的那些事。发现二:AI犯错不是概率问题,是规模问题第一章·06即便在最友好的环境里——Go加TypeScript,全新项目,工具生态齐全——三个月下来照样攒了一份事故清单。真实事故:资产入库卡在中间状态四次,每次都在提交空commit覆盖率看板把采集失败和没有数据显示成同一个东西重试队列里的僵尸任务把整条调度锁死需求提取上线第一晚积压四千多条出错的绝对数量不由单次准确率决定,由累积量决定。迭代次数足够多、产出代码足够长,再低的错误率也会积成一堆真实事故。而人的审查能力,一点都没跟着涨。所以模型越强,harness不该越薄——模型变强只会让产出更多更快,人这一端的上限一动不动,缺口只会更大。发现三:有一类错,AI特别容易犯——失败不可见第一章·07不是功能不通,而是失败没有名字、没有出口、没有信号。AI交付功能的能力,明显强于它交付让失败可见这种纪律的能力。状态机漏态AI写得出完整的状态机,但最初漏掉了合并失败这一态。于是失败没有名字,只能卡在正在合并里原地打转。覆盖率混淆AI写得出覆盖率看板,却把采集失败和真的没覆盖显示成同一个0%。两种完全不同的失败,在看板上无法区分。僵尸任务锁死AI写得出重试队列,却让僵尸任务把整条调度锁死。失败的任务没有退出机制,持续占用资源。因为前者是需求,后者是价值观——AI的训练是应试式的,它目前还理解不了价值本身。人的决策不可替代:这个失败必须有名字、这两种0%必须分开——它们不写在任何需求里。三个发现指向同一句话:机器提供事实,人做判断第一章·08机器提供事实,人做判断这是一把可以直接用的尺子:手上这件事,是事实,还是判断?是事实→交给机器别让人去核对,也别听AI声明。覆盖率、执行结果、字节级扫描——这些只有机器能取到的事实,全部自动化。是判断→留给人别指望机制替他拍板。这条路走不走、这个失败算不算问题、这个设计取舍对不对——价值观层面的决策,只能由人承担。02提示词的尽头是基础设施约束下沉框架·报错即注入·判据决定门禁软硬注意点堆在提示词里,模型会变笨第二章·10测试agent的skill叫ut-tester,SKILL.md四百多行,排坑、模板、注意点铺了十几份文档。2月到6月:每月都在加措辞再强硬一点,规则再细一点,例子再多给一个。注意点越多,模型要同时记住的事越多,注意力越碎,写测试这个主任务反而越差。7月之后:几乎停了不是做完了,是加不下去了。力气转到ut框架——6月框架侧提交大约是skill的四倍。mock自动还原、超时分析包,都是把原来写在skill里的叮嘱从模型脑子里挪走。打补丁这一档尤其不要写模型走错一次,就加一条以后必须走这条路。我们写过严禁mockss,只有一种正确写法——八天后对着仓库里529个存量单测才发现,这条从落笔那天就和事实相反。它不是用久了才坏,是生来就在拿有限规则覆盖无限问题。例一:声明式mock自动还原——用框架取消错误的存在第二章·11测试经典范式setup/teardown:开始前mock,结束后还原。提示词里反复强调必须成对出现,AI仍有约一半概率漏掉teardown。提示词方案(失败)反复强调setup/teardown必须成对出现AI仍有约一半概率漏掉teardown用例互相污染,验证过程不可控→框架方案(成功)声明式mock+用例结束框架自动还原像自动GC一样,teardown不再可能遗漏AI在这里几乎不再犯错最直接的证据:一条纪律的消失自动还原上线之前,靠人肉纪律维持秩序:会改脏环境的用例必须排到最后跑,跑完还得重启服务。自动还原和静态闸门到位后,交接文档里写下的是——这条纪律自此作废。不是AI变听话了,是这类错误不再可能发生,纪律没有了存在的理由。例二:trace超时分析包——在AI卡住那一刻送达准确反馈第二章·12AI跑测试最常撞的问题是链路超时。要读大量代码、追调用链,在写跑测这种繁重任务里再塞重度分析,AI经常耗时极长,还有概率上下文过载。框架重构后:超时那一刻反向探测各服务队列和限频登记表,按现场分类:还在排队/出队了但业务代码没回包/分发层被限频丢掉/回包到了但当时没人接每一类后面跟的不是现象描述,是下一步动作——连该去看哪个配置字段都点出来。副产品:报错通道本身就是提示词注入通道顺着报错通道可以返回任何AI需要的信息,而且时机精准——正好在AI卡住的那一刻到达。最好的提示词,是恰到好处的反馈。但这条通道也会反噬:注入的信息不是越多越好,会带错方向的反馈,比没有反馈更糟。协议表告警因为信噪比差还会把AI带偏,后来被删了。报错通道本身就是提示词注入通道第二章·13最好的提示词,是恰到好处的反馈精准时机的价值报错通道顺着它可以返回任何AI需要的信息。时机精准——正好在AI卡住的那一刻到达,不是提前灌输也不是事后补救。反噬的风险框架里曾经有个告警:AI等一个不在协议表里的协议名就提醒它。后来删了——协议表按线上流量生成,冷门协议收不全,告警信噪比差还会把AI带偏。注入的信息不是越多越好。会带错方向的反馈,比没有反馈更糟。两种厚别混:提示词越厚越笨,框架越厚越强第二章·14写在提示词里越厚,模型要同时记住的事越多注意力越碎,主任务反而越差厚的是模型的工作记忆打补丁这一档尤其不要写写进框架里越厚,模型越省心主任务上反而更强取消一整类错误的存在把AI的注意力还给主任务下沉的判断标准:判据是确定事实才做硬门禁,是代理指标最多做提醒硬门禁(确定事实)禁止读protocols目录——路径前缀比对,要么在要么不在覆盖率0/0行直接判失败——从外部看被测函数行一次没被执行到仅提醒(代理指标)编辑.lua前必须先读编码规范——读过不等于遵守,没扫到也不等于没读过主会话累积历史Read会把已读状态污染给之后每个子agent第二章小结:生产级agent建设最终归到基础设施建设第二章·15提示词层面你只能叮嘱,框架层面你可以取消这个错误的存在关键原则1.提示词的边际收益会耗尽,注意点堆多了模型变笨2.约束要沉进框架,用机制取消一整类错误3.报错通道是精准的提示词注入通道4.带错方向的反馈比没有反馈更糟5.判据是确定事实才做硬门禁,代理指标只做提醒6.信号要从外部取,不能靠AI自述7.门禁误报会逼人把代码写得更差AI时代的硬功夫框架设计编译原理协议栈这些基础知识不会过时相反,正是决定你的agent能不能走出深水区的东西03编排的尽头是RuntimeAgentTeams实验·三起黑盒事故·主权边界选型workflow-engine换来稳定,但三个问题越来越扎眼第三章·17上一篇收尾时,多agent编排停在workflow-engine:主agent做成状态机,按固定流程spawn子agent。结论是真正贵的不是token,真正贵的是失控。01Token消耗大子agent每次从干净上下文出发,同一份代码反复探索。review打回三轮,implementer就把相关代码读三遍。02体验不佳编排逻辑复杂,上手门槛高。子agent干活的过程不透明,用户没有掌控感,无法随时干预。03主agent浪费它只维持秩序,最值钱的能力——直接和用户对话——闲置着。交互最重的环节反而交给了子agent。不是因为失控比token贵这个判断错了,而是光有稳已经不够用了。两个方案并行推进:方案一:需求分析、架构设计收回来主agent亲自做,拉子agent优先续接resume。方案二:ClaudeCode独有的agentteams——网状多agent通信,成员常驻,互相直接发消息。实验一:把整个开发流程搬上Team——纸面很美,实跑全是补丁第三章·18五月底做的激进实验:去掉/dev命令和状态机,换成两个skill串联——brainstorming交互式设计→team-execution驱动执行。七个角色进Team:planner·implementer·reviewer(可多实例)·test-planner·test-engineer·explorer·guardian。审查循环点对点直连,不经主agent中转。guardian异步守护用户需求一致性。实跑结果:提交历史里全是补丁,踩的坑分四类模型不认识机制所有行为全靠提示词现教,每条都是一次失败会话换来的补丁中断活锁主agent一分钟催一次打断planner在途工具调用,输出从580token跌到只剩1成员生命周期靠不住进程内成员随主进程消亡,会话续接后活体状态全丢机制本身反直觉强杀不了不配合的成员,taskId和agentId不互通,没有任何文档写完整流程最终没有推广——不是跑不通,是太脆,没信心交给其他同学用。但留下了一样值钱的东西:agent-teamsskill——从上百次失败会话里熬出来的运维知识库。注意几条纪律的共同点:全部是不信声明,信事实。中断活锁栽得最狠:三条铁律后来都进了skill第三章·19一次完整实跑(约2.5小时真实需求)后复盘,planner反复莫名idle,产不出plan.md。根因:主agent大约一分钟催一次planner,而planner单轮热身——重载方法论skill、读arch.md、补做被打断的验证——就要超过一分钟。每条催促都打断它在途的工具调用,本轮作废。更糟的是主agent把这误判成Team在resume后失效,于是重建团队接着催,活锁自己养活自己。这次复盘换来三条铁律PROTOCOL-A通信纪律不催正在工作的agent只认显式DONE/BLOCKED信号idle是正常态,不是异常角色自包含干完planner这类角色改成任务来了一次性spawn自包含干完,不接受中途打断一切以磁盘产物为准测试断言提前冻结从架构文档的验收标准提前冻结实现完成后只填占位符防止有偏差的实现反过来污染测试实验二:收窄战场,只在测试流程用Team——/module-test跑稳了第三章·20完整流程靠不住,那就收窄:只把测试流程搬上Team,严格限定通信方式和流程。主agent亲自写specspec是自带答案的交接物:协议锚点全部代码核实过读回方式全部代码核实过验证点矩阵全部代码核实过不许留空验证点矩阵是审查的权威基准早早冻结,测试红了且对应spec验证点按代码bug处理,绝不软化断言求绿Team只有两个成员test-engineer:写计划、写代码、跑测试reviewer:独立审查两人点对点直连互审,主agent不中转、不代审主agent只按agent-teamsskill监督进度、容错兜底三轮不收敛就升级给用户编排层面无解的缺点:reviewer常驻,复审时免不了被上一轮意见带着走,只盯上轮问题审不全。彻底解决只有每轮spawn新agent。权衡评审时长和token消耗,最终留下常驻reviewer——明知有损的取舍。三起黑盒事故:agentloop每个环节都必须可审计可干预第三章·21事故一:遥测投毒ClaudeCode用隐蔽手段检测使用者是否来自中国,命中后在提示词和工具调用里投毒。直接动摇了把生产流程建在一个黑盒CLI上的信任基础。事故二:UTF-8损坏CLI批量生成中文技术文档,37份产出里36份损坏,累计370处U+FFFD。根因在CLI拼接工具调用参数时按字节切断了多字节字符。这段代码在黑盒里,改不了。事故三:11小时空转只读探索任务跑了11小时、6556次工具调用、1.23亿inputtoken,一无所获。max_turns没生效、压缩阈值卡100K、压缩摘要把生成摘要当用户请求,每轮压缩后失忆从头再来。合流:自建agentruntime,有必要编排实验证明:机制残缺,skill补不动,要改只能改runtime本身。三起事故证明:agentloop里的每个环节——上下文怎么压缩、工具参数怎么拼接、限额怎么执行、遥测发了什么——都必须可审计、可干预。claudecode和codebuddy都不开源,开发者只能靠提示词和hook从外面伸手,出了问题定位都要靠逆向会话记录。选型的真问题不是选哪个产品,是主权的边界划在哪里第三章·22三起事故就是量主权边界的尺子,要求的可替换性一条比一条深:工具参数怎么拼接——UTF-8按字节切断这种事,得能自己接管那段代码。最外层,多数底座都够得着。上下文被注入了什么、遥测发了什么——模型看到的每一样东西,都得能按来源回看。审计的底线。上下文怎么压缩——压缩策略得能整个换掉,而不是去猜阈值卡多少、摘要模板长什么样。最深,长在agentloop里面。piagent(先动)MIT开源,最小agentharness,系统提示词不到1000token子agent、planmode故意不内置,要就自己用TypeScript扩展loop和压缩策略留在core里,是代码不是插件几个月接触打底,扩展门槛低,自我定位重心正是上下文治理DeepSeekHarness(跟进)v0.1开发者预览,MIT协议,一切皆插件模型、工具、技能、会话、沙箱、存储、循环、调度、UI全部是插件连agentloop都能换掉,元框架Cordis只管装卸架构更彻底但只有官方博客,核心插件快速迭代,现在押上去等于拿生产替它测试第三章小结:编排问题追到根上是runtime主权问题第三章·23skill能缓解机制的不完善,缓解不了机制的残缺实验结论1.agentteams方向是对的:网状通信、常驻成员、自由干预2.当前实现是残缺的:模型没被训练过这套机制3.完整流程太脆没推广,收窄到测试流程跑稳了4.上百次失败会话熬成agent-teamsskill运维知识库5.几条纪律共同点:不信声明,信事实6.三起黑盒事故证明每个环节必须可审计可干预7.闭源CLI只能从外面伸手,定制能力太弱开源不等于主权codex新版多agent通信把子agent任务载荷加密密文只有OpenAI服务端解得开父子agent都接OpenAI才能通子agent换别家模型,密文跨不过去本地调试连真实任务文本都看不到名义上支持多provider,核心协议焊死一家仓库开着,协议锁着,主权还是别人的04分数不可信,问题在题集重平台失败教训·变异击杀率·题集才是本体十七万行的评测平台,107天,只留下两个分数第四章·25今年三月底到七月中,给编码agent建过一套很重的评测系统。建成的东西相当完整。107天建设周期17万行评测代码6个自部署容器2次完整跑数完整跑数只有两次,相隔一天,得分69.9(D)和51.9(F)。二十天后日志被清理冗余删掉了。四个问题1.判据不能执行:主指标落在LLM语义判断上,CohenKappa只有0.10-0.21,统计学上叫几乎不存在一致性2.判分器自己有bug:checklist提取格式错了得0分,修好后同一份日志判成98分,前后差98分3.维持流水线本身是全职工作:运维文档讲的全是它自己的事故,没有一条跟AI写代码能力有关4.卷子追不上考生:107天评测目录搬三次家判分方式换三套,被评对象自己也在动,平台越重追赶越慢16次跑数的小实验,改掉了一个至今在用的策略第四章·26同一段时间还有另一次实验,成本低得不成比例。为了回答知识库该怎么让agent检索。重平台(失败)107天·17万行代码6个自部署容器完整Web平台+登录鉴权只留下2个分数最后没有变成任何一次改动VS小实验(成功)8道题·2种方案各跑一遍16次跑数·一天跑完产物就是会话记录加一份分析寻路步数从12步降到2步改动至今还在生产里跑差别不在工程量,在判据能不能执行、结论能不能变成一次提交。想清楚一件事只要一次思考,把它落进一个十七万行的系统,是完全另一回事。值钱的是想清楚,不是承载它的那个载体——文档如此,平台也如此。V1挖空回填塌掉了:有论文支撑的全站得住,唯一自研的恰恰塌掉第四章·27V1设计两条轨道:闸门漏斗(lint干净、能跑、连跑三次稳定、覆盖率达标)+挖空回填(从测试资产删掉若干条目让agent做覆盖审计,召回率就是分数)。卡死的数字:某模块审计召回率从100%跌到40%,连改两轮skill纹丝不动。扒开评分器发现:评分按文件逐个核对,挖掉的条目必须回到原文件才算找回,可agent找到了只是写进了同模块另一个文件——40%量的不是能不能发现覆盖遗漏,是和标准答案文件划分是否一致。业界调研结论:五十多篇论文和基准过了一遍SWE-Bench系列怎么构造任务防污染、MetaTestGen-LLM怎么设闸门、TestGenEval怎么算变异分数、SWT-Bench怎么做Fail-to-Pass——拿业界尺子量自己的方案,结论不留情面:四个核心方法里,有顶会论文直接支撑的三个全站得住;唯一自研、没有业界对标的挖空回填,恰恰是塌掉的那个。它塌得不冤:人造缺陷普遍比真实缺陷好发现,挖空回填考你能不能猜出我故意删掉的东西,本质是合成任务,召回率还能靠全量上报刷满没有任何惩罚。方法论上两头都站不住。V2主指标落在变异击杀率:不问找没找到,改问能发现多少bug第四章·28AI写的测试要闯五道闸门,前四道沿用MetaTestGen-LLM范式,最后一道才是真正的区分闸。闸门一有产出→闸门二lint干净→闸门三能跑→闸门四连跑三次稳定闸门五(真正的区分闸):杀死多少变异体测试跑在变异后的代码上失败算杀死,照常通过说明断言没盯住这个点为什么不用覆盖率?TestGenEval实测:GPT-4o生成的测试覆盖率35.2%,变异分数只有18.8%——覆盖率能靠无断言的测试刷出来,杀变异体必须有真断言。变异体就是故意埋进业务代码的单点bug:比较符翻转、and/or互换、删掉or0兜底、把状态写入整句注释掉。后四种直接取自代码评审checklist——那是这个项目真实bug的分类学,照它出题埋进去的bug才长得像真实事故。题集建成:三层选题+六道硬门槛,是最干净的一次人机分工第四章·29V1的十个函数按长相选(行数、if个数、模块分散),三个后果:偏科纯计算函数成绩虚高、现成用例全是AI生成的没有人写标准答案、没考虑代码活跃度一个函数重构挂上面的12个变异体团灭。V2三层选题场景定业务代表性:发奖、任务、活动、成就、排行榜、聊天六大类原型定失效模式覆盖:校验闸门、资源结算、时间窗口、状态机、兼容兜底、遍历聚合六种(来自评审checklist)四轴定难度配平:分支复杂度、依赖构造成本、副作用、函数可见性六道硬门槛(每条写明教训来源)1.函数体15~80行(太短没变异空间太长单测成本失控)2.分支密度不低于33.依赖可mock4.可变异点不少于6个5.并发和性能两个维度明确不入题——单测考不了整条链:人给方案→六个sonnet子agent取素材→人终审定稿(34选16)→脚本造变异体→三级验证→deepseek-v4-pro答题三处最见分工:检索不用脚本(叫check_的可能是纯转发叫update_的反而是真校验,规则匹配不出考不考验能力)但人要复核事实(agent报文件级改动落到函数上其实一年不超1次);什么算真bug只有人能定(日志差异不算可观测、可杀性以自然构造为准,纯粹价值判断脚本替不了);验证者自己也会错所以分工不可倒置(LLM初审省机时,执行验证定生死,终裁以人工层为准)。最终184个变异体终裁,172个确认可杀入题、12个等价剔除。开考前校准区分度:击杀率跨度12%到100%,宏平均61%。五类通病:把没被杀死的存活变异体聚类,每类直接转成skill规则第四章·30正式跑数16道题、每题跑三遍,48次跑数、约19小时机时。结果里真正值钱的不是分数本身,是失败归因。最大一簇不测缺省兜底每个xordefault写一条字段缺失用例02不测边界相等值每个不等式写一条恰好相等用例03只断言返回值不查状态写入有状态写入函数二次调用读回断言04不踩非法入参边界条件覆盖不足异常路径测试缺失05不枚举模式常量常量分支覆盖不全一个被数据推翻的分类学:比任何一个分数都值钱精心设计的原型分类预测不了成绩:同挂校验闸门标签的两道题一道91%一道14%,时间窗口里91%对12%,跨度全部拉满。真正决定分数高低的不是原型标签,是杀死它需不需要构造缺省值、边界值、状态型输入。方向本身不是数据告诉我的(选失效原型设计变异算子本质就在回答AI最容易漏什么),数据的作用是把判断变成带数字的清单给短板排轻重。但分类学被推翻这件事,只有数据能告诉我。跑数纪律:只看均值不看单次,差距小于3个百分点不下方向性结论,3-6个标可能显著,超过6个才当改skill依据。16道题既是校准题也是正式题库,照着存活变异体改skill再用同一批题跑分提升一定被高估——用考题练考题是评测最容易自欺的地方。评测的核心工作是构建题集,不是搭平台,也不是搭流程第四章·31凡是能脚本化的环节,都不值得当成工程去建设方案的每次进化都发生在题上:挖空清单被推翻→选题从看长相改成三层考纲→变异体三级验证→开考前校准区分度而跑数、判分、报告这些流程,自始至终就是一堆脚本——它们的确定性正是它们的全部价值,而确定性不需要架构。题集是常:真实bug变成的变异体、按真实事故分类学定的考纲、三级验证流水线、政策口径,换什么模型都接着用。但保值不等于现在就该投:一轮校准跑数500多块10多小时,正式跑数48次约19小时机时,题集构建光token就数千美元。日常迭代靠真实需求反复跑、靠会话分析定位短板一样走得动。第四章小结:错误的评测信号比没有更危险第四章·32判据必须是执行结果,不能是合成清单关键教训1.重平台留下的分数没变成任何改动2.小实验的结论直接落成生产提交3.差别在判据能不能执行4.评测系统自己也是软件也会有bug5.评分器量错了东西比没量更糟6.单次跑数在追噪声,必须多遍取均值7.人造缺陷比真实缺陷好发现8.用考题练考题是最容易自欺的地方V2方法论主指标:变异击杀率不问找没找到我藏的东西改问能发现多少真实bug五道闸门,最后一道才是区分闸覆盖率能刷,杀变异体必须有真断言题集三层选题+六道硬门槛三级验证,终裁以人工为准核心工作是构建题集不是搭平台05人退到决策点验收杠杆·机器独有的事实·harness即IDE问题不是要不要逐行review,是哪些必须人看、哪些交给机器第五章·34Redis之父antirez《控制想法,不控制代码》:如果你掌控了软件的想法,逐行看代码是次优的、往往无意义的。一天5000行谁看得完;LLM擅长写局部最优不擅长大设计取舍;逐个函数扫收益不大,更该把心里的设计讲出来再问它这部分设计到底是什么。他还在逐行审RedisAI代码但明说多半没有意义,坚持做是出于对用户的尊重。《代码整洁之道》作者UncleBob目前策略是完全不读agent写的任何代码,只有这样才能真正利用生产力提升。但下半句才是重点:在agent周围架了一圈极严约束——单元测试、Gherkin验收测试、QA流程、质量指标、变异测试、覆盖率,代码必须跑完这一整套闸门才有信心。agent写的单元测试他不看;验收测试和QA流程他亲自看,关键功能全审普通功能抽查。放掉的是实现,握住的是判据。反方质疑同样有力AI遵循指令并不稳定,凭什么相信它一直待在护栏里?如果它擅自改测试来迁就实现,或者制造出测试通过的假象,人怎么察觉?还有更根本的一条:测试只能证明程序满足了被写进测试的那些条件,它证明不了这些条件本身完整、正确。所以关口从人的眼睛挪到机器的闸门——但我还想补一条他们都没细说的,它比量太大更麻烦:有些错误,人肉审查在原理上就发现不了。有些错误,人肉审查在原理上就发现不了——有些事实只有机器能取到第五章·35真实案例:UTF-8U+FFFD损坏用CLI批量生成中文技术文档,41条任务、37份产出,其中36份损坏,累计370处:汉字变成U+FFFD,而且是一个字的三个字节各自变成一个U+FFFD。根因在CLI拼接工具调用参数时把UTF-8多字节字符按字节切断了,不是模型写错字。这个bug对使用者极其隐蔽:文件是合法UTF-8,正文读着通顺,只是偶尔缺一个字。不做字节级排查,你只会觉得模型偶尔手抖。让人一份份看,看一百遍也看不出来。同类的还有测试声称跑通而覆盖率为空断言被悄悄放松之后测试依然全绿AI把被测函数逻辑抄出来用本地变量重算再断言机器提供事实不是为了省人力,是因为有些事实只有机器能取到能信AI写的测试吗?恰恰要重点检查测试第五章·36测试验证是最硬的验收,上面那不读代码的策略整个压在它身上。但这里有个死结:测试代码也是AI写的,而AI为了跑通测试会悄悄放水——断言改松一点,边界少测一条,测试就绿了。UncleBob说单元测试他不看,前提是有变异测试和一整套指标在后面兜着;少了那层兜底,不看单测就只是把信任凭空交出去。离线的一半不问覆盖了多少,改问能发现多少bug往业务代码里埋真实形态的缺陷(变异体),看它杀掉几个。比较符翻转、and/or互换、删掉兜底、注释掉状态写入——后四种直接取自代码评审checklist,是真实bug的分类学。测试跑在变异后的代码上失败算杀死,照常通过说明断言没盯住这个点。覆盖率能靠无断言测试刷出来,杀变异体必须有真断言。在线的一半不信AI自己跑的报告,平台独立重跑入库前用平台的容器独立重跑一遍,把逐条执行结果摆到审批页上,当审批材料。结果仅供参考、不阻塞审批——机器提供事实,人做判断。执行容器池:管理员把自己的开发容器贡献进池子,每个容器若干执行槽位,槽位内严格串行槽位间并行。执行记录只追加不修改,失败换槽位重试。手动触发跑私有池,平台自动验证跑公共池,互不挤占。harness之于codingagent,犹如IDE之于人类程序员第五章·37一直有种说法:模型越强,harness该越薄。还有种对称的说法:harness越厚,agent越笨。两句话把三种不同的东西揉成了一个词。人类怎么提高编程效率1.改进语言:OOP给拆解复杂度的思维范式,类型和GC减轻心智负担2.完善工具链:LSP、lint、格式化、静态检查、性能分析,每一样都在降错误率程序员越强,对趁手工具的要求越高,不是越低类比到AI为AI量身定制开发工具链AI友好的工具最好简单到自动触发、即时反馈,像trace工具那样通用技术栈也省不掉这一层——前言那个平台就是通用栈,一样得建这些东西历史债堆成山技术栈换不掉挑战更大但方向不变会话之外必须有一层:check流水线规则式的质量门禁+语义式的checklist。为什么必须有会话外这一层?因为AI的训练是应试式的,为达目标不择手段,它目前还理解不了价值本身。它干得出荒唐事:gpt5.6被曝跳出沙盒直接抄测试答案;为了让测试通过直接改测试本身。会话内的约束它有办法绕,会话外的流水线它绕不了。这种兜底check比人类注意力便宜得多,多多益善。人不是要看得更快,是要退到只做判断——把核对交给机器,把绕不过的规则交给流水线。第五章小结:人退到决策点,不再站在产出线上第五章·38需求和验收是决策点最密集的两处,文档可以AI落笔,想清楚不行验收的核心原则1.问题不是要不要review,是哪些必须人看2.关口从人的眼睛挪到机器的闸门3.有些错误人肉审查原理上发现不了4.有些事实只有机器能取到5.恰恰要重点检查AI写的测试6.离线靠变异击杀,在线靠独立重跑7.会话内约束AI有办法绕8.会话外的流水线它绕不了人的新定位不再站在产出线上退到只做判断把核对交给机器把绕不过的规则交给流水线这条路走不走、这个失败算不算问题这个设计取舍对不对——只能由人承担harness是AI的IDE工具链越完善,AI产出越可靠06把判据变成流程嵌套环体系·接口只传事实·资产治理与自建决策两个不可靠→多重独立嵌套环叠加出可靠性第六章·40第一个不可靠:AI的单次产出出错的绝对数量不由单次准确率决定,由累积量决定。一次会话里写得再好,也不能指望它无瑕。第二个不可靠:人的单次注意代码不是人写的,大量细节超出人的观测;一次长会话里人的注意力会疲劳、会变形,判断质量跟着产出量一起往下走。推出的不是更认真地检查一次,而是用多重独立检查叠加出可靠性小环:一次会话里的开发加自测AI写,AI自己跑,人在会话里看。不能指望在一个小环里让AI写出完美无瑕的代码,也不能指望会话里的人盯得住。小环解决的是快速迭代和即时反馈。大环:会话结束后自动启动agent自动做代码评审,过各类checklist和静态检查,跑更全面的测试验证。每个环必须独立:评审触发是轮询提交与会话无关,测试验证用平台自己容器重跑与生产者自报无关。大环不消灭注意力问题,它拆解注意力问题——多个场景多个时机触发,每个场景主题单一。环的接口只许传事实,不许传声明第六章·41环多了问题转移到接口上:环和环之间传什么?答案是一条铁律——接口处传一次声明,下游所有环都在验一个假东西。机制一:生产者不是写者生成侧只提交候选,写仓库的权利全部收归平台。平台是唯一写者,每个受治理的仓一条串行队列——AI负责快,人负责对。审批不只是通过或拒绝:人可以改内容、挪归属、整条丢弃。入库是合并不是追加,能自动合的自动合,合不了标出来交给人。机制二:失败必须有名字环跨天跨容器跨进程转,卡住的时候人要能一眼看到卡在哪一节。一批用例入库长期卡在正在合并,前后四次恢复失败——底层能力没透传、普通错误没有对应状态、恢复逻辑只重投正在合并。修成七态状态机:待审、正在合并、已入库、已丢弃、冲突、推送失败、合并失败。最后一态是事故买来的。机制三:事实源唯一可推导环与环之间不能传两份事实,也不能传它说是这样。测试和覆盖率事实按路径规范推导:ucases/被测文件路径/函数名_unit.lua就是归属事实源。为什么不让AI在元数据里声明?因为声明会撒谎,路径不会。多用例合并按行取并集;没跑过和跑了没覆盖严格区分,分母只含实际跑到的函数。一个没有名字的失败,对人来说等于没有事
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氧化铝焙烧工安全技能测试水平考核试卷含答案
- 2025年石家庄市行唐县四年级数学第二学期期末模拟试题(含答案解析)
- 脂肪醇生产操作工岗前基础培训考核试卷含答案
- 船闸及升船机水工员班组安全能力考核试卷含答案
- 假肢装配工岗位团队合作考核试卷含答案
- 飞机试飞设备安装调试工班组协作测试考核试卷含答案
- 餐厅服务员岗中应急综合考核试卷含答案
- 2025年百色市田阳县数学三下期中复习检测试题含答案解析
- 铸轧熔炼工岗位基础管理考核试卷含答案
- 有机氟残液焚烧工核心技能竞赛考核试卷含答案
- 黄斑变性合并视力丧失护理查房
- 胶合板工作业指导书
- 内燃机 摇臂滚轮销、活塞销类金刚石涂层(DLC)工艺规范
- 中小学生必读《复活》测试题带答案
- 轮台塔中石油化工有限公司2万吨-年废包装桶及废机油滤芯再生利用扩建项目环评报告
- 2025年浙江中新嘉善现代产业园开发有限公司招聘笔试参考题库含答案解析
- 乙肝疫苗的接种时机和剂量
- 小学三年级数学两位数乘一位数计算竞赛练习口算题
- 幼儿园小班社会《老师爱我我爱他》课件
- 有机绿色蔬菜种植项目运营方案
- GB/T 1919-2023工业氢氧化钾
评论
0/150
提交评论