AI 学习笔记(二十九):LLM runtime drift detection 最小实践
上一篇我们把 policy as code 接进了提交、发布、运行时三道闸口。
但真正在生产里跑几周,你会发现另一个现实问题:
上线那一刻是合规的,不代表运行一周后还是合规的。
常见现象非常像:
- 发布时工具白名单是租户级,几次紧急变更后变成了全局级
- 预算阈值原本按 workspace 控制,后续为了“先恢复服务”被临时放宽后没回收
- 一条 fallback 路由只打算事故窗口开启,最后长期在线但没人再复核
这些都不是“发布漏检”,而是运行时漂移(runtime drift)。
这篇继续沿着生产运维主线,给出一套最小可落地方案:
定义可检测的治理基线,周期扫描偏差,按风险等级自动处置或升级人工处理。
1. 什么是 runtime drift
在 LLM 系统里,drift 不只指模型效果漂移,还包括治理状态漂移。
我建议把 runtime drift 定义成:
生产实际状态与“可审计基线”之间,持续超过容忍阈值的偏差。
这里的“状态”至少包含四类:
- 配置状态:模型版本、工具白名单、策略开关、预算阈值
- 权限状态:租户范围、写操作权限、外发渠道权限
- 流量状态:路由比例、fallback 启用范围、灰度占比
- 证据状态:例外单有效期、owner、审计日志完整度
如果只盯延迟和错误率,会漏掉大量治理退化问题。
2. 先定基线,不要先写扫描器
很多团队一上来就写 cron 扫描,然后很快发现“扫出来很多异常,但不知道哪个是真的问题”。
根因通常是基线定义不清。
我建议先固定一份最小 baseline contract:
- 字段清单:哪些字段必须比对
- 容忍策略:每个字段允许的偏差范围
- 时效窗口:偏差持续多久才算 drift
- 处置动作:检测到 drift 后怎么做
例如:
tool_scope从tenant漂到global:高风险,立即阻断高危调用cost_cap_usd比基线上浮 10% 以内:中风险,告警并要求 24h 内回收exception_expires_at已过期仍生效:高风险,自动降级或冻结新增发布
只有先写清这张契约,后续检测结果才有稳定解释。
3. 一个最小可执行数据模型
下面这个模型足够支撑第一版 drift 检测。
1 | type DriftSeverity = 'low' | 'medium' | 'high'; |
关键不是字段多少,而是三件事:
- 比对逻辑可回放
- 严重级别可解释
- 输出能直接映射处置动作
4. 处置策略:先自动收敛高风险,再派单跟进中低风险
drift 检测最怕“只报警不收敛”。
我建议第一版就做分级动作:
高风险 drift
- 自动降级到安全默认值(例如关闭全局 fallback)
- 触发 on-call 告警并附带变更证据
- 阻断高风险发布,直到 owner 确认
中风险 drift
- 创建治理工单,要求 24h 内回收
- 在发布闸门加入“有条件放行”义务
- 超时未处理自动升级高风险
低风险 drift
- 进入周报和趋势面板
- 连续 N 次出现自动升为中风险
这样才能避免系统进入“告警疲劳 + 风险堆积”。
5. 与现有 policy-as-code 的衔接方式
runtime drift detection 不是替代 policy-as-code,而是补上“上线后”这一段。
建议按这条链路衔接:
- Policy 决定基线:发布通过时固化 baseline snapshot
- Runtime 周期比对:每 5-15 分钟扫描一次关键字段
- Drift 决定动作:按 severity 自动收敛或创建义务
- 复盘回写策略:高频 drift 反推 policy 或发布流程修订
这条闭环跑起来后,治理就不是“一次审批”,而是持续执行系统。
6. 一周最小落地顺序
如果你现在还没有专门治理平台,一周内可以先做到这一步:
Day 1:定义 baseline contract(字段、阈值、动作)Day 2:在发布时落盘 baseline(JSON 即可)Day 3:实现定时扫描与 drift 输出(先不自动修复)Day 4:接入高风险自动收敛动作(1-2 条最关键规则)Day 5:把 drift 工单、告警、发布闸门串起来Day 6-7:复盘误报漏报,调优阈值与分级标准
先把“可检测 + 可处置”做通,再考虑引入更复杂的策略平台。
7. 常见误区
误区 A:把 drift 当成纯监控问题
drift 是治理问题,不只是可观测性问题。没有 owner 和处置 SLA,监控再多也只是堆日志。
误区 B:阈值一刀切
同样的偏差,在 prod-global 和 staging-tenant 的风险级别不同。阈值必须结合 scope。
误区 C:只修当前值,不修来源
如果每次都靠手工回调配置,但不修发布模板、权限模型或例外流程,drift 会反复出现。
总结
policy-as-code 解决的是“发布前如何一致决策”,
runtime drift detection 解决的是“上线后如何持续一致”。
这件事可以从最小闭环开始:
- 定义基线契约
- 定期检测偏差
- 分级自动处置
- 把结果回写到策略和流程
当系统能持续发现并收敛治理漂移时,生产稳定性和合规性才会真正进入可控区间。