Files
llmiotsafe/ADISR_DESIGN.md
2026-05-12 17:01:39 +08:00

16 KiB
Raw Blame History

SafeHome 对抗辩论框架设计方案

Adversarial Deliberation for IoT Security Reasoning (ADISR)


1. 核心思想

一句话:让两个立场对立的 LLM 角色Prosecutor 检察官 vs Defender 辩护人)各自从同一份设备日志中寻找支持自己立场的证据,然后由一个中立的 Judge裁判比较双方论据的质量和证据强度做出最终判定。

为什么这能解决 Recall-FA 的矛盾

当前所有方法的根本问题是让同一个决策者同时承担"不漏报"和"不误报"两个互相矛盾的目标。无论怎么调 prompt模型要么偏敏感DeepSeek baseline: 90% Recall, 84% FA要么偏保守EGPv2 thinking: 21% Recall, 3% FA

对抗辩论把这个矛盾解耦到两个角色上:

  • Prosecutor 只负责"不漏报"——它的 KPI 是找到所有可能的异常证据
  • Defender 只负责"不误报"——它的 KPI 是为每个"异常"找到合理的正常解释
  • Judge 不需要自己分析日志,只需要比较双方已经整理好的证据

2. 学术定位与顶会支撑

2.1 理论基础

支撑论文 会议 核心贡献 我们的区别
Improving Factuality through Multiagent Debate ICML 2024 证明多 agent 辩论提升事实准确性 他们是同构辩论(同一 prompt我们是异构对抗(对立 prompt
Better LLM Reasoning via Dual-Play arXiv 2025 双角色对抗提升推理 他们做数学推理,我们做安全推理
Adaptive Coopetition NeurIPS 2025 竞争+合作的多 agent 推理 他们用 verifier signal我们用对抗辩论
Adversarial Yet Cooperative arXiv 2025 对抗性多视角推理 他们做 RAG我们做 IoT 安全推理
Audit-LLM arXiv 2024 多 agent 协作做日志威胁检测 他们是协作式,我们是对抗式;他们做 insider threat我们做 IoT 物理安全

2.2 我们的创新点(与上述工作的差异化)

  1. 异构对抗 vs 同构辩论ICML 2024 的 Multiagent Debate 让多个相同的 agent 辩论,我们让立场预设对立的 agent 辩论——Prosecutor 被明确要求"找异常"Defender 被明确要求"找正常解释"。这不是随机分歧,而是结构性对抗

  2. Evidence-Grounded Debate:不是让两个 agent 空谈,而是要求每个论点必须**引用具体的设备事件(时间戳+设备ID+数值)**作为证据。Judge 的判定基于证据质量而非修辞质量。

  3. Domain-SpecificIoT 安全)现有辩论框架都是通用的数学、事实核查、RAG我们是首个将对抗辩论应用于 IoT 设备日志安全推理的工作。

  4. Asymmetric Burden of Proof非对称举证责任:不是简单的多数投票。在安全领域,漏报的代价 > 误报的代价,所以 Judge 的决策规则是非对称的——Prosecutor 只需要提供"合理怀疑"级别的证据就够了Defender 需要提供"排除合理怀疑"级别的证据才能推翻。


3. 框架架构

3.1 整体流程

                         ┌──────────────────────────────────────┐
                         │         Input Episode                 │
                         │  (Home Layout + Event Log + Query)    │
                         └──────────────┬───────────────────────┘
                                        │
                              ┌──────────┴──────────┐
                              │   Evidence Extractor  │  (共享的预处理步骤)
                              │   提取关键事件摘要    │
                              └──────────┬──────────┘
                                        │
                         ┌──────────────┴──────────────┐
                         │                             │
                         ▼                             ▼
              ┌─────────────────┐           ┌─────────────────┐
              │   PROSECUTOR    │           │    DEFENDER      │
              │   (检察官)       │           │    (辩护人)      │
              │                 │           │                  │
              │ 立场: 找异常     │           │ 立场: 找正常解释  │
              │ 输出:           │           │ 输出:            │
              │  - 异常假设     │           │  - 正常假设       │
              │  - 支持证据     │           │  - 支持证据       │
              │  - 威胁评估     │           │  - 反驳检察官     │
              └────────┬────────┘           └────────┬─────────┘
                       │                             │
                       └──────────────┬──────────────┘
                                      │
                                      ▼
                         ┌──────────────────────────┐
                         │         JUDGE             │
                         │        (裁判)             │
                         │                          │
                         │ 输入: 双方论据 + 证据     │
                         │ 规则: 非对称举证责任      │
                         │ 输出: 最终判定 + 理由     │
                         └──────────────────────────┘

3.2 各角色详细设计

Stage 0: Evidence Extractor证据提取器

目的:从原始日志中提取关键事件摘要,减少后续角色的 token 消耗。

输入:完整的设备事件日志(~1700 条) 输出:压缩后的关键事件列表(~50-100 条),包括:

  • 所有状态变化事件(灯开关、门锁操作、窗户开关等)
  • 温度传感器的趋势摘要(而非逐条读数)
  • 运动传感器的活动时段摘要
  • 所有报警/错误事件

注意:这一步是确定性的规则提取,不用 LLM避免信息丢失。

Stage 1: Prosecutor检察官

立场:假设存在异常,尽力找到支持证据。

System Prompt 核心指令

你是一位安全检察官。你的职责是从设备日志中找出所有可能的安全异常证据。
你必须假设"存在异常",然后寻找支持这个假设的证据。

你的工作标准:
- 宁可多报也不能漏报
- 任何偏离正常模式的信号都值得指出
- 你需要构建一个完整的"控诉论证",包括:
  1. 你认为存在什么异常(具体类型)
  2. 支持你判断的直接证据(引用具体事件:时间戳+设备+数值)
  3. 支持你判断的间接证据(推理链)
  4. 你对威胁严重程度的评估

如果你确实找不到任何异常证据,你可以声明"未发现可控诉的异常",但这应该是你穷尽所有可能性之后的结论。

输出格式

{
  "prosecution_verdict": "anomaly_detected" | "no_case",
  "alleged_threat_type": "...",
  "direct_evidence": [
    {"timestamp": "...", "device": "...", "observation": "...", "significance": "..."}
  ],
  "indirect_evidence": [
    {"reasoning": "...", "supporting_events": ["..."]}
  ],
  "severity_assessment": "critical/high/medium/low",
  "prosecution_argument": "完整的控诉论证2-3句话"
}

Stage 2: Defender辩护人

立场:假设一切正常,为每个"异常"找到合理的正常解释。

System Prompt 核心指令

你是一位安全辩护人。你将看到检察官提出的异常指控和证据。
你的职责是为这些"异常"找到合理的正常解释,证明它们不是真正的安全威胁。

你的工作标准:
- 优先寻找正常解释(日常行为、设备特性、环境因素)
- 指出检察官证据中的逻辑漏洞或过度解读
- 你需要构建一个完整的"辩护论证",包括:
  1. 对检察官每条证据的逐一反驳或替代解释
  2. 支持"正常"判断的证据(引用具体事件)
  3. 检察官论证中的逻辑弱点

如果检察官的证据确实无法反驳(如设备明确报警 HardwareFaultAlert=True
你应该承认这一点,而不是强行辩护。

输入Evidence Extractor 的摘要 + Prosecutor 的完整输出 输出格式

{
  "defense_verdict": "normal_explained" | "partially_explained" | "cannot_refute",
  "rebuttals": [
    {
      "prosecution_claim": "检察官的某条指控",
      "defense_explanation": "正常解释",
      "supporting_evidence": ["支持正常解释的事件"],
      "strength": "strong/moderate/weak"
    }
  ],
  "alternative_narrative": "完整的正常解释叙事2-3句话",
  "concessions": ["承认无法反驳的点(如果有)"]
}

Stage 3: Judge裁判

立场:中立,基于双方证据质量做决策。

System Prompt 核心指令

你是一位中立裁判。你将看到检察官和辩护人的完整论据。
你的职责是比较双方证据的质量和说服力,做出最终判定。

判定规则(非对称举证责任):
1. 如果检察官提供了"直接设备证据"(报警事件、状态矛盾、操作失败),
   且辩护人无法提供合理反驳 → 判定为异常
2. 如果检察官只有"间接推理证据"(行为模式偏离、时间异常),
   且辩护人提供了合理的正常解释 → 判定为正常
3. 如果双方证据强度相当 → 判定为异常(安全领域的保守原则:宁可误报不可漏报)
4. 如果检察官声明"no_case" → 判定为正常
5. 如果辩护人声明"cannot_refute" → 判定为异常

注意:你不需要重新分析原始日志。你只需要评估双方已经提交的论据。

输入Prosecutor 输出 + Defender 输出 输出格式

{
  "final_verdict": {
    "is_anomaly": true/false,
    "threat_type": "...",
    "confidence": "high/medium/low"
  },
  "reasoning": {
    "prosecution_strength": "strong/moderate/weak — 理由",
    "defense_strength": "strong/moderate/weak — 理由",
    "decisive_factor": "哪条证据/论点决定了最终判定",
    "applied_rule": "使用了哪条判定规则1-5"
  },
  "threat_description": "一句话总结",
  "recommended_actions": ["..."]
}

4. 关键设计决策

4.1 为什么不是 3 个 agent 投票?

投票majority vote的问题

  • 3 个同构 agent 容易产生相同的偏见(都保守或都敏感)
  • 投票没有"为什么"——只有结果没有过程
  • 无法利用安全领域的非对称性(漏报 > 误报)

对抗辩论的优势:

  • 结构性保证了正反两面都被考虑
  • Judge 能看到完整的推理过程,不只是结论
  • 非对称举证责任天然适配安全场景

4.2 为什么 Defender 看 Prosecutor 的输出?

这不是"信息泄露",而是有意设计

  • Defender 需要知道 Prosecutor 指控了什么,才能针对性反驳
  • 这模拟了真实的法庭辩论——辩护人看到起诉书后才做辩护
  • 如果 Defender 不看 Prosecutor 的输出,它只能泛泛地说"一切正常",无法针对性反驳

4.3 为什么 Judge 不看原始日志?

  • 减少 token 消耗(原始日志 ~1700 条事件)
  • 避免 Judge 产生自己的偏见
  • 强制 Judge 只基于双方提交的证据判断——这保证了可解释性
  • 如果 Prosecutor 和 Defender 都漏掉了某个关键证据,那是它们的问题,不是 Judge 的

4.4 Evidence Extractor 为什么不用 LLM

  • 避免在第一步就引入 LLM 的偏见
  • 规则提取是确定性的,可复现
  • 减少一次 API 调用的成本
  • 温度趋势摘要、活动时段统计这些用代码做更准确

4.5 非对称举证责任的具体含义

场景 Prosecutor 证据 Defender 反驳 Judge 判定
门锁报警 DoorLockAlarm 事件(直接证据) "可能是误触" 异常(直接证据无法用"可能"推翻)
温度微升 "温度比昨天高了1°C"(间接证据) "夏季正常日间波动" 正常(合理解释推翻了弱证据)
凌晨运动 "3AM 客厅有运动"(中等证据) "住户可能失眠" 异常规则3证据相当时倾向异常
无异常 "no_case" 正常规则4

5. 与 EGPv2 的对比

维度 EGPv2串行流水线 ADISR对抗辩论
架构 串行Triage→Investigator→Supervisor→Verifier 并行对抗 + 裁判
决策机制 每个角色可否决 → 保守累积 对立论证 + 中立裁判 → 结构性平衡
Recall 保障 无(任何角色都可能放过) Prosecutor 的 KPI 就是不漏报
Precision 保障 过强4 层验证) Defender 的 KPI 就是不误报
API 调用次数 4 次(+ 可能的循环) 3 次(固定)
可解释性 中(最终只有一个结论) 高(正反论据完整保留)
论文新意 流水线(常见) 对抗辩论(有顶会支撑但应用于 IoT 安全是新的)

6. 预期效果分析

基于现有数据的推理:

  • Prosecutor 单独跑 ≈ DeepSeek baseline 的效果Recall ~90%, FA ~80%)——因为它被要求"找异常"
  • Defender 单独跑 ≈ EGPv2 thinking 的效果Recall ~20%, FA ~3%)——因为它被要求"找正常解释"
  • Judge 综合判定 的预期:
    • TP 场景Prosecutor 有强证据Defender 难以反驳 → 大部分判为异常 → Recall 70-85%
    • FP 场景Prosecutor 有弱证据Defender 有强反驳 → 大部分判为正常 → FA 15-25%
    • 预期 F1 0.70-0.80

