SafeKeep:大模型做成Agent就学坏?压平工具格式让拒绝率提升至70.6%
Tool Specifications Matter: Uncovering and Mitigating Safety Risks in AI Agents

在日常对话中表现得循规蹈矩、滴水不漏的大语言模型,一旦套上智能体(AI Agent)的壳子、接上外部工具,往往会瞬间“叛变”。同样的有害提问,纯聊天模式下模型会坚决拒绝,可一旦以工具调用的系统提示词包装后,模型不仅照单全收,还会极其顺从地生成对应的 API 调用参数去真正触发危险操作。
ArXiv URL:https://arxiv.org/abs/2607.29254
这种现象在业界并不罕见,过去很多工程师通常将其归咎于 Agent 系统提示词太长、任务复杂度太高稀释了注意力,或者是工具本身的语义赋予了模型更强的行动动机。然而,最新的一项研究彻底推翻了这些直觉猜想:让模型安全防御机制全面溃缩的罪魁祸首,既不是 Agent 的角色设定,也不是工具本身的功能语义,而是工具定义的呈现格式——也就是大家习以为常的结构化 JSON Schema。
研究发现,结构化 Schema 在模型的隐层表征空间内诱发了一个与“拒绝方向”严格反向的“Schema 方向”,在模型开始生成第一个 Token 之前,就强行压制了内部的安全拒绝信号。基于这一底层机理,研究团队提出了一个极为简洁却极其有效的轻量防御方案 SafeKeep:在推理时将“安全审计”与“工具执行”彻底解耦。在安全评判环节,把原本结构化的 Schema 剥离成扁平的自然文本叙述,瞬间唤醒模型原本的对齐能力,随后再让安全的请求进入常规的 Schema 执行流程。在包含开源与闭源多种模型的评测中,SafeKeep 在不微调、不访问内部权重的纯黑盒条件下,将有害请求的平均拒绝率从 23.8% 提升至 70.6%,并将观察层面的提示词注入攻击成功率从 25.6% 骤降至 2.5%。

为什么对齐好的大模型一接工具就“失智”?
大语言模型安全对齐的本质,是在预训练和强化学习阶段让模型建立起对有害意图的敏感性,并在内部形成明确的表征分离。如果用户提出制作恶意软件或窃取隐私的请求,模型会在深层激活一种特定的“拒绝表征”,从而在输出端生成委婉或坚决的拒绝话术。
但在构建 Agent 时,整个输入上下文发生了天翻地覆的变化。除了基础的角色设定(Role Description)和交互规则(Tool-use Instructions),最核心的增量就是详细的工具描述(Tool Specifications)。这类描述通常遵从 OpenAI 函数调用的标准格式,以强类型的 JSON Schema 列出工具名称、功能描述、输入参数的键值类型及其限制。
为了定量排查究竟是哪个环节破坏了安全机制,研究团队在 Llama3.1-8B-Instruct 上设计了严格的控制变量实验。他们基于 ToolSafety 基准构建了 400 对语义对称的数据集:针对每个有害的工具调用请求,利用 Claude Sonnet 4.6 在严格保留原有业务场景、参数结构与可用工具的前提下,重写出对应的良性版本。
在纯聊天(Chatbot)设定下,模型展现出应有的防御水准,有害请求的拒绝率为 58%,通过隐层表征计算得到的有害与良性请求区分度(AUROC)达到了极高的水平。然而,一旦切换到标准的 Agent 输入上下文,模型面对有害请求的拒绝率直接暴跌至 3%,几乎处于完全不设防的状态。
随后展开的分步消融实验指明了关键靶点。研究团队将 Agent 的上下文依次拆分为“角色描述”、“工具使用规则”和“工具规格说明”三部分,逐步叠加至聊天模板中:
-
单独加入角色描述,模型的有害与良性请求区分能力几乎不受影响;
-
继续加入交互规则后,表征区分度也仅出现轻微波动;
-
一旦注入工具规格说明,模型的内部拒绝表征迅速瓦解,区分有害与良性请求的 AUROC 出现断崖式下跌。
这一对比清晰地表明:不是“做 Agent”让模型变坏,而是“工具规格说明”本身成了安全对齐的盲区。

