跳转到主要内容

运行时治理需要执行点,而非策略文档

事后记录 agent 行为的治理方式无法约束它。真正有用的层是一组同步执行点,在工具调用执行之前将其阻断或重塑。

Beautiful sunlit view of the California State Capitol building with classic columns and vibrant blue sky.

治理的缺口

如今大多数企业级 agent 治理,本质上只是披着合规术语的可观测性。仪表盘会记录下 agent 读取了本不该读取的客户记录、两次调用了支付端点,或者把包含凭据的上下文窗口转发给了第三方模型。记录是准确的。但它也来得太晚了。

这种失效模式是结构性的,而非覆盖范围的问题。日志管道位于它所描述的那个决策的下游。当事件抵达存储时,工具调用早已返回,副作用已经落地,运行也已经继续向前。一个记录违规行为的仪表盘,早已在与运行的博弈中败下阵来。

这对 agent 而言比对传统服务更为重要,因为行为的单位不是一次请求,而是一条轨迹。单次运行可能发出数十次工具调用,每一次都以上一次为条件,跨越多个提供商和凭据。对轨迹的事后审查可以解释发生了什么。但一旦第三次调用成功,它就无法阻止第四次调用。只会描述的治理不是治理,而是日记。

执行点长什么样

执行点是一种同步拦截,策略决策可以在某个动作生效之前将其阻断或重塑。对于 agent 运行时,有三条接缝承载了大部分风险。

工具调用。 从模型到工具的每一次调用——函数调用、MCP 工具、HTTP 请求、shell 命令——在派发之前都要经过一次决策。该决策接收工具身份、参数载荷、发起调用的运行与步骤,以及累积的轨迹摘要。它返回允许、拒绝或重写:收窄参数、替换为只读变体、注入确认步骤。

数据外泄。 每一个离开信任边界的载荷——发往模型提供商、第三方 API、webhook——在传输之前都要检查分类标签和密钥模式。上下文窗口泄漏正是在这里被捕获,而不是在运行后对 prompt 的扫描中。

凭据签发。 每一个短期令牌、密钥或会话凭据都通过一个在签发时应用策略的代理来铸造。作用域绑定到具体的调用,而非整个运行。从未签发的凭据无法被滥用,而这条接缝是执行最小权限最廉价的地方,因为爆炸半径只是单个令牌。

每条接缝都需要三个属性,说起来容易,做起来难。

Professional meeting with individuals signing legal documents in an office setting.

第一,有界的延迟预算。同步决策位于每次工具调用的关键路径上,因此策略服务有一个以百分位数而非平均值表示的延迟上限。如果超出预算,调用方需要一个已定义的行为,而不是一个敞开的套接字。

第二,当策略服务不可用时的默认拒绝路径。诚实的权衡是:默认拒绝会在策略服务中断期间破坏生产运行。默认允许则不会,并且还会在治理最需要它的时刻悄然将其禁用。站得住脚的立场是:对高后果接缝(凭据签发、发往外部端点的外泄)采用默认拒绝,对较低后果的读取采用缓存且带版本的决策集,同时缓存的新鲜度有界并在审计记录中呈现。

第三,确定性。给定相同的策略版本和相同的请求,决策必须完全一致。不得有依赖挂钟时间的规则,不得有随机采样,评估器中不得有可变的全局状态。确定性正是让审计中的重放变得有意义的东西;没有它,一条被记录的决策只是轶事,而非证据。

一个同时满足这三点的具体机制,是带有显式评估上下文的决策契约:

{
  "request_id": "run-8f2c/step-14",
  "policy_version": "2025-03-11.4",
  "seam": "tool_invocation",
  "subject": {"agent": "reconciliation-v3", "run": "run-8f2c"},
  "action": {"tool": "payments.transfer", "args_hash": "sha256:9c1e..."},
  "context": {"data_classes": ["pii"], "egress_target": "internal"},
  "decision": "rewrite",
  "rewrite": {"tool": "payments.transfer_preview"},
  "latency_ms": 7,
  "cache": "fresh"
}

