前置知识: AI Agent

终止开关与金丝雀令牌

6 minIntermediate

终止开关是停止运行的硬机制。金丝雀令牌是检测运行何时行为不当的软机制。两者都需要。终止开关是"拔插头"——它停止执行但不告诉你为什么需要停止。金丝雀令牌是"矿井中的金丝雀"——它们在事情出错时发出信号,但它们不停止运行。组合:金丝雀检测 → 人类审查 → 终止开关执行。

终止开关与金丝雀令牌

终止开关是停止运行的硬机制。金丝雀令牌是检测运行何时行为不当的软机制。两者都需要。终止开关是”拔插头”——它停止执行但不告诉你为什么需要停止。金丝雀令牌是”矿井中的金丝雀”——它们在事情出错时发出信号,但它们不停止运行。组合:金丝雀检测 → 人审查 → 终止开关执行。

类型: 学习 语言: Python (stdlib, 金丝雀令牌注入器 + 终止开关模拟器) 前置条件: Phase 15 · 13 (成本治理器), Phase 15 · 11 (浏览器Agent) 时间: ~30 分钟

问题

成本治理器 (Lesson 13) 在预算超限时终止运行。但如果 Agent 在预算内行为不当呢?Agent 可以在预算内泄露数据、执行未授权操作或追求不对齐目标。

终止开关和金丝雀令牌解决不同但互补的问题:

  • 终止开关:外部机制,强制停止运行。不管 Agent 想不想。
  • 金丝雀令牌:嵌入 Agent 环境中的隐藏标记,当被触发时发出警报。检测 Agent 是否访问了它不应该访问的内容。

概念

终止开关设计

终止开关是运行时外部的机制。Agent 不能禁用它,因为 Agent 不控制它。

实现选项:

  • 进程级:杀死 Agent 进程。简单但丢失状态。
  • 检查点级:标记检查点为”已终止”。Agent 可以从检查点恢复,但终止原因被保留。
  • API 级:撤销 Agent 的 API 密钥。Agent 无法再进行 LLM 调用。

关键属性:终止开关必须从 Agent 的信任边界外操作。如果 Agent 可以编辑自己的终止开关,它就不是终止开关。

金丝雀令牌设计

金丝雀令牌是嵌入 Agent 环境中的隐藏触发器。当 Agent 访问或处理令牌时,警报触发。

型:

  • 文件系统金丝雀:Agent 不应读取的文件。如果 Agent 读取它,警报触发。
  • 网络金丝雀:Agent 不应访问的 URL。如果 Agent 请求它,警报触发。
  • 记忆金丝雀:写入 Agent 持久记忆的特殊标记条目。如果 Agent 在后续会话中引用它,警报触发。
  • 凭证金丝雀:Agent 不应使用的 API 密钥。如果 Agent 使用它,警报触发。

金丝雀令牌检测”Agent 是否在越界?“而不需要监控每个动作。

组合模式

金丝雀触发 → 警报 → 人类审查 → 决策 → 终止开关执行(如果需要)

金丝雀检测问题。人评估严重性。终止开关执行决策。

金丝雀的假阳性和假阴性

  • 假阳性:Agent 合法地访问包含金丝雀的文件(例如,搜索代码库时)。缓解:将金丝雀放在 Agent 不应访问的路径中。
  • 假阴性:Agent 绕过金丝雀(例如,通过 Shell 命令读取文件而非文件读取工具)。缓解:在多个层放置金丝雀。

终止开关的失败模式

  • Agent 在终止前完成损害。终止开关是反应性的,不是预防性的。
  • 终止丢失状态。如果 Agent 在终止前写了重要数据,数据可能损坏。缓解:在终止前持久化检查点。
  • 级联终止。终止一个 Agent 可能触发依赖它的其他 Agent 的失败。缓解:终止前通知下游消费者。

构建它

code/main.py 模拟一个 Agent 运行,带文件系统金丝雀和网络金丝雀。当 Agent 访问金丝雀时,警报触发。人审查后可以选择执行终止开关。

运行:

python3 code/main.py

练习

  1. 运行 code/main.py。观察金丝雀触发时会发生什么。哪个金丝雀先触发?
  2. 添加记忆金丝雀:写入 Agent 持久记忆的特殊条目。在第二次运行中,Agent 引用该条目时触发警报。
  3. 设计一个金丝雀系统来检测数据泄露:Agent 不应将某些文件内容发送到网络。如何实现?
  4. 实现级联终止:当主 Agent 被终止时,其子 Agent 也被终止。如何确保所有子 Agent 都被清理?

关键术语

术语含义
终止开关强制停止运行的外部机制
金丝雀令牌检测越界行为的隐藏触发器
文件系统金丝雀Agent 不应读取的文件
网络金丝雀Agent 不应访问的 URL
记忆金丝雀写入持久记忆的特殊标记条目
凭证金丝雀Agent 不应使用的 API 密钥
假阳性合法访问触发金丝雀警报
假阴性Agent 绕过金丝雀而不触发警报