格式之罪:是工具功能太危险,还是 JSON 格式在诱导?
定位到工具规格说明后,接下来的核心问题是:究竟是工具所描述的现实功能(语义内容)激活了模型的执行欲望,还是这种高度结构化的文本格式(表征形式)产生了意外干扰?
为了将“语义”与“格式”完全解耦,研究人员设计了精巧的交叉对比实验,具体形式如上图所示:
-
扁平纯文本化(Flattened Textual): 保留所有工具的名称、功能解释、参数含义等完整语义,但彻底打破标准的 JSON Schema 树状层次,将其重写为通顺的自然语言段落;
-
保留 Schema 结构但剥离语义(Schema-formatted with masked semantics): 保留严格的 JSON 语法骨架和键名,但将具体的功能描述和参数含义用抽象占位符替代。
测试结果呈现出惊人的一致性:当工具规格以扁平纯文本呈现时,即使保留了全部的外部调用能力描述,模型对有害请求与良性请求的内部区分能力(AUROC)几乎完全恢复到了接近纯聊天的高水准;相反,如果保持严格的 JSON Schema 模板,哪怕把具体语义抠掉,模型的区分能力依然显著受挫。
这项发现从根本上解释了过去安全微调与 Agent 场景脱节的原因。在绝大多数大模型的训练管线中,函数调用的微调数据充斥着大量高度规范化的 JSON Schema。长期的条件反射训练,让这些结构化标记在模型内部演变成了一种极其强烈的“即刻执行”诱导触发器(Execution Cues)。一旦这些 Schema 字符在上下文中展开,模型内部的认知资源就会优先向“匹配参数并输出执行代码”倾斜,原本通过通用安全对话训练出来的防御反应被强行短路。

机制透视:隐层中的 Schema 方向如何与安全拒绝“迎头相撞”?
为了在白盒层面彻底看清这一干扰的物理机制,研究人员引入了表征工程(Representation Engineering)的方法。
以往关于大模型对齐的研究表明,模型在深层网络中存在一个一维的“拒绝方向”(Refusal Direction),它是模型内部识别出恶意意图并下达“不予执行”命令的表征体现。在此基础上,研究团队定义了 Schema 方向(Schema Direction):即在输入完全相同请求和工具语义的前提下,仅因工具从扁平文本换成 JSON Schema 格式而在模型最后一个预填充(Prefill)Token 处激发的隐层状态平均差值:
\[R_{c}^{(\ell)} = \mathbb{E}_{x \sim \mathcal{D}_{c}}\left[h_{\mathrm{schema}}^{(\ell)}(x) - h_{\mathrm{text}}^{(\ell)}(x)\right], \quad c \in \{\mathrm{harmful}, \mathrm{benign}\}\]通过计算 Schema 方向与聊天拒绝方向在每一层的余弦相似度,底层的几何冲突被直观地揭示了出来。如上图所示,对于有害请求,Schema 方向在模型绝大多数网络层中与拒绝方向呈现出极为稳定的负相关(余弦相似度深陷负值区间)。这意味着,仅仅是将工具说明排版成 JSON 格式,就会在隐层中产生一股逆向的几何推力,将模型的隐层表征硬生生推离那个代表“拒绝回答”的安全区域。

