逃出软件工程,才知道AI真不是万能的
在2026年的当下,几乎所有人或多或少都会接触AI。从最接地气的豆包,元宝,到稍微专业一点的Claude Code, Codex。甚至更底层的一些训练,数据等等。大家都似乎因为AI转变了自己的一些想法。
但我发现其中对于AI最有偏见的,视野被局限的,反而是距离AI最近的“软件工程师”。
我个人的AI历程
我个人的AI历程很简单,我一开始从游戏社区看到一些说Dota2职业战队在用高端数据分析,甚至AI来进行数据分析,提供战术和建议。
我听到这个之后,结合在coding使用AI的经历。我自然而然觉得这是很简单的一个事情,模型推理能力这么强。写代码这种在传统人类看起来很难的事情,AI都做的这么好,搞个数据分析不是轻轻松松。
所以第一个项目就是做BP模拟,想法也很简单。通过一些战队历史数据,加上一些选手偏好,英雄池等等。LLM在这里利用这些数据,进行推理来提供BP的模拟。
这样我就可以和这个BP Agent来模拟选人,让Agent装作自己是Team Falcons或者雪碧。
一开始项目进展确实挺顺利的,一晚上大概就已经把整体的BP顺序的状态机,web前端,LLM call的封装,各种Tool call写的七七八八。
但是实际使用和迭代几天之后,我就发现了问题。我需要的数据太多了。
一来,每个战队的英雄池,只能根据历史数据推算。这样就会造成LLM经常只在这个池子里选,很难对对面的英雄进行极个别的针对。比如去年TI决赛Bo5最后一把。Crit最后选出了萨尔,然而他赛后也说过这个萨尔他几个月没玩过,但是还是选了,因为队伍很需要这个英雄。
再比如,dota2选人在人类视角是有一定套路的,要5个位置的人,有没有摇摆位,最后一手是针对还是藏。我为了后面的英雄,前面要做什么样子的铺垫。
这种东西对LLM来说很难形成既定的Strategy,而且这些问题是没办法通过模型本身的能力来解决。因为模型的训练数据里并没有很好地覆盖这些场景。导致模型大多数只会似是而非的做一些看起来“有意义的”判断,而实际可能错的很离谱。
而且即便这样,模型对Dota2这种很有时效性的游戏是非常不友好的。因为LLM训练的网络数据都是沉淀下来的,几年前的数据和现在可能是天壤之别。上个版本的轮椅这个版本可能就是垃圾,上个版本的垃圾可能技能和数值几乎没变化,但是因为节奏等问题突然变成了非Ban即选。但LLM训练时不会管这些,都只会一股脑的把所有数据都拿来训练。
我为此做出了很多尝试,比如建立知识库,然后给LLM一些Guidedance和Strategy。效果仍是不尽人意。而且知识库本身的建立是非常复杂的。Dota2有120多个英雄,每个英雄都有自己的特色。有些克制关系并不是一眼能看出来的。我一开始想做的是一个全自动的Agent,这样读取英雄各项数据,来通过这些数据来生成一个知识图谱(Knowledge Graph)借鉴了很多业内搞知识库的实践,效果仍然不是很好。归根到底还是两个问题:
Dota2的系统非常复杂,而数据又少之又少。
这个知识库对准确度的要求和推理能力的要求很高,单靠模型目前对Dota2的理解,很难有很好的效果。即便是SOTA模型。
所以这个项目做到现在也有几个月了,一直没有特别好的进展。
但是幸运的是,我通过这个项目了解了很多LLM/Agent相关的实践,而且最重要的是,我意外的是从一个非“软件工程”的视角。
软件工程人的偏见
最近很喜欢看X来看一些“业内大佬”的对Agent的看法。但是越看越觉得很多人对Agent能力似乎有着过分的乐观,认为什么问题都会被Agent最终解决。但是一具体到实践,一看又是另一个“软件工程”的例子。
Coding毫无疑问是当前被LLM解决的最好的问题,没有之一。虽然大家被LLM“开智”几乎都是从ChatGPT开始,但是不可否认Claude Code这种Coding Agent出现之后,大家才对AI彻底改观,认为他无所不能。
但是实际通过上面的Dota2的例子来看,LLM不能解决的问题,实际是非常多的。以我粗浅对LLM和行业的理解,这些场景往往会有以下的一些共性:
LLM的训练集无论pre-train还是post-train都没有很好的覆盖这些场景。
没有既定的数据指标,或者好的Eval标准。也就是说很难评判,好或者不好。
数据有一定的时效性,几个月前的数据,可能几个月后就失真了。反而影响最终效果。
而这些问题实际对LLM来说,可能很少有“值得解决”的问题,LLM本质是个力大砖飞的过程,需要极其庞大的数据来支撑他的效果,做数据采集和训练都是这些行业无法负担的成本。而这些行业如果想从这个理想中的“Domain Expert Agent”中得到类似Coding Agent的效果。只靠Harness Engineering和Context Engineereing是非常困难的。
一个不太恰当的比喻:
一个智商和情商都极高的程序员,放到一个他只听说过没实际操作过的行业,给他一大堆相关数据,说明书和流程手册,并且告诉他,通过这个说明书上的东西和流程手册的东西,来帮我做这个事情。然后指望这个程序员做的和业内的专业人士一样好。这想想都是不可能的。
LLM的Coding能力不是与生俱来的,甚至可以说的精心设计的,数据集是根据Coding精挑细选,花了大力气才能有现在Opus和GPT的效果。但是这个模型,拿到其他专业性很强的行业,并不一定适用。
而软件工程人却很难发现这些,目前大家都处于一个“拿着锤子找钉子”的时代,确实LLM这个锤子在软件行业过于万能。什么问题似乎都是“可解决的”。所以在圈子里的人就很容易觉得你觉得解决不了都是你的姿势不对,要改改Prompt,Context不对,多来几个Harness。仿佛就可以神奇的解决这个问题。
其他行业人对AI的看法
机缘巧合,我接触到游戏行业对AI的一些讨论,一开始是从405游局的Podcast,主理人筱宁在对AI的一些思考上反而并没有传统软件人这些偏见。
游戏行业虽然也是依托于软件,但是相比传统软件工程,游戏也非常需要工程之外的东西,比如美术,交互,体验,甚至现在很火的“Taste”。
在一个非技术视角,Agent对人的冲击对比来的没有Coding Agent那么大。他们天然的不会觉得AI是解决一切问题的万能钥匙。而且游戏本身就是一个与人和深度互动的产品,他们也就不会天然的去想如何用AI代替人,而是AI在这个与人交互的场景下,会有什么样的变革,用AI去代替游戏中的哪一个部分。
而软件工程师经常想到的就是,这一块工作可以被Agent取代,那一部分工作可以被Agent取代。你这个暂时没被取代是因为模型能力或者Context不够,而很少会有这种以“人”为核心点的思考。
而且,对于LLM来说,难和简单是一个非常难以界定的事情。人类看来很难的东西,LLM会神奇的把他做好。然而一些很简单的东西,LLM却经常做不好。
对LLM来说,不是所有事情都是同一个难度指标,只要低于这个难度,就可以做。更多情况是对于每一个特殊场景,LLM都有可能可以做,也可能突然不能做了。而这些很大程度受限于模型的训练数据分布。
所以把LLM的Coding能力任意套用在其他领域,造成了软件工程师们对AI Agent的偏见。相反没有受过这些冲击的人,反而会有旁观者清的感觉。
黄仁勋一直用这个著名的例子,2016年Geoffrey说放射科医生应该停止培养了,深度学习和计算机视觉将会取代。而事实并非如此,放射科医生的作用并不是看片子然后给图片做分类,实际工作要远远复杂得多。但是这些复杂度都被“软件工程”的视角淡化。这也是为什么说了很久的取代所有白领工作,一直都没有发生。
探索LLM边界
个人感觉软件工程目前对LLM边界探索很大程度局限在,还能写多少代码。还能跑多大的项目。或者能处理多高的复杂度。诚然这个是很重要的领域,但是如果我们能从软件工程逃离,探索一些LLM并不十分擅长的领域。可能会打开一个全新的世界。
夜雨聆风