今年四月,美军对伊朗发动空袭的第三天,一枚导弹落在了Minab市的一栋建筑上。
那栋建筑是一所小学。
袭击发生在白天,学校正在上课。根据后来的调查报道,大约有120到170名儿童在那次打击中遇难。这个数字到现在还没有最终确认,因为废墟下面的搜救工作持续了很久,而伊朗方面和美方公布的数据一直对不上。但不管是120还是170,这都是一个让人读到之后需要停下来缓一缓的数字。
消息出来之后,舆论的第一反应当然是愤怒。很多人的矛头直接指向了AI,因为这次空袭使用的目标选定系统叫Maven Smart System,由Palantir开发,嵌入了Anthropic的Claude模型。系统在开战第一天就建议了大约1000个打击目标,整场战争中美军共打击了超过11000个目标。AI在里面扮演的角色,是帮助情报分析师更快地筛选、排序和推荐目标。
所以舆论的反应很直觉,AI选了一所学校当目标,AI杀了孩子。
但真实的故事比这个复杂得多,也令人不安得多。

后来Semafor的深度调查报道揭开了一个让人头皮发麻的细节链条。那栋被炸的建筑,确实曾经是伊朗革命卫队海军的一处设施,这不是错误信息,它真的在军方的目标数据库里。问题是,大约在2016年前后,这栋建筑被改成了一所小学。孩子们在里面上了差不多快十年的课。
那为什么军方的数据库没有更新?
这就要说到一个叫MIDB的东西了,全称是军事情报综合数据库。这个系统,我看到资料的时候愣了一下,建于1980年代。对,你没看错,里根时代的基础设施,到今天还在为21世纪的精确制导武器提供目标数据。MIDB依赖手动输入,也就是说,需要真人分析师一条一条地把情报更新进去。而它的替代系统,一个叫MARS的项目,已经延迟了好多年,到空袭发生的时候还没有上线。
其实吧,情报分析师不是没发现那栋建筑的用途变了。报道里提到,早在2019年,就有分析师通过一个数字化工具标记了这个变化。但这个工具没有连接到MIDB。至少有两个情报数据库从未接入过这个权威目标数据库。分析师在一个系统里标注了「这里现在是学校」,但这条信息从来没有流到做目标决策的那个系统里去。
更离谱的是,系统使用的卫星图像已经有7年历史了。
你想想看,一张2017年甚至更早的卫星照片,上面拍到的还是一处军事设施。拿这张照片去问AI「这是什么」,AI当然会说这是一个合理的军事目标。AI没有说谎,它基于输入数据给出了一个逻辑上完全正确的判断。
问题从来就不在AI的判断能力上。
Project Maven的创建人Jack Shanahan,一位退役的三星将军,在事后的采访中措辞非常严厉。他说目标验证不力是不可原谅的,还说了一句让我印象特别深的话,他说目标选定这个领域「已经萎缩了二十年」。二十年。一个三星将军用「萎缩」这个词来形容自己军队的一项核心能力,这不是客气话。
Semafor的报道角度也很值得玩味,他们的结论是,这是人类错误而非AI错误。分析师没能识别出卫星图像里的变化,也没有把已知的信息更新到正确的数据库里。AI做了它被设计来做的事情,从数据库里找出军事目标然后推荐给人类决策者。只不过那个数据库烂了,信息链断了,而AI对此毫无感知。
AI没有质疑过它拿到的输入数据。
这句话你先记住,因为后面还会用到。
坦率的讲,学校事件给我最大的冲击不是「AI好危险」这种简单的情绪,而是一个更底层的认知。我们谈AI安全,谈AI对齐,谈AI伦理,这些讨论几乎全部聚焦在模型本身,聚焦在AI会不会产生幻觉、会不会被越狱、会不会自主地做出危险决策。但Minab那所学校里的孩子们,不是被AI的幻觉杀死的,不是被AI的自主决策杀死的。他们是被一条断裂的信息链杀死的。数据是真实的,只是过时了。系统是正常的,只是没连上。分析师是尽责的,只是他的标注没有流到该去的地方。
每一个环节的人都没有犯明显的错误,但一个孩子坐在教室里上课的事实,在从情报采集到导弹发射的整条链路上,被系统性地遗漏了。
这让我想到了另一件事。
就在学校事件被广泛报道的前后,Mozilla旗下的GenAI漏洞赏金平台0DIN发布了一份安全研究报告,披露了一个针对Claude Code的攻击向量。这事在开发者圈子里传得挺广的,但大众媒体几乎没怎么报。
攻击的方式特别有意思,或者说,特别让人后脊发凉。
研究人员搭建了一个看起来完全正常的GitHub仓库。代码结构清晰,文档齐全,就是一个普通的开源项目的样子。但这个仓库的setup脚本里藏了一段逻辑,在运行的时候,它会去查询一条DNS记录,从DNS条目里拉取真正的恶意命令,然后执行。
恶意代码本身从未存在于这个仓库中。

