跳到正文

可观测与安全 ​

一句话:可观测回答“实际发生了什么”,安全回答“这一次允许发生什么”。前者产出证据,后者划定边界;两者都不该用“请求成功”或“模型没违规”来结案。

对应原书:第 13 章《Agent 可观测性》、第 14 章《Agent 安全》。

为什么需要 ​

传统服务的可观测性围绕请求:成功率、延迟、错误码。Agent 不适用,因为三件事变了:

  • 成功不等于做对:接口返回 200,业务对象可能改错;任务跑完,结果可能没交付。
  • 路径不固定:同一个问题,两次执行的步骤、工具、成本都不一样,看单点指标会漏掉绕路与重复。
  • 动作有副作用:删文件、发消息、转账、改配置,出了事必须能回答“谁让它做的、依据是什么”。

安全侧同理。给模型加护栏、给沙箱加隔离,只解决了“系统有没有漏洞”;但 Agent 同时握着决策权和执行权,一次合法工具调用的组合也可能是危险的。所以需要两条线:盾管系统漏洞,缰绳管单次调用能不能做。

核心机制 ​

  • Session 关联多次交互,可以跨多个 Trace、跨很长时间;
  • Trace 承载一次外部输入触发的活跃执行;
  • Span 是基本执行单元:做了什么、花了多久、结果如何、由谁调用。

跨请求等待超过阈值时,应当结束旧 Trace,恢复时新建 Trace,并用 Trace Link 关联。否则一个等了三天的长任务会被压进一条早已过期的 Trace 里,既查不到,也聚合不了。

二、十二种统一执行语义 ​

ENTRY、AGENT、WORKFLOW、STEP、LLM、RETRIEVAL、MEMORY、TOOL、GUARDRAIL、COMPACTION、HITL、INTERRUPT。

语义层的价值是拉齐不同框架的术语。没有统一语义,跨应用查询只能按字符串匹配,聚合出来的数字不可比。

三、四层采集管道与三种信号 ​

信号的使用顺序固定:指标发现异常 → Trace 定位请求 → 日志还原细节。反过来先翻日志,会在海量文本里迷路。

指标只用低基数标签(业务来源、阶段、模型),禁止把 Trace ID、请求 ID 放进 Metrics——那会让时间序列基数爆炸。Token 要分输入、输出、缓存分别记录,缓存命中率是独立口径。

四、eBPF 的位置与边界 ​

eBPF 把模型调用看成网络请求与响应,把工具调用看成进程、文件、网络事件。它完全无侵入,适合补上“应用没有埋点”的那一段。

但它缺业务语义,回答不了“为什么这么做”。它必须与应用侧埋点、审计记录互证,不能当成唯一手段。同理,采集游标与去重是幂等机制,不是业务 Checkpoint。

五、任务效果与证据链 ​

任务效果分三层看:最终结果、关键步骤、执行轨迹。只评最终结果,会漏掉绕路、重复、越权、错误委派和过度消耗——结果对,过程可能完全不可运营。

审计的最小证据链有四环:

  1. 主体授权:是谁;
  2. 意图授权:要做什么、依据哪条策略;
  3. 执行事实:实际发生了什么;
  4. 结果证据:产物或副作用在哪里。

缺任何一环,都无法复核。检测要分层:原始事实(追加写)→ 候选信号(规则派生)→ 上下文研判 → 已确认事件。中间态不能当安全结论,检测与拦截也要分开建模——把观测当防护,是最常见的错觉。

六、五类攻击面 ​

攻击面典型形态
不可信外部输入网页、邮件、文档、工具返回里的提示注入
工具发现与调用恶意工具描述诱导、参数注入命令、越权调用
动态业务调用与网络SSRF 从单一入口扩散到任意出口、中间服务代联网
结果交付边界污染内容被持久化到数据库、消息、工单
自主重试与并发重试耗尽余额、并发放大失败(拒绝服务式消耗)

防护思路对应两句话:外部防操纵(输入净化、内容安全、工具白名单),内部限影响(最小权限、沙箱、限流与重试预算)。

七、盾与缰绳 ​