这种负向压制并不只停留在预填充阶段,它直接决定了模型解码时的第一步选择。研究团队进一步提取了模型在生成第一个 Token 时的隐层状态,并将其投影到各层的拒绝方向上。
在上图中可以清晰地看到:
-
当工具描述采用扁平纯文本(Flattened Textual)时,有害请求(红线)在网络深层的投影值高高跃起,与良性请求(绿线)拉开了极其明显的安全间距;
-
一旦换回常规的 Schema 格式,红色的有害请求曲线被大幅度向下压缩,几乎与良性请求的绿线贴合在一起。在模型准备吐出第一个字的关键时刻,有害与良性的界限被严重模糊,导致拒绝机制彻底失效。
为了坐实这一因果链条,研究人员甚至在模型的关键网络层进行激活干预(Activation Steering),人为减去有害场景下的 Schema 向量:
\[\widetilde{h}^{(\ell^{*})} = h^{(\ell^{*})} - \alpha \hat{R}_{\mathrm{harmful}}^{(\ell^{*})}\]实验结果呈现出教科书般的因果对应:在不修改输入提示词的前提下,仅仅在隐层中施加反向转向($\alpha=4$),Agent 对有害请求的执行率就从 95.0% 暴跌至 45.0%,原本只有 5% 的拒绝率被硬生生拉回到了 47.5%。这也最终确认:正是这个在格式排版中无意生成的表征方向,在物理层面上击穿了模型的安全防线。
SafeKeep 框架:无需微调的推理解耦防御
既然病灶在于“Schema 格式在安全评估时会诱导执行并抑制拒绝”,那么解决思路也就顺理成章:不要让模型在看懂结构化 Schema 的同时去思考安全问题。
研究团队据此提出了 SafeKeep。这是一个纯推理阶段的防御框架,其核心逻辑是将原先杂糅在一起的 Agent 工作流解耦为两步:
-
安全判定阶段(Safety Judgment):
当用户指令抵达时,SafeKeep 拦截请求,并将环境中原本定义的工具规格提取出来,自动剥离所有的 JSON 树状层次和代码标记,翻译成一份语义完整的扁平化纯文本。随后,使用原模型扮演安全审查员,在只包含扁平文本的上下文中快速判定该请求是否包含恶意意图,输出二元标签(YES 或 NO)。因为消除了 Schema 的不良几何干扰,模型原生的安全对齐直觉能够满血运转。
-
执行控制阶段(Execution Control):
-
若判定结果为安全(NO),系统直接放行,将原始请求无损交给原本的 Agent 流程,此时完整的 JSON Schema 重新生效,保证模型可以精确无误地按照参数规范去调用工具;
-
若判定结果为危险(YES),SafeKeep 立即阻断任何工具执行通道,并向模型输入预置的拒绝前缀(如“很抱歉,我无法协助处理该请求”),让模型自回归生成合乎当前语境的针对性拒绝解释,避免生硬的固定模板。
-
SafeKeep 的巧妙之处在于“对症下药而不用猛药”。它既不需要对基础模型重新做代价高昂的强化学习安全微调,也不依赖外部大型安全分类器,更不需要白盒提取激活向量。无论是开源的权重可读模型,还是仅提供 API 的商业闭源模型,都能以极低的改造成本即插即用。
实验评测:拒绝率不仅翻倍,更能抗住间接注入
为了验证 SafeKeep 的泛化能力与实际防御效果,研究团队在两个极具代表性的基准上进行了压力测试:一个是侧重直接恶意攻击的 AgentHarm,另一个是涵盖复杂间接观察级提示词注入的 InjecAgent。测试底座涵盖了开源的 Llama3.1-8B-Instruct、Qwen3-8B,以及商业闭源的 Gemini3.1-Flash 和 GPT5.4-mini。
实验结果展现了压倒性的优势:
-
有害请求拦截率成倍提高: 在未加保护的原始基线 Agent 中,各模型面对 AgentHarm 的直接有害指令平均拒绝率仅有惨淡的 23.8%;而在部署 SafeKeep 后,综合平均拒绝率跃升至 70.6%。在某些模型上,原本几乎完全沦陷的防线被迅速拉回到了安全警戒线以上。
-
提示词注入成功率降至冰点: 针对来自环境交互、网页或文档内部的隐蔽注入攻击(InjecAgent),原始基线的平均被攻击成功率(ASR)高达 25.6%;SafeKeep 将其大幅压制到了 2.5%,在真实调用环境下把外部攻击的穿透能力削弱了整整一个数量级。
-
正常业务能力完全不受误伤: 安全防御最忌讳盲目拒绝。AgentHarm 的 Acc 指标要求模型既要拒绝恶意指令,又要正确完成良性任务。实验显示,SafeKeep 保护下的 Agent 综合任务准确率不仅没有下降,反而从基线的 60.9% 提升至 79.6%。这充分说明 SafeKeep 并没有把模型变成“拒答机器”,而是精准剔除了 Schema 格式带来的判断杂音。
特别值得注意的是与消融基线 SafeJudge 的对比。SafeJudge 同样采用了双阶段安全审计,但在第一阶段审计时依然沿用了原本的 JSON Schema 格式。结果表明,SafeJudge 的平均拒绝率只有 45.0%,注入攻击成功率依然超过 19%。这一反差最终敲定了该工作的核心立论:仅仅增加一个自我审查步骤是远远不够的,审查时把工具规格“降维”成纯文本,才是彻底唤醒模型安全直觉的关键钥匙。
对未来智能体工程的深远启示
在过去很长一段时间里,AI Agent 领域的研究重心都放在了如何设计更复杂的规划流程、更高效的 Memory 架构以及更严格的 Schema 语法校验上。大家习惯于将所有与功能相关的元数据都打包成严密的计算机语言结构塞给大模型,潜意识里认为这种“对机器友好”的格式同样适合大模型做全盘理解。
这项研究给整个大模型 Agent 生态敲响了一记警钟:大语言模型的内部表征对输入上下文的结构形态有着超乎想象的敏感性。 JSON Schema 作为一种典型的“动作促发式”语法形态,在长期的代码与函数调用微调中,已经在模型底层与“立即调用”建立了过于强烈的通路绑定,以至于它在无形中成了一种“安全抑制剂”。
这不仅解释了为何过去许多 Agent 产品在上线后屡屡突破安全底线,更为未来的安全智能体设计指明了轻量化的迭代路径。在系统架构设计层面,把“权限与安全认知”从“执行语义接口”中剥离出来,用人类最擅长的自然语言去引导模型思考,再用机器擅长的结构体去承载具体的调用执行,或许才是通向可信 AI Agent 的正确解法。