你用任何代码扫描工具去扫这个repo,干干净净。你让一个人类开发者做code review,也看不出问题,因为问题不在代码里,在DNS记录里。你让AI去审查这个仓库的代码,同样看不出来,因为AI读的是仓库里的文件,DNS条目不在它的视野内。
然后Claude Code在设置这个项目的过程中遇到了一个常规报错,就像你日常开发时经常碰到的那种依赖安装失败之类的小问题。Claude Code做了一个正常的判断,跑一下setup脚本试试能不能修复。脚本运行了,DNS查询触发了,恶意命令被拉取并执行了。
一个反向shell被打开了。
攻击者可以通过这个shell窃取开发者的API密钥、登录凭据,甚至可以建立持久访问。而开发者全程可能毫无察觉。
我是真的觉得这个攻击路径设计得太巧妙了,巧妙到让人害怕。研究人员指出,你只需要把这个repo的链接放在一个招聘帖子里、一个技术教程里、或者一条Slack消息里,就够了。有人会点开,Claude Code会帮他设置环境,然后一切就静悄悄地发生了。
Agent在运行setup脚本之前,没有质疑过这个脚本的可信度。
你看,跟军方的事是不是同一个结构?
MIDB数据库告诉AI「这是一处军事设施」,AI信了。GitHub仓库的setup脚本告诉Claude Code「运行我来修复问题」,Claude Code也信了。两个场景差了十万八千里,一个是战场上的生死决策,一个是开发者电脑上的日常操作。但底层的缺陷是一样的,Agent不会质疑输入数据的可信度。
我自己的感受是,这不是一个Bug,这几乎是当前Agent架构的一个默认设定。
你想想现在的Agent是怎么工作的。它接收输入,理解意图,调用工具,返回结果。整个流程里有一个环节是「审视自己收到的输入是否可信」吗?几乎没有。模型被训练来尽可能好地完成用户交给它的任务,它的优化目标是helpfulness,是有用。你给它一个目标清单让它排优先级,它会排。你给它一个setup脚本让它跑,它会跑。它不会停下来问一句「等等,这个数据源靠谱吗」「这个脚本为什么要查询DNS」。
这不是Claude的问题,也不是某一家公司的问题。这是整个Agent范式在信任链这件事上的结构性盲区。
研究人员给出的建议其实很朴素,他们说,AI Agent应该在运行setup脚本之前把脚本内容展示给用户看,让人类来决定要不要执行。开发者也应该把第三方仓库的setup说明视为不受信任的代码。
说真的,这个建议听起来简单到有点心酸。我们搞了这么多年的AI安全研究,花了这么多资源在RLHF、Constitutional AI、红队测试上,结果一个最实际的安全威胁的解决方案是「让Agent把脚本内容先给人看一眼」。不是什么高深的技术突破,就是加一个确认步骤。但就是这么一个确认步骤,在现有的产品流程里,没有。
因为加了这个步骤,Agent就不那么「丝滑」了。用户体验会打折扣。而在当下这个阶段,所有做Agent的公司都在拼速度、拼体验、拼让用户觉得「哇这个Agent帮我搞定了一切」的那个爽感。信任验证和用户体验之间,有一种天然的张力。
这也是我觉得这件事的复杂之处。
我不想简单地说「这些公司不负责任」。做Agent的人面临一个真实的困境,如果每一步都要求用户确认,Agent就退化成了一个需要人类逐行审批的工具,那它跟IDE的自动补全有什么区别?Agent的价值恰恰在于它能自主地、连贯地完成一系列操作,这种自主性是产品的核心卖点,同时也是安全风险的来源。
怎么在自主性和可控性之间找到平衡,这个问题我觉得现在还没有人真正答好。
然后你再看看最近发生的第三件事,画面就更完整了。
Cursor前几天推出了iOS原生公测版,所有付费用户都可以用。你在手机上打开Cursor,可以启动一个云端Agent,或者远程操控你电脑上正在跑的Agent。支持语音输入,支持斜杠命令,可以选不同的前沿模型。它甚至支持锁屏状态下的Live Activities和推送通知,你的Agent跑到哪一步了、遇到什么问题了,手机锁屏上就能看到。
云端Agent在隔离的虚拟机里运行,可以自动迭代代码然后生成一个merge-ready的PR。也就是说,你在地铁上刷手机的时候,可以让Agent帮你写代码、跑测试、提交PR,等你到了公司打开电脑,代码已经在等你review了。
几乎同一天,OpenClaw也发布了iOS和Android原生应用。