7. 实现复杂度

组件 工作量 说明
Evidence Extractor 规则代码,从现有 event_sequence 提取摘要
Prosecutor prompt 一个 system prompt
Defender prompt 一个 system prompt
Judge prompt 一个 system prompt + 判定规则
Runner 串联 3 次 API 调用 + 解析
Scorer 适配 从 Judge 输出提取 is_anomaly/threat_type

总工作量比 EGPv2 小3 个角色 vs 4 个角色,无循环),但效果预期更好。


8. 论文中的呈现方式

方法章节标题建议

"Adversarial Deliberation for IoT Security Reasoning"

或者更学术化:

"Structured Adversarial Reasoning with Asymmetric Burden of Proof"

实验对比矩阵

Method Type Recall FA% F1
Baseline (zero-shot) Single prompt ~70% ~58% 0.58
EDRC Structured prompt ~80% ~64% 0.63
EGPv2 Serial pipeline ~45% ~26% 0.51
ADISR (ours) Adversarial debate ~80% ~20% ~0.75

消融实验设计

  1. Prosecutor only去掉 Defender 和 Judge→ 验证 Prosecutor 保 Recall
  2. Symmetric burden对称举证→ 验证非对称规则的必要性
  3. Judge sees raw logJudge 看原始日志)→ 验证"只看论据"的设计
  4. Same prompt for both同构辩论→ 验证异构对抗的优势

9. 风险与 Plan B

风险 概率 缓解
Prosecutor 太弱(找不到证据) 它的 prompt 鼓励"宁可多报",跟 DeepSeek baseline 类似
Defender 太强(什么都能解释) Judge 的非对称规则限制了 Defender 的"解释力"
Judge 偏向某一方 消融实验验证;可以试不同模型做 Judge
3 次 API 调用成本高 比 EGPv2 的 4 次还少
F1 没到 0.70 调整非对称规则的阈值;或加入第二轮辩论