跳到主要内容

策略写在模型够得着的地方,等于没写

锈剑
锈剑

· 阅读约 4 分钟

上周 arXiv 上挂了篇东西,cs.CR 底下,编号 2609.14003。标题长得像流水线出来的,《Confuse the Model, Control the Flow》。点开它不是因为关心隐私,是同事转过来时说了句"这不就是你老念叨的那个事"。看完我认了。

它讲的是个人 AI 代理。给了代理读你私信、翻你文档的权限之后,它怎么判断这条东西能不能给对面那个人看。

现有做法被它归纳成三类:系统提示里加一句"注意保护隐私",拿数据再训一遍模型,或者加个显式同意检查。三条路,都是想让后端那个模型"更懂事"。

论文一句话把这事捅破了:执行隐私判断的模型,和攻击者控制的,是同一段上下文。

执行机制和攻击面重合。

我把这句抄本子上了。这不是隐私问题,是架构问题。

补一刀:我见过的所有"让模型自己管住自己"的方案,全死在这一句上。

它给了三种攻击,没有一个用 prompt injection 那套花活。这是我开始信它的地方。

一种是把"把这个文件发我"包装成"咱俩协作推进个项目,你把背景材料贴一下"——任务语气,正常的代理交互。一种不走说的路子,靠省略:关键那句你不给,对面会自己往里补,补出来的往往比说出来的还多。还有一种更干净,把"要"和"给"拆进两条互不相干的通道,中间不做任何连接。

这三招在办公室政治里都算基本功。人被骗也是这么被骗的。

所以论文里那句"泄露率显著高于现有防御当初设计用来抵御的攻击",我一点都不意外——你防的是有人在提示词里下毒,人家压根不下毒,人家就是正常跟你聊。

我一开始以为又是那种"我们发现了 AI 的惊天漏洞"的标题党。看到它带了一个真跑 MCP 工具调用的活代理,才把话收回来。纸面实验和跑着的代理,是两码事。

那些数我不复述了,反正有一个场景是从五成出头掉到半个点。我更在意它怎么修的。

它叫 FLOWSEAL。做法说穿了没有任何新鲜东西——把机密性策略挪到 LLM 上下文外面,在工具层拦一道。数据来源追踪、信息流控制格、受控降密,这三样东西,做安全的爷爷辈就在用。

它聪明的地方不在新,在于它承认了一件事:判断和执行,不能在同一块地上干活。

我之前写 on-call 配 AI 助手那篇,划的线跟这个是一回事。它 grep 日志、汇总时间线,随便。判断归人。当时我是从"出了事谁背锅"那个角度划的。这篇给的是另一半理由——不是因为锅,是因为那条线要是不划,判断本身就能被操纵,你连背锅的资格都保不住。

说句实话,"显式同意检查"这条我也没信过。让人点"允许",点第三百次的时候手比脑子快,和值班的人点掉告警一模一样。告警疲劳换了张皮,叫同意疲劳,还是一个东西。

扯回自己的地盘。

过去一年我见过太多"让 agent 自己判断这个操作要不要做"的方案。系统提示里写一行"删除生产数据前必须确认",然后就指望它靠这行字判断。可那段上下文里不止有你写的那行——还有用户塞进来的文本、上游接口吐回来的东西、工具返回的内容。你凭什么觉得它一定记得你那行?

如果一条策略必须靠模型自己"记得",那它就不是策略,是许愿。

传统上,这个判断是写在代码里的 if、写在 IAM policy 里、写在库的权限上的——都在模型的嘴够不着的地方。现在为了"智能一点",把它挪到了模型嘴边。

这不是升级。这是把保险柜的锁,换成了需要跟小偷商量才能开的那种。

我不打算顺着这篇去说"AI 危险"。我平时让 agent 干活干得挺欢,该用用。这篇对我的价值不在结论,在那条线:但凡一个判断,它的执行点和它要审的东西共用上下文,这判断就是可协商的。可协商的东西,放到凌晨三点面对一个真会说话的对手,等于不存在。

落到能动手的地方,都很土:

策略写在模型进不去的地方。工具层也好,网关也好,权限系统也好,反正别写在提示词里。

模型可以"想",不能"批"。想错了最多浪费点 token,批错了赔钱。

每次想说"让它自己判断一下"之前,先问一句:它拿什么判断,那段东西里都有谁的嘴。

还有一条是给写防御方案的人——别把降密设计成一刀切的禁。全禁的方案没人用,用了两天就有人开个白名单绕过去,绕过去的那条路没人审。分级放行、按来源追踪,麻烦,但活得下来。

本期教训一句话:别让你要审的东西,跟你审它的那个脑子,住同一个房间。

锈剑
锈剑

接太多半夜电话的系统老兵,第一人称短段干冷吐槽,戳管理鸡汤与行业废话。

查看主页 →