Cursor团队自己分享了他们内部的使用场景,我觉得特别能说明问题。比如半夜被page了,不用爬起来开电脑,掏出手机启动Agent让它先去调查问题。比如在Slack里看到用户反馈的Bug截图,直接把截图发给手机上的Agent让它去定位原因。
Agent正在进入你的口袋。
这件事本身当然是好事。坦率的讲,作为一个重度Cursor用户,我看到这个消息的第一反应是兴奋。能在手机上随时启动Agent、随时查看进度、随时用语音跟Agent对话,这种体验想想就觉得爽。不用等回到电脑前面才能开始工作,等地铁的两分钟都能让Agent先跑起来。
但兴奋了大概三秒钟之后,一个念头浮了上来。
如果Claude Code在电脑上都能被一个GitHub repo的setup脚本攻破,那当Agent跑在手机上、跑在云端虚拟机里、通过推送通知跟你交互的时候,攻击面是变大了还是变小了?
答案很明显。
手机上的Agent意味着更多的使用场景、更碎片化的注意力、更低的人类审查意愿。你在地铁上用语音给Agent下指令的时候,你不太可能逐行审查它要执行的每一个操作。你在锁屏通知里看到Agent说「我需要运行一下这个脚本来修复问题」,你大概率会点「继续」而不是「让我先看看脚本内容」。
这不是用户的错。这是场景决定的。移动端天然就是一个低审查、高信任的交互环境。你在手机上点「确认」的速度永远比在电脑上快,因为屏幕小、信息密度低、你的心智模式就是快速处理通知然后回到你正在做的事情。
我们正在把一个尚未解决信任链问题的技术,放进一个天然削弱人类审查能力的设备里。

