RePolicy: Reinforcement Learning for Safety-Policy Invocation in Agent Safeguards 精读
论文链接:arXiv:2608.24275 代码仓库:jianghoucheng/RePolicy(含 PolicyTraj-20K 数据集、30 策略/358 条款库、RePolicy-4B checkpoint) 发表时间:2026年8月 机构:中国科学技术大学(一作+通讯,含 Xiang Wang、Xiangnan He)+ 新加坡国立大学 + 浙江大学 + 中关村学院——纯高校跨国合作,无企业参与 领域标签:cs.AI(agent 安全 / agentic RL)
一、论文背景
Agent 安全防护是什么? LLM agent 已经从文本生成助手进化为能规划任务、调用工具、操作外部环境的自治系统。随之而来的安全风险也从"单次交互里的有害内容"演变为在完整执行轨迹上涌现的行为危害——某一步看起来无害的文件读取,配合后面一步外发邮件,合起来就是泄密。Agent safeguard(防护器)就是专门审查 agent 完整轨迹、在任务执行中拦截风险的安全模型。
为什么需要"策略调用"? 现有防护器大多在预定义的风险分类法下做判断。但现实部署中没有任何固定策略集能覆盖一切:同一动作在不同用户权限、组织要求、监管辖区下约束不同,安全策略本身还会随时间演化。因此近期工作开始把安全策略当作可配置的外部规约,对每条轨迹用与其上下文相关的策略来评估——就像法官断案前要先找到适用的法条,而不是背一部写死的刑法。
现有方法的局限:策略感知防护器主要建立在 prompting 和监督微调(SFT)上。Prompting 能把策略展示给模型,但不优化模型怎么用策略;SFT 让模型模仿精选的策略使用示范,能力受限于训练时见过的轨迹-策略配对分布。面对未见场景或新的策略组合,防护器可能既不知道该调用哪条策略,也不知道条款该如何适用。
本文的核心视角转换:把安全策略从被动上下文变成可调用能力——策略调用是一个动作,可以放进 rollout 里,用基于结果反馈的强化学习直接优化。这与 agentic RL 让模型学会"何时用搜索引擎、何时写代码"是同一原理,只是这里的能力是"援引正确的安全策略"。
二、论文定位和关联工作
- 传统 guard 模型线:WildGuard、ShieldGemma、Llama Guard、Qwen3Guard 等主要对 prompt/response 做内容审核,基于固定风险分类法。与 agent 轨迹级监测的需求错位。
- 轨迹级 agent 防护线:GuardAgent 做知识赋能的安全检查;AGrail 自适应构造安全检查;AgentDoG 提供细粒度轨迹诊断(本文最强的专用 baseline,79.69 分)。这些工作已转向轨迹级,但不识别哪条安全策略应当管辖当前轨迹。
- 策略感知防护线:ShieldAgent 在可验证规则上推理;DynaGuard 支持用户自定义自由文本策略;LPG 在动态策略上下文中推理。这些工作条件化于给定策略,但策略选择与判断本身没有被直接优化——RePolicy 的差异化定位正是把"从候选库选适用策略"显式化为可 RL 优化的动作。
- Agentic RL 方法线:Search-R1、ReTool 等证明外部能力使用(检索、工具)可通过 RL 学会;GRPO(DeepSeekMath 提出)以组内相对优势做策略优化,是本文的优化器选择。
| 对比维度 | Prompting 防护 | SFT 防护 | RePolicy(RL 调用) |
|---|---|---|---|
| 策略如何进入模型 | 全量塞进 prompt | 模仿示范轨迹 | 按需调用、内容注入 |
| 优化目标 | 无 | 拟合训练分布 | 调用结果+判断正确性 |
| 对新策略组合 | 依赖泛化 | 受限于配对分布 | 扰动训练强制语义判别 |
三、问题定义
具体场景:防护器收到一条完整 agent 轨迹 τ(用户指令、动作、工具调用、环境观察)和一个动态策略库 P = {p₁,…,p_K},需判断轨迹安全与否。
核心洞察:安全判断的正确性依赖于先找到管辖该轨迹的那条策略——这就像医生看病历先要分诊到正确的科室,分诊错了,后面再认真的分析都用错了标准。而"分诊"这个动作本身是可以被直接优化的。
形式化:rollout 分两步——
- 策略调用:p̂ ∼ πθ(·|τ, P)
- 有据判断:(r̂, ŷ) ∼ πθ(·|τ, P, p̂, c(p̂)),其中 c(p̂) 是被调策略的完整内容,r̂ 是有据理由,ŷ ∈ {safe, unsafe}
完整序列为策略调用 → 策略内容 → 安全推理 → 安全预测。注意:防护器不预先看到全部策略正文,只看到每条策略的简短范围描述,必须先调用才能获得条款细节——这迫使调用决策基于轨迹与策略范围的语义匹配,而不是把所有策略背下来再挑。
这个抽象的精妙之处:把"安全判断"从一个不可分的黑盒分类问题,分解成"检索决策 + 条件推理"的序贯结构——前者可验证(调对了吗)、后者可验证(判对了吗),两者都可成为奖励信号,整条链路因此可被 RL 端到端优化。
四、问题解法
4.1 PolicyTraj-20K 数据构造
类比:先造一批带标准答案的"案例教材",每案都标注"适用哪部法规、哪几条、怎么判"。
- 轨迹合成:从多个安全资源收集 agent 交互模式,规范化工具 schema、环境描述与交互历史;再用 API 模型保持轨迹结构与安全机制不变,重采样任务内容(用户请求、实体、文件、URL、数值、工具参数),生成安全与不安全实例,剔除工具交互不一致或标签无依据的样本。
- 按操作场景组织策略库:关键设计是策略不按最终风险类别(如"隐私泄露")组织,而按agent 操作场景(如"外部消息与授权")组织——一个场景自然涵盖其中可能出现的多种风险。每个场景初始化一条策略(标题+范围描述+详细安全要求),标题与范围描述服务于调用,完整内容服务于推理。
- 审计与收敛:策略库对全部轨迹审计,覆盖不足先精修条款,只有当轨迹代表全新操作场景才新增策略;最后合并重叠范围、去冗余。产出 D = {(τᵢ, p*ᵢ, rᵢ, yᵢ)},即 20,000+ 条策略标注轨迹 + 30 策略/358 条款库。
4.2 冷启动 SFT
对每条训练轨迹,把适用策略 pᵢ 与干扰项组成局部候选库 P̃ᵢ,模型先生成对 pᵢ 的调用,其完整内容 c(p*ᵢ) 追加进上下文后生成理由与标签。损失同时优化两步(式 4),初始化完整调用-推理序列与交互格式。但 SFT 只模仿示范——它不优化"模型自己生成的 rollout 是否调对了策略、判对了结果"。
4.3 GRPO + 三项可验证奖励
从冷启动模型出发,GRPO 对每个输入采样多条完整 rollout(调用→内容→推理→判断),组内比较,提高"调对且判对"轨迹的概率。奖励是三项规则可验证奖励的加权和:
| 奖励项 | 定义 | 权重 |
|---|---|---|
| R_fmt 格式 | 有效策略调用+格式合规的最终响应 | 0.1 |
| R_pol 策略命中 | I[p̂ᵢ = p*ᵢ](调用的正是标注适用策略) | 0.3 |
| R_acc 判断正确 | I[ŷᵢ = yᵢ](最终安全标签正确) | 0.6 |
类比:三项奖励像驾考的评分表——灯光使用(格式)、路线选择(调用)、安全抵达(判断)各有权重,学员(模型)通过多次完整驾驶(rollout)对比学习哪里扣分最多。
4.4 策略上下文扰动:反记忆化设计
RL 期间每个局部候选库重采样干扰项并打乱顺序:干扰项包括无关场景的真策略和合成的诱饵策略(每个局部库平均 28.9 条策略、其中平均 9.2 条诱饵、至少 2 条)。策略 id 跨样本重新索引。这迫使模型从当前轨迹与各候选范围的语义判断适用性,而不能记住"轨迹长这样就选 3 号策略"或"候选库凑够几条就闭眼选"。
4.5 训练配置
基座 Qwen3-4B-Instruct-2507;SFT 5,000 例 2 epoch,GRPO 14,425 例 3 epoch;8×H20;rollout 每提示 16 条、每次调用最多返回 5 条策略;KL 系数 0.001。推理时 vLLM 生成、FSDP 训练。
五、评估指标与实验证据
基准与协议:六个 agent 安全基准共 7,369 条标注轨迹——ATBench(长程延迟触发风险,1,000 条)、R-Judge(多轮交互风险,1,242 条)、OpenAgentSafety(真实工具环境,289 条)、ASSEBench(安全+安全威胁,1,476 条)、HINTBench(非攻击内禀失败,709 条)、AgentHazard(计算机使用有害行为,2,653 条全不安全)。统一二分类 {safe, unsafe},Unsafe F1(不安全类为正类的 F1)为主指标,Overall 为六基准无权重平均(防止大基准淹没小基准)。对比 19 个外部模型:闭源通用(Claude Sonnet 4.6、GPT-5.4 等)、开源通用(Qwen3-235B、GLM-5.1、DeepSeek V4、MiMo 1.02T 等)、专用 guard(9 个)。通用模型共用同一 trajectory-only prompt(温度 0),guard 用各自推荐接口。
主结果(Unsafe F1,%):
| 模型 | ATBench | R-Judge | OpenAgent | ASSEBench | HINTBench | AgentHazard | Overall |
|---|---|---|---|---|---|---|---|
| Claude Sonnet 4.6 | 95.46 | 86.26 | 51.97 | 81.10 | 96.47 | 93.73 | 84.17 |
| GPT-5.4 | 96.83 | 87.44 | 55.63 | 76.25 | 95.42 | 87.13 | 83.12 |
| GLM-5.1 (754B) | 95.55 | 86.63 | 50.99 | 77.64 | 98.31 | 77.20 | 81.06 |
| AgentDoG-4B | 87.93 | 80.24 | 48.99 | 82.85 | 90.25 | 87.87 | 79.69 |
| DynaGuard-4B | 89.43 | 75.53 | 55.76 | 69.70 | 87.48 | 81.24 | 76.52 |
| RePolicy-4B | 99.40 | 82.17 | 62.79 | 88.11 | 97.23 | 99.20 | 88.15 |
- Obs 1:4B 模型 Overall 88.15,超最强外部模型(Claude Sonnet 4.6)+3.98、超最强专用 guard +8.46,胜过 GPT-5.4(83.12)、GLM-5.1(81.06)、1.02T 的 MiMo(75.96)。
- Obs 2:六个基准中四个第一(OpenAgentSafety +2.55、ASSEBench +5.26、AgentHazard +5.47),增益是广谱而非基准特化。
RL 对调用机制的影响(RQ2):策略命中 R_pol 从冷启动 94.4% 升至 98.5%(+4.1pp);调用广度从 1.9 条/轨迹升至 3.2 条/轨迹而诱饵选中率全程 <1%——扰动训练迫使语义判别,广度扩大没有换来乱选。
消融(RQ4):零样本基座 58.47 → 冷启动 SFT 86.95(+28.48,数据集的贡献)→ 完整 88.15。去掉显式策略调用做 GRPO,全 6 基准下降(均值 −2.32,AgentHazard −5.9、OpenAgentSafety −4.4)——显式调用是主要 RL 组件。
库规模敏感性(RQ3):|P| 从 10→40,宏 F1 从 86.1→88.1 后饱和于 50 时的 87.9;R_pol 从 99.4%→97.1%(轻微选择代价)。覆盖不足主要伤异质性强的基准(AgentHazard −4.6、OpenAgentSafety −3.2)。
错误结构(附录 D):RL 后正确判断 84.2%→89.8%,误报 7.4%→3.0%、漏报 8.4%→6.8%、错策调用 8.7%→1.4%。关键对比:无调用的 GRPO 变体降漏报靠**升误报至约 9%**换取,而完整 RePolicy 双降——换来更均衡的错误权衡。
为什么这些实验能证明论点:Unsafe F1 直接衡量轨迹级拦截能力;同协议下 19 个外部对手覆盖三个家族排除了"挑软柿子"质疑;调用机制指标(R_pol、诱饵率)与判断指标分离呈现,支持"RL 改善的是调用机制本身而非仅分类器"的主张;错误分解把"调用对不对"与"判得对不对"拆开,正对应方法的两步 rollout。
六、效果优势的根源解释
baseline 的根本局限:从优化层面看,prompting 与 SFT 都不直接优化策略使用的结果。Prompting 只是展示——模型是否读了、读对了哪条,训练信号一无所知。SFT 更隐蔽的瓶颈在于分布束缚:它模仿的是训练数据里的轨迹-策略配对,模型学到的是"这类轨迹配这条策略"的表面关联;遇到新策略组合时,配对先验失效。这就像背案例集的学生——案例内的题会做,案例外的分诊全靠运气。
RePolicy 的机制改变与因果链:
- 结果反馈直接作用于调用决策:GRPO 把"调没调对 + 判没判对"作为组内比较信号 → 模型被推向"调用正确策略且用它判对"的轨迹 → R_pol 94.4%→98.5% 不是副产品而是直接被优化的量 → 错策调用 8.7%→1.4% → 错误的判断源头(用错标准)被消除大半。
- 扰动切断捷径:候选库重组+诱饵注入+id 重索引 → “记住库组成/位置关联"的策略在训练中持续失效 → 唯一稳定的解是轨迹语义×策略范围的匹配 → 诱饵率 <1% 且库规模从 10→40 性能单调升——调用能力对库变化鲁棒。
- 调用-检索-推理的算力再分配:带调用的 rollout 响应从约 0.6K 增至 2.5K token(4.1×),序列变长意味着模型把算力花在"选对标准→展开条款→据条推理"上 → 相比直出二分类(no-invocation 变体靠升误报换降漏报),多出来的检索推理步骤让 FP 与 FN 同时下降 → 更均衡的错误权衡体现在全部六基准。
- 反事实:去掉显式调用后 GRPO 仍有效(87.8% 正确,说明 RL 本身有贡献),但完整版再多 2.0pp 正确率且误报减半(3.0% vs 5.0%)——证明增益的边际部分来自"显式调用+内容注入"这个结构,而非单纯多训了几步。
一句话:RePolicy 不是"更会分类”,而是把分类前的"找对依据"变成了被优化、可审计、抗扰动的显式动作——依据找对了,判断的均衡性随之而来。
七、必要知识反推
假设一个零知识的人要做这项工作,他最少必须掌握:
- 领域知识层:agent 风险的轨迹级涌现特性(单步无害、组合有害)——不理解这个就不会把判断对象定为完整轨迹而非单条消息;真实安全策略的形态(范围+条款两级结构)——策略库的"标题/范围服务于调用、内容服务于推理"的拆分直接来自此;现有安全基准的构成与盲区(为何要自建数据集)。
- 方法论知识层:agentic RL 的核心原理——外部能力使用放进 rollout、用结果反馈优化(Search-R1/ReTool 脉络);GRPO 组内相对优势机制;SFT 与 RL 的分工(模仿 vs 优化);分布偏移与记忆化的对抗手段(扰动、重索引——数据增强思想在 RL 训练中的应用)。
- 工程知识层:大规模 RL 训练栈(vLLM rollout 生成 + FSDP 分布式训练 + KL 正则);奖励函数的规则化实现(三项 I[·] 指示奖励的代码化);六基准统一评估协议(输出规范化到二分类、guard 模型各用原生接口的公平性设计)。
知识融合的关键节点:把 agentic RL 社区"工具调用可学"的洞察,迁移到安全防护这个看似纯分类的任务上——识别出"援引策略"与"调用搜索引擎"在结构上同构(都是"选择外部知识源→注入内容→条件推理"),是全文的创造性支点。其次是数据构造上的反向思维:不按风险类别而按操作场景组织策略库,使策略天然与轨迹的操作上下文对齐,让"调用"这个动作有明确的语义基础。
八、论文中可以提取的通用性灵感
- 被动上下文变为可调用能力,即可被 RL 优化(范式迁移类)
- 证据:策略从 prompt 素材变为 rollout 内的动作后,命中率 98.5%、误报减半。
- 推广:任何"先选知识源再推理"的任务——医疗诊断(先选指南)、法律检索(先选法条)、客服质检(先选规章)、代码审查(先选规范)——都可把"选源"动作化并用结果奖励优化。
- 可验证分解让黑盒流程可训练(机制类)
- 证据:判断任务分解为格式/命中/正确三个 I[·] 指示奖励,权重 0.1/0.3/0.6。
- 推广:复杂多步任务的奖励设计(数据分析、科研自动化)应优先寻找"中间步骤的对错可机判"的分解点,而非只给最终结果打分。
- 训练期扰动对抗记忆化,换来部署期对配置变化的鲁棒性(机制类)
- 证据:候选库重组+诱饵注入下诱饵率 <1%,库规模 10→50 性能稳定。
- 推广:推荐系统防位置偏置、RAG 防文档顺序依赖、多租户系统防路由记忆——凡是"选择类"模型都应在训练期注入配置扰动。
- 多步推理的算力开销可购买更均衡的错误结构(信号利用类)
- 证据:调用版响应 2.5K token、FP 3.0%/FN 6.8%,无调用版 0.6K token、FP 约 9%——省下的算力以误报翻倍为代价。
- 推广:高风险决策系统(风控、医疗、内容审核)的架构选型应显式评估"每多一步推理买来多少错误结构的改善",而非只看单步延迟。
- 组织知识库按使用场景而非类别体系切分(机制类)
- 证据:策略按操作场景组织(30 策略/358 条款)即可覆盖 2 万+轨迹,而非按风险类别铺开。
- 推广:企业知识管理、FAQ 体系、合规条款库——按"用户处于什么操作"聚类知识,比按学科分类更贴近检索时的真实语义需求。