跳转到主要内容
当一个智能体出问题时,第一个问题总是相同的:它究竟做了什么, 以及是谁改了那条让它得逞的策略? 没有一份追踪,你两个都答不上来。 你无法向审计员证明某个控制在出事那天是生效的,你无法把一次真实 攻击与一个嘈杂的误报区分开,你也无法重建那次泄露了记录的运行。 OrcaRouter 在你前进的同时就把答案记录下来。每一条被筛查的提示词、 每一次工具调用、每一次审批,以及每一次策略编辑,都落入一份 工作区限定、可查询的记录——回溯关联到产生它的智能体运行和会话。 本页展示如何把那份记录当作一份 ai agent audit trail 来用: 从单一一次可疑运行,到一份你交给审计员的签名报告。
这里的一切都是工作区限定的。成员看到他们工作区的追踪;没有 任何东西跨越租户边界。这份追踪由你已经配置的功能产生—— 防护栏防火墙——因此开启执行的同时也开启了取证。

1. 一份 ai agent audit trail 背后的四份记录

归因来自四条独立的流,每一条都关联到同一个运行和会话,因此 你可以在它们之间转换视角:

防护栏 Matches

每一条在请求或响应上触发的内容规则——规则类型、动作、阶段, 以及一个详情字符串。Member 可读。

防火墙 Events 与 Runs

每一次工具调用判定——allowauditdenysanitizepending_approval(挂起待审批),以及一条 cap_cost 规则的 解析判定——按智能体运行和会话汇总。Developer+。

审批决策

谁批准或拒绝了每一次被挂起的工具调用,作为一个审计动作记录。

策略变更历史

每一次防护栏和防火墙编辑——带版本、可 diff、可回退——外加 每次变更一行工作区审计行。
那条连接组织是智能体运行会话 id。来自同一次对话的一条 防护栏匹配和一个防火墙事件携带同样的运行谱系,因此”这次运行 mask 了一个邮箱,然后试了一次我们拒绝的抓取,然后被批准了一次 写入”读起来是一个故事,而不是三份互不相连的日志。

2. 防护栏 Matches——什么被筛查了(Member)

每一次一条防护栏规则触发,网关都会写一条匹配(match)。该 信息流位于 Guardrails 页面(Matches 标签),对任何工作区成员 可读。 每条匹配记录规则类型、所采取的动作block / mask / flag / annotate / spotlight)、阶段input / output)、 一个详情(detail)字符串,以及触发它的请求的运行谱系。 列出它、按防护栏或规则类型分组、按动作过滤、钻入某一条匹配, 或把该信息流导出为 CSV。
命中的子串(实际的邮箱、那个 SSN)仅当该防护栏的 Log raw content 开关开启时才被记录——而它默认关闭, 这是隐私保守的姿态。在它关闭时,你得到的是一条规则触发了及其 详情元字符串,但拿不到原始值。当你需要那个子串用于分类排查时, 逐条防护栏开启它;该设置不追溯既往。
一条嘈杂的规则也是追踪的一部分。用 POST /api/guardrail/match/:id/mark-fp(Admin)把一条匹配标记为 误报,这样你的信号保持干净,你的报告也不会过度计数。

3. 防火墙 Events 与 Runs——智能体做了什么(Developer+)

Matches 覆盖文本,而防火墙 Events 覆盖动作。每一次工具 调用评估都被记录,带它的判定、执行面、工具名,以及——至关重要的 ——它所属的智能体运行和会话。对 Events、Runs/sessions 汇总 和逐运行 trace 的读取需要 Developer+;较轻的 Discovered-tools 和异常信息流对每个 Member 开放。 Runs & sessions 视图是取证主力:它把事件按智能体运行汇总成 一份判定细分、该运行触及的不同工具和模型,以及首次/末次出现的 时间戳——一屏给出”这个智能体究竟做了什么”的答案。 在静态判定之外,异常信息流标记对每个工作区学习到的周内 小时基线(一个 14 天滚动平均)的偏离——速率和成本尖峰、 retry_loopnovel_path 转移——因此一个被允许但反常的模式 仍会在记录中浮现。

4. 审批决策——谁说了 yes(审计动作)

当一条规则解析为 pending_approval 时,被挂起的调用变成一次带外 审查(参见防火墙的 HITL 流程)。 那个决策是追踪的一部分:批准或拒绝会写一行工作区审计行—— firewall_approval_approvefirewall_approval_reject——点名行为 人。决策是首个写入者生效且幂等的,而且如果底层规则在挂起后 被改过,富化信息会注明上下文已发生变化。 于是一次先挂起后批准的工具调用端到端完全可归因:防火墙事件 显示这次挂起,审计行显示是谁释放了它,而两者都关联到同一次运行。

