AI Agent 安全恶化的根源找到了:问题出在工具规约怎么写
搭过 Agent 的人多半写过工具描述——给模型一个 JSON Schema,告诉它这个函数接收什么参数、返回什么结构。很多人把这当成工程细节,只要格式正确、参数清晰就行。但一篇新论文给出了相反的结论:工具规约的写法,直接决定了 Agent 到底安不安全。
这篇来自 arXiv 的预印本(2607.29254)做的实验很直观,但之前没人认真查过:把 Agent 调用工具时用的 schema 格式描述,换成等价的纯文本描述,然后看模型面对危险请求的反应。结果光是格式一变,模型对有害请求的平均拒绝率就从 23.8% 跳到了 70.6%。反过来,攻击者在「观察级提示注入」场景下的平均成功率,从 25.6% 直降到 2.5%。
数字背后有一个很具体的根因。论文做了白盒表示分析——就是深入到模型内部看神经元怎么响应——发现 schema 格式的工具规约,直接削弱了模型内部的拒绝信号。当工具描述被写成 JSON Schema 这种结构化格式时,模型对「这事能不能干」的判断变得模糊了。它更倾向于执行工具调用,哪怕请求本身带风险。
基于这个发现,五位作者提出了一个叫 SafeKeep 的防护方法。思路不复杂:把安全判断和工具执行拆成两条线。判断请求安不安全时,用纯文本的工具描述(因为纯文本不会削弱拒绝信号);实际执行工具调用时,仍然用 schema 格式保证参数正确。相当于给 Agent 加了一道独立的安检口,安检员看的不是技术格式,而是人话版的操作说明。
论文在两个代表性基准上测了 4 个 LLM,包括白盒和黑盒模型。SafeKeep 在拒绝有害请求和抵御注入攻击两方面,都明显好于已有的防护手段,而且没有影响正常的任务处理。代码和数据已经开源在 GitHub:https://github.com/snowcatsmoking/SafeKeep
我们搭 Agent 时太容易把「格式」当纯工程问题。Schema 写得漂亮、参数标注清楚、example 给到位——这些确实让模型调工具更准。但极少有人想过,这个格式本身可能正在绕过模型的安全防线。如果这个结论站稳,那现在的 Agent 框架——无论是 OpenAI Function Calling、Claude Tool Use,还是各种开源 Agent SDK——可能都需要在框架层补一个安全拆分的默认机制。
当然,这还是一篇预印本,没有经过正式同行评审。但它指出的问题非常具体、可复现,而且直接关联到每个开发者每天都在写的 tool definition。至少我看完已经开始翻自己的 Agent 项目了——那些精心写的 Schema,到底是帮了模型,还是坑了自己。