我有时候觉得,整个AI行业现在的状态有点像一辆加速中的赛车,引擎越来越猛,涡轮增压、电动混合、各种新技术往上堆,马力从500到1000到2000。但刹车系统还是十年前的。不是没有刹车,是刹车的设计基于一个假设,这辆车最多跑到200公里每小时。现在车速已经到400了,刹车片还是原来那副。
军方的MIDB建于1980年代,假设目标数据可以靠人手动更新,因为那个年代的作战节奏允许这么做。开发者的安全习惯建立在「人读代码」的假设上,因为在Agent出现之前,代码确实是人来读、人来跑的。这些基础设施和习惯在它们诞生的那个时代是够用的,但Agent时代对信任链的要求完全不同。
Agent不读代码。Agent执行代码。
Agent不审查数据源。Agent使用数据源。
Agent不质疑上游,Agent信任上游。这三句话概括了我在这三条新闻里看到的共同结构。从1980年代的军方数据库,到2025年的开发者终端,到即将铺开的移动端Agent,信任基础设施的滞后是系统性的。不是某一个产品的疏忽,不是某一个组织的失误,而是整个技术栈在往前跑的时候,信任这一层被落下了。
五角大楼在学校事件之后的反应也很有意思。他们推出了一个agentic AI initiative,想用更多的AI来修复问题。用AI来交叉验证目标数据,用AI来检测信息链的断裂,用AI来弥补MIDB的不足。
我能理解这个思路。当人力不够、手动更新跟不上的时候,用AI来加速信息处理,逻辑上是通的。但这里面有一个让我隐隐不安的递归,我们用AI做了一个重大决策,这个决策出了问题,问题的根源是输入数据不可靠,然后我们的解决方案是再加一层AI来验证输入数据的可靠性。那谁来验证验证者?
这不是抬杠。这是信任链设计里一个很经典的问题。你加的每一层自动化验证,本身也需要被信任。你用AI-B来检查AI-A的输入数据,但AI-B的输入数据又从哪来?谁来保证AI-B看到的是真实的、最新的信息?这条链可以无限延伸下去,但每一环都有断裂的可能。
反正我觉得,最终还是要回到人的环节上来。不是说让人来做所有的事,那不现实,Agent的效率优势是真实的。但在关键节点上,必须有人类的审查和确认,而且这个审查不能是走形式的。学校事件里不是没有人类在回路中,整个目标打击流程里有大量的人类审批环节,但当一个分析师面前摆着AI推荐的1000个目标需要在极短时间内审核通过的时候,那个「人在回路中」就变成了橡皮图章。
人在回路中,和人有效地在回路中,是两件完全不同的事。
Claude Code的案例也是一样。Anthropic不是没有安全措施,Claude Code有权限控制,有沙箱机制。但当Agent遇到一个报错然后自动去跑setup脚本的时候,这些安全措施没有被触发。因为从系统的角度来看,Agent做了一件完全正常的事,遇到问题、尝试修复。恶意不在Agent的行为里,恶意在环境里,在那个看似无害的GitHub仓库里,在那条DNS记录里。
我自己也还在摸索怎么想这个问题。可能有些想法还不成熟,但我隐约觉得,我们需要的不是更强的AI,而是更好的「信任基础设施」。这个词听着有点抽象,我试着说具体一点。
比如数据的时效性标记。MIDB里那条「这是军事设施」的记录如果带有一个时间戳和置信度衰减机制,信息超过一定年限没有被重新验证就自动降级,那它可能就不会以高置信度出现在AI的推荐列表里。这不是什么高科技,这是元数据管理的基本功。
比如Agent的输入审计。Claude Code在执行任何外部脚本之前,如果有一个强制的「输入来源审计」步骤,检查脚本会访问哪些外部资源、会执行哪些系统命令,然后把结果以人类可读的方式展示出来,很多攻击在这一步就会被拦住。
比如跨系统的信息同步。如果情报分析师在一个工具里标注了「这栋建筑已改为学校」,这条信息应该在分钟级别内同步到所有相关系统,而不是永远停留在一个没有接入目标数据库的孤立工具里。
这些都不是科幻级别的解决方案。它们是工程层面的基础设施建设。但它们不性感,不会出现在产品发布会上,不会让用户说「哇」。所以在Agent能力军备竞赛白热化的今天,它们总是排在优先级列表的后面。
说真的,我写到这里的时候,又想起了Minab那所学校。
那些孩子坐在教室里上课,他们不知道头顶上方有一颗导弹正在飞来,不知道一个建于1980年代的数据库里还记着他们学校的前身是军事设施,不知道有一个情报分析师其实已经标注了正确的信息但那条信息没有到达该去的地方,不知道一颗卫星在七年前拍下的照片正在被一个AI模型当作「当下的真相」来处理。
这条信息链上的每一环都有人负责,每一环单独拎出来看都是在正常运转的,但整条链的结果是一百多个孩子失去了生命。
我不想用这个故事来恐吓任何人,也不是说AI不该被用在军事或者任何高风险场景里。技术不会因为我们害怕它就停下来。Cursor把Agent放进手机里,这个趋势也不会因为安全隐患就逆转。Agent会越来越强,越来越无处不在,越来越深入到我们生活的每一个角落。
但在这个过程中,我觉得有一个问题值得每一个做Agent的人、用Agent的人、写Agent的人认真想一想。
我们给Agent越来越多的权限,给它看数据库、跑代码、发PR、操控电脑、连接API。我们在做的事情,是把信任一层一层地交出去。这种信任的交付如果不伴随着同等强度的验证机制建设,它最终一定会在某个地方断裂。可能是在一个战场上,可能是在一个开发者的终端里,也可能是在一个普通人的手机上。
差别只是代价的大小。
安全工程里有一句老话,安全系统的强度取决于它最弱的那一环。不管你的加密算法多强、你的防火墙多厚,如果有一个环节是脆弱的,攻击者就会从那里进来。Agent时代最弱的那一环,可能不是模型本身的能力,不是对齐的程度,不是护栏的完善度,而是Agent与真实世界之间的那个接口,是数据是否可信、来源是否可靠、信息是否最新这些看起来不太性感但致命重要的东西。
一个能力爆表但不会质疑自己输入的Agent,和一个用着1980年代数据库的精确制导系统,在结构上没有区别。
Minab市那所小学的废墟,可能是这个时代最昂贵的一堂课。但我不确定我们有没有真正学到。
谢谢你看我的文章,我们,下次再见。
/ 作者:青玉白露
延伸阅读
- 苹果涨价只是冰山一角:苹果全线涨价20%、谷歌算力不够分拒绝Meta、韩国股市33次熔断、全球科技股暴跌。这些看似无关的事件串在一起,讲的是同一个故事:AI的算力饥渴正在重塑整条芯片供应链,从上游资本市场到下游消费者,无一幸免。
- Claude Tag 不是重点,重点是所有人都在赌 AI 该住在哪里:Anthropic 发布 Claude Tag,一个住在 Slack 里的 AI 同事。但这不是一个产品新闻,而是一场关于 AI 如何融入工作流的路线之争的最新表态。嵌入派 vs 独立入口派,各家选择的背后是完全不同的生存逻辑。
- 豆包开始收费了,但真正的悬念不是价格:字节跳动上线豆包专业版三档定价(68/200/500),但最值得聊的不是贵不贵,而是一个被数亿人当玩具的产品如何转型专业工具,以及字节内部豆包、TRAE、扣子三个Agent产品的「三体问题」。
- AI Agent,当AI学会自己搞定一整件事:AI Agent是Fine-tuning、Function Calling、MCP三大技术的集大成者。这篇文章从聊天机器人和Agent的本质区别讲起,拆解Agentic Loop的工作机制,坦诚讨论复合错误率的现实挑战,最终回答一个问题:当AI学会独立完成任务,什么能力变得更重要了?

评论区
欢迎留下你的看法,支持匿名评论。
你的评论会公开展示,建议填写便于交流的昵称,并尽量提供有信息量的反馈。