VeriGuard: Enhancing LLM Agent Safety via Verified Code Generation
2026/3/17
很好,这一部分已经进入这篇 的核心方法了。我帮你按"读论文 + 建立直觉"的方式继续导读,重点讲清楚它到底在做什么,以及和你做具身智能/agent系统有什么关系。
🌟 一、这篇文章的核心思想(一句话版)
👉 VeriGuard = 用"形式化验证"给LLM Agent加一个"可证明安全"的外壳
不是:
- ❌ 事后拦截(guardrail / filter)
而是:
- ✅ 生成时就保证正确(correct-by-construction)
- ✅ 执行前再严格检查(runtime enforcement)
🧠 二、方法总览(论文 Figure 1)
论文第 第4页 Figure 1 给了一个非常关键的结构图(你一定要理解这个):
整体分两阶段:
🔵 阶段1:Policy Generation(离线)
👉 生成一个"安全策略函数 + 数学约束",并证明它是对的
流程是:
自然语言安全需求
↓
LLM生成:
- policy code(代码)
- constraints(逻辑约束)
↓
三步 refinement:
1. Validation(语义对齐)
2. Testing(单元测试)
3. Formal Verification(形式化证明)
↓
✅ Verified Policy(经过证明的安全策略)
🟢 阶段2:Policy Enforcement(在线)
👉 在 agent 执行动作前进行检查
Agent要执行动作
↓
提取参数(LLM)
↓
执行 policy 函数
↓
✔ 合法 → 执行
❌ 不合法 → 阻止 / 重规划
🧩 三、核心建模(非常关键)
论文第 4页 Task Definition 这段非常重要:
1️⃣ Policy Generation 的形式化定义
给定:
-
自然语言请求: 👉 ( r )(比如:不能泄露隐私数据)
-
agent描述: 👉 ( \mathcal{S} )(工具、输入输出、环境)
生成:
-
policy函数: 👉 ( p )
-
约束集合: 👉 ( C = {c_1, c_2, …, c_n} )
目标:
[ p \models C ]
👉 含义是:
policy代码必须满足所有约束(每一条安全规则都成立)
⚠️ 这一步的本质
👉 把"自然语言安全要求"变成:
- 可执行代码(policy)
- 可验证逻辑(constraints)
这是论文最核心创新之一
2️⃣ Policy Enforcement
目标:
在运行时,让 agent 的行为始终符合 policy
优化目标:
- ↓ 减少违规(attack surface)
- ↑ 保持任务完成率(utility)
🔁 四、Refinement Loop(论文最精华部分)
论文第 5–6页
这是整个方法的灵魂👇
三阶段循环:
① Validation(语义对齐)
👉 解决问题:
- 用户说的不清楚
- 逻辑有歧义
输出:
- 明确的 requirements ( R )
- 假设 ( A )
👉 本质:
NLP → 精确定义(像 requirement engineering)
② Testing(功能验证)
👉 自动生成 test cases:
- 正常情况
- 边界情况
- 错误输入
👉 本质:
软件工程里的 unit test
③ Formal Verification(形式化验证)
这是最关键的👇
使用 Hoare Logic:
[ {C_{pre}} \ p \ {C_{post}} ]
意思是:
如果前置条件成立 那执行 policy 后 后置条件一定成立
👉 如果不成立:
- verifier 给 counterexample
- LLM 再修代码
🔁 最终形成闭环:
生成 → 验证失败 → 修正 → 再验证
直到:
✅ 证明成立
🔥 五、和你研究方向的关系(非常重要)
你现在在做:
多智能体 + 具身智能 + 任务验证
这篇论文直接对应你提到的"缺失模块"👇
🧠 你之前的观察:
agent系统没有"验证模块"
✔ 这篇论文就是在补这个:
| 模块 | 传统agent | VeriGuard |
|---|---|---|
| 规划 | ✔ | ✔ |
| 执行 | ✔ | ✔ |
| 验证 | ❌(弱) | ✅(形式化) |
🔥 更深一层(关键 insight)
VeriGuard其实做了三件事:
① 把"安全"变成可验证逻辑
👉 从:
- "不要泄露隐私"(模糊)
变成:
- IF access_sensitive_data → DENY
② 把"agent行为"变成程序
👉 agent ≈ program
③ 引入 formal methods
👉 类似:
- 编译器验证
- 程序证明
⚖️ 六、实验结论(你要抓的重点)
📊 Table 1(第8页)
结果:
👉 VeriGuard:
- ASR(攻击成功率)≈ 0
- TSR(任务成功率)↑
👉 结论:
不只是安全,还保持性能
📊 Table 2(第9页)
👉 在 access control 场景:
- Accuracy = 100%
- Recall = 100%
👉 论文强调:
Recall 比 Precision 更重要(安全系统)
🧪 七、策略设计(很有工程价值)
论文第6页讲了4种 enforcement:
| 方法 | 特点 |
|---|---|
| TT | 直接终止 |
| AB | 阻止动作 |
| TEH | 阻止工具调用 |
| CRP | 让agent重新规划 |
🧠 最优组合:
👉 CRP + TEH
(第10页结论)
⚠️ 八、局限性(你一定要看)
论文第11页:
1️⃣ 依赖 LLM 生成约束
👉 可能错
→ verification正确 ≠ 需求正确
2️⃣ verifier能力有限(Nagini)
👉 表达能力有限
3️⃣ policy是静态的
👉 对动态攻击不够强
🧭 九、给你的研究启发(重点)
结合你在做的方向,我给你几个非常有价值的研究点:
💡 1. 多智能体共享 memory + verification
👉 你可以做:
- memory consistency verification
- 多agent状态约束
💡 2. LTL + VeriGuard结合(非常契合你前面问的)
👉 用:
- LTL → 表达任务逻辑
- VeriGuard → 验证执行
👉 形成:
时序逻辑 + 程序验证 = 强安全 agent
💡 3. 任务完成验证(你提到的痛点)
👉 可以做:
- post-condition verification
- goal satisfaction checking
💡 4. 在线验证 vs 离线验证
👉 VeriGuard:
- heavy offline
- light online
你可以研究:
👉 更动态的 verification
✅ 总结一句话
👉 VeriGuard 的本质是:
把 agent safety 从"经验规则"升级为"可证明正确"的程序验证问题
如果你愿意,我可以下一步帮你做更深入的:
✅ 把 VeriGuard 和你做的"多智能体共享记忆"结合起来 ✅ 或帮你设计一个"具身智能 + 验证模块"的完整架构(很适合写论文)