5. 策略变更审计——谁改了规则

一份智能体行为的追踪只有在你也能证明当时策略是什么——以及是 谁改了它——时才可信。 防护栏保留一份完整的版本历史。每一次创建、更新和删除都 在与变更同一个事务里写一行带版本的历史行。在一条防护栏上打开 History 即可看到每一个版本及其作者和时间戳,diff 任意两个, 并revert 到一个更旧的版本(revert 被记录为一个新版本——历史 从不被改动)。 防火墙的策略、规则和设置变更各自在变更提交后写一行工作区 审计行——firewall_policy_updatefirewall_rule_createfirewall_settings_update 等等——而自治级别变更 (firewall_autonomy_applied / firewall_autonomy_undone)会捕获 那个驱动一键撤销的前态快照。密钥和规则 blob 永不被记录。
两个平面都既记录变更让策略可逆。如果一次规则编辑导致了一次 回归,策略变更追踪会告诉你是哪次编辑、是谁做的——而你无需重新 部署任何东西就能把它回滚。

6. 一个实战示例:追踪一次可疑运行

假设一次运行因一次意外的出站调用被标记。在控制台,用一个 Developer+ 会话:
1

在 Firewall → Runs 中打开该运行

按 id 找到该运行。汇总显示它调用的每一个工具及每个上的判定 ——包括那个标记了它的、抓取形态工具上的 deny
2

转到那些事件

钻入那个被拒绝的事件。它携带工具名、命中的规则和原因、执行面, 以及运行/会话谱系——也就是你将用来对齐防护栏那一侧的同一份 谱系。
3

检查同一次运行上筛查了什么

打开 Guardrails → Matches 并过滤到那次运行。如果一条 Secrets Blocker 或 PII 规则在提示词上触发了,你现在就知道 这个智能体在试图外泄之前被递交了敏感材料。
4

确认策略当时是生效的

打开该防护栏上的 History 以及防火墙策略的审计行。确认 在那次运行之前没有人削弱过相关规则——如果有人削弱了,你 手里有作者和时间戳。
一次运行、四份关联记录,无需 log-grep 考古。关于外泄防御本身, 参见 数据外泄危险工具调用

7. 签名的合规报告——一份审计员能验证的追踪

为了对外证明,Compliance 执行面把这份追踪变成一个单一制品。 浏览框架目录、包和就绪度对每个 Member 开放且免费;安装 一个包、生成一份报告、上线,以及设定数据驻留,是付费计划工作区 Admin 的动作(服务端门控)。 一份合规报告Ed25519 签名、带一个 SHA256 内容哈希, 并可公开验证——接收者无需一个 OrcaRouter 账户就能核对它:
端点用途
GET /api/public/compliance/pubkey用来验证的公钥。
POST /api/public/compliance/verify验证一份报告的签名 + 哈希。
GET /api/public/compliance/share/:token一个指向某份报告的审计员分享链接。
报告导出为 CSV / JSON / PDF。框架包括 soc2hipaagdpriso_27001iso_42001nist_ai_rmfpci_dss、欧盟 AI 法案 (eu_ai_act),以及 OWASP Top 10 for LLM Applicationsowasp_llm)等等——安装一个包会物化匹配的防护栏和防火墙策略, 这样你报告所依据的控制就是实际被执行的控制。
数据驻留在这里指的是报告制品的区域(us / eu / uk / ap / cn / global),通过 PUT /api/compliance/residency (Admin)设定;跨区域读取被扣下。它治理的是证据制品存放在何处 ——它不是对你推理流量的地理钉定。

8. 保留与被遗忘权

一份取证记录是有界的,而非永久的。请求日志默认保留 30 天, 并被服务端钳制到 180 天的硬上限。当一个用户自删除时,会应用 一个 30 天宽限窗口,此后他们的 PII 被清除,且级联清理掉他们的 防护栏匹配、请求日志和防火墙事件——在满足被遗忘权 / DSAR 义务的 同时保持聚合审计历史完整。

9. 下一步去哪里

防护栏参考

Matches、原始内容记录、版本历史,以及完整的规则集。

防火墙参考

Events、Runs、异常、审批,以及审计日志。

过度自主权

在一个智能体行动之前约束它被允许做什么。

执行模式

Audit、shadow 和 observe——如何在执行之前先构建一份追踪。