盾是五层纵深:应用、模型、数据、身份、基础设施。单层不够,因为 Agent 的输入、工具、网络、交付、重试都会形成新的出口。

缰绳是五步:身份鉴权 → 意图识别 → 逐次调用校验 → 高危二次授权 → 数据出域阻断。它管的是“这一次能不能做”,和盾管“系统有没有洞”是两件事。

一个具体例子:出站默认允许,是很多真实事故的根因。Agent 可以通过一个可访问的中间服务代为联网,绕过原本只保护入口的边界。所以出站必须默认拒绝、统一收敛到网关。

八、身份是贯通双轨的关口 ​

四条纪律分别管住凭证的生命周期、权限的收敛方向与出站的独立授权:

  • Agent 权限 ≤ 用户权限,按任务临时授权,不长期持有;
  • 凭证不落在代码、配置或模型上下文里,由凭证保管库颁发、轮换、回收;
  • 入站与出站分别授权,入站鉴权不自动转成出站权限;
  • Token Exchange 做权限收敛:换出来的下游凭证比用户更窄;首次代理需要用户明确同意,撤销即失去出站能力。

行级、字段级隔离交给身份系统,不要指望在 Prompt 里写“不要给用户看别人的数据”。

最小上手 ​

yaml
observability:
  semantics: [ENTRY, AGENT, WORKFLOW, STEP, LLM, RETRIEVAL, MEMORY, TOOL, GUARDRAIL, COMPACTION, HITL, INTERRUPT]
  metrics: {labels: low_cardinality_only, forbid: [trace_id, request_id]}
  audit_chain: [subject_authz, intent_authz, execution_fact, result_evidence]
security:
  egress: deny_by_default
  credential: short_lived_from_vault
  agent_permission: intersect(user, workload, delegation, resource)
  high_risk: reauthorize_per_action

验收看四件事:任一任务能还原“谁、以什么权限、做了什么、结果在哪”;指标能定位到具体 Trace;出站请求全部经过统一关口;Agent 被撤销授权后,运行中的任务也受影响。

生产动作 ​

  • 把“请求成功”从完成判据里删掉。端到端 P50/P95/P99 才是用户感知,模型耗时只是其中一段。
  • 抽检高分样本。只盯低分会漏掉“评估器给了高分但业务不认”的情况。
  • 检测与拦截分开建。先有可信的检测,再谈自动阻断;顺序反了会误杀。
  • 重试要有预算。自主重试乘上并发,会把一次下游故障放大成余额耗尽。

边界 ​

  • eBPF 看不到意图。它能回答“调了什么”,回答不了“为什么调”。
  • 护栏不等于安全。九类护栏覆盖内容与注入,但越权、出站、凭证滥用要靠身份与网络策略。
  • 审计日志不是业务证据。日志证明“发生过调用”,业务 Evidence 要由业务系统确认。
  • 采样有代价。采多了成本高、采少了漏检,采样策略要显式设计,不能默认全采或默认不采。
  • 安全事件统计要带口径。例如“发生过 AI 安全事件的机构中 92% 缺访问控制”,分母是事件机构,不是全部受访机构。

讲清楚 ​

可观测的对象不是请求,而是执行:Session 圈定范围,Trace 圈定一次活跃执行,Span 记录每一步;用十二种统一语义让跨框架的数据可比。采集走四层管道,使用时按“指标 → Trace → 日志”下钻。eBPF 补无埋点的空白,但缺业务语义,必须与应用侧互证。

安全要两条线:盾是应用、模型、数据、身份、基础设施五层纵深,缰绳是鉴权、意图识别、逐次校验、高危二次授权、出域阻断五步。身份贯通两者:Agent 有唯一身份,权限不超过用户,凭证短期且不落模型,入站出站分别授权,换取的令牌只收窄不放大。

可观测产出的是证据,不是结论;安全做的是约束,不是评分。把两者混成“一个评分卡”,既查不了事故,也挡不住越权。

适用:Agent 运行观测、审计与安全边界设计 | 初稿 2026-10

把 AI 工程讲到既懂也会用