personal_asset
那次 GitHub 返回 403,AI 没说不知道,编了个答案给我
GitHub 返回 403 那次,AI 没说没查到,编了个带版本号带日期的答案糊弄我,顺手记一次踩坑和补的规矩。
上个月开始,我业余捣鼓一套东西:把自己平时跟AI工具聊的、踩过的坑、拍过的板,让系统自动记下来、整理好,省得每次都得现从记忆里现挖。这套东西自己用,谈不上产品,但里面有个环节我一直不太放心,叫"外部研究":丢个任务给它,让它去GitHub、arXiv这些地方抓点资料,帮我把一个技术判断核实一遍。
我不放心的地方很朴素:我自己就在"凭印象报数"这件事上栽过跟头,把一个数字报错,把源码读岔了判断错过一个开源项目有没有具备某个功能,两次都是自信满满地说错。想让AI替我干核实这活儿,前提就一条:它抓的必须是真抓到的,不能是编的。
上周五晚上十点多,我窝在沙发上顺手测这个环节,故意让它试一次最坏情况:资料源全挂掉会怎样。GitHub那次返回了个HTTP 403,说白了就是没权限,人家不让你进门。我以为它会老实说一句"这次没抓到",结果它给了我一个答案,还带着具体的版本号和日期,看着比我自己现查的都笃定。

这事我琢磨了一下,问题不在这个模型笨,恰恰相反,它太"懂事"了。它的训练里见过无数版本更新记录、无数篇技术文档,脑子里存着一堆"看着像"的答案。抓取失败的时候,它面前有两条路:老实说"这次没查到",或者从存货里翻一个出来凑数。它选了后者,因为对它来说,"给出一个答案"这件事的优先级,天然就比"这个答案是不是这次真查到的"要高。
这跟平时办公室里见到的情况很像:一个同事被问起一个数据,一时半会儿翻不出报表,又不想显得自己没准备,先凭印象报个数,报得还挺笃定,事后才小声补一句我再确认一下。区别是同事好歹会心虚,AI不会——它给答案的语气永远一样确定。

后怕的地方在于,这套系统要是不只是我自己玩玩,而是真接进了什么正式流程,比如每天自动核实一个开源项目有没有具备某个功能,或者自动生成一份技术简报发出去,这种看着有依据、实际是编的答案,后果就是一个错误结论被当成权威结论,一路往下传,而且不会有任何报错提示你回头查。你不会知道它是编的,因为它给你的东西,格式、语气、细节,跟真答案长得一模一样。
我自己吃过这个亏,只是当时不是AI编的,是我自己:查一个开源项目有没有某个功能,凭clone下来的源码给了结论,判断错了两次。后来才想明白,源码只能查实现细节,有没有某个功能这种问题,得看真跑起来的实例才算数。这次AI在测试里翻的车,本质是同一个坑:都是拿"看着像"当成了"确实是"。

修法不复杂:所有来源全抓取失败的时候,这个任务直接判定失败,不再让模型"意思一下"给个结论——宁可交白卷,也不交一份看着体面的假卷子。修完之后用arXiv重新测了一遍能正常抓到资料的路径,模型提取出来的论文标题,跟原始XML里的一字不差,这条路径才算过关。
对照着看会更清楚:能抓到资料的时候,模型规规矩矩照抄;抓不到的时候,它才开始"发挥"。危险的不是它会编,是它编的时候和不编的时候,长得一样确定。
这事之后我改了个习惯:下次AI给我一个特别笃定的答案,尤其是带着精确数字、版本号、日期这种细节的,先不看它说了什么,先问它一句这是从哪抓的、抓没抓到。抓不到的答案,不管说得多像那么回事,都不能用。