评估器消费这条记录,产出一个决策,运行时将两者都持久化。args_hash 让审计记录不含原始载荷,同时仍可针对存储的参数集进行重放。policy_version 字段是承重的那个。

策略版本化作为一项运营要求

策略会变;运行不会。一次在策略版本 A 下启动、并在版本 B 发布时仍在执行的运行,必须受 A 治理,否则审计记录就会变得前后矛盾。这条规则说起来很简单:记录每次决策所评估的策略版本,并为运行的整个生命周期固定该版本,除非触发了显式的重新评估。

固定是必要的,但不充分。在不破坏生产的前提下变更策略,同样必须安全。其机制是影子评估。候选策略版本与生效版本一同部署。每个决策请求都由两者评估。生效版本的决策被执行;候选版本的决策被记录并比对。运维人员在任何一次调用真正阻断运行之前,就能得到一份本会被阻断的调用的差异报告。

影子评估正是大部分运营成本所在。它使评估负载翻倍,要求候选版本具备同样的确定性保证,并且需要一份能区分有意义的分歧与噪声的比对报告。回报是策略发布不再是变更管理事件,而成为例行公事。

Low-angle view of Sofia's Parliament Building with majestic columns and clear sky.

另一装饰。

衡量它是否有效

执行点会产生一组小而实用的指标。真正重要的那些并不是覆盖率百分比。

按工具和按接缝跟踪阻断与放行的比率。阻断率接近零的工具,要么确实安全,要么受一条从不触发的规则治理;单看比率无法告诉你究竟是哪一种,但它会告诉你该往哪里看。在策略变更后阻断率飙升的工具,是影子审查的候选对象。

跟踪那个驱使运维人员禁用控制的误报率。这个指标决定了治理能否在与生产接触后存活下来。被关掉的控制不是控制。该衡量还应包括禁用时间:一条嘈杂的规则在被绕过之前存活了多久。禁用时间短,是策略在编写时缺乏对真实流量可见性的信号,而解决办法是影子评估,不是说教。

按延迟预算所指定的百分位数,跟踪各接缝处的决策延迟。一个平均达标、却在高峰期超标策略服务,就是一个会在高峰期被绕过的策略服务。

最后,跟踪重放保真度:针对存储的策略版本和请求重新评估时,能够完全一致地复现的已记录决策所占的比例。这是对确定性的运营测试。一个无法重放自身决策的治理系统,只是在描述行为,而非约束行为——这正是本文开篇所讲的问题。

真正重要的那一层

有用的治理层是小的、同步的、乏味的。它位于三条接缝处,在延迟预算下做出确定性决策,在后果严重处失败关闭,对其策略进行版本化,并衡量运维人员是否让它保持开启。策略文档和仪表盘是那一层的下游产物,而非其替代品。

先构建执行点。审计轨迹会从那里自行书写。

封面照片:Jakub Pabis / Pexels。

分享XLinkedIn永久链接5 分钟阅读

相关阅读

这能回答的问题

What is an enforcement point in agent governance?

A synchronous interception where a policy decision can block or reshape an action before it executes. For agent runtimes, the three highest-value seams are tool invocation, data egress and credential issuance.

Why is default-deny preferred when the policy service is unavailable?

Default-allow silently disables governance during an outage. Default-deny breaks runs, which is visible and recoverable. The practical compromise is default-deny at high-consequence seams and a bounded, versioned decision cache for lower-consequence reads.

Why does policy versioning matter for agent runs?

Policies change while runs are still executing. Recording the policy version evaluated at each decision, and pinning it for the run's lifetime, keeps the audit record replayable. Shadow evaluation lets new versions be tested against live traffic before they can block anything.

How do you know an enforcement control is working?

Track blocked-versus-allowed ratios per tool and seam, decision latency at the named percentile, replay fidelity against the stored policy version, and the false-positive rate that leads operators to disable the control. A control that gets turned off is not a control.