Compliance Management FOR AI Agents
AI 智能体的合规管理:治理与审计
AI 智能体合规管理的技术指南:审计跟踪、信息治理、沙盒隔离,以及为什么 MUT 等协议层至关重要。
Ollie @puppyone2026年3月31日
大多数团队起步时的心智模型都很简单:
这对原型足够,但对生产环境不够。
一旦 LLM 工作流触达真实运营,新的问题会立刻冒出来:
这就是为什么一旦越过 demo,“工作流”会比“提示词”更重要。Anthropic 在其关于 AI 智能体有效上下文工程 的工程笔记中也提出了类似观点:上下文是有限的,工具边界很重要,长时间运行的智能体需要显式整理,而不是不断把更多内容堆进提示词。
在实践里,生产级 LLM 工作流,就是模型之外那整套控制面。
最安全的默认做法,是给不同的工作流层分配不同职责。
| 层 | 职责 | 如果这一层定义模糊,通常会坏在哪里 |
|---|---|---|
| Trigger | 接收用户请求、事件或定时任务 | 重复启动、责任边界不清 |
| Context assembly | 只检索并压缩当前步骤真正需要的证据 | 提示词膨胀、证据过期或互相冲突 |
| Model reasoning | 产出草稿、分类结果或下一步计划 | 计划幻觉、输出不稳定 |
| Tool and action control | 限制这一层能调用哪些工具、带什么输入 | 风险性写入、工具选择混乱 |
| Approval and policy | 拦截敏感或低置信度动作 | 虚假的确定性、不可复核的变更 |
| Execution | 执行一个受限动作,或返回一个结构化结果 | 副作用难以回滚 |
| Observability and evaluation | 记录运行,判断结果,支持回放 | 出事故却说不清原因 |
这种结构看起来刻意不炫技。
但好的生产系统通常就是“清晰的系统”。它把一个庞大、神秘的“智能体循环”替换成几个操作员能够理解和推理的显式边界。
提升可靠性最快的方法之一,是不要再把每个步骤都当成自由格式的散文生成。
一个工作流步骤应该返回一个可预测的包裹结构,而不是一段写得很漂亮的惊喜文本:
{
"step": "draft_refund_decision",
"status": "needs_approval",
"confidence": 0.73,
"evidence": [
{"source": "policy-14", "quote": "Refunds allowed within 14 days for unused credits."},
{"source": "order-8821", "quote": "Purchase date: 2026-03-25"}
],
"proposed_action": {
"type": "approve_refund",
"target_id": "order-8821"
},
"reason": "Policy appears satisfied but account history includes one prior manual exception."
}
这种契约会同时带来三个好处:
如果一个人工审核者看不清模型看到了什么、得出了什么结论、以及它下一步准备做什么,那这个工作流还不算生产就绪。
生产环境里最大的错误,依然是给模型塞太多原材料。
更好的模式是:
这听起来很显然,但很多系统做的恰恰相反。它们把搜索结果、历史消息、工具输出和策略片段全丢进一个上下文窗口里,然后希望模型自己找到正确线索。
这种做法会以可预测的方式失败:
Anthropic 关于紧凑上下文整理的建议在这里非常相关。OpenTelemetry 关于 traces 的文档则解释了旁边那一层可观测性问题:如果一个工作流跨越多个决策和工具,你需要的是一串可追踪的 spans,而不是一个黑盒式的“LLM 步骤”。
看看 puppyone 如何为生产级 LLM 工作流限定上下文范围Get started很多团队谈论工具调用时,仿佛一个智能体只有两种状态:“有工具”或“没工具”。对生产环境来说,这种划分太粗了。
更好的问题是:
在这个具体步骤里,为了这个具体目的,应该开放哪一个工具?
例如:
如果每一步都能看到完整工具目录,模型就得先花 token 判断“到底什么是安全可调的”。更糟的是,操作员会被迫相信提示词措辞,而不是相信系统边界。
一个实用的步骤范围划分规则可以是:
| 步骤类型 | 默认工具姿态 |
|---|---|
| 读取并总结 | 只读工具,不允许写 |
| 分类或分流 | 只读工具,加一个查询工具 |
| 规划下一步 | 只读工具,可选沙盒模拟 |
| 起草动作建议 | 窄范围动作 schema,不允许直接执行 |
| 执行已批准动作 | 一个具体写工具,并要求完整 trace |
这不是过度设计,而是防止一次检索错误直接演变成系统变更的关键。
另一个可靠模式,是在工作流变得昂贵或危险之前插入检查点。
常见触发条件包括:
很多所谓“智能体”系统,就是在这里重新赢回可信度的。模型依然有用,但它不需要在工作流已经进入模糊区时,硬装出一副很确定的样子。
NIST 的 AI 风险管理框架 在这里是个很好的锚点。信任问题不只是输出质量,更是治理、可复核性,以及人是否能在正确的时机介入。
这些问题通常会在真实使用的头几周出现:
| 故障模式 | 在线上表现出来的样子 | 结构性修复手段 |
|---|---|---|
| 上下文稀释 | 模型什么都看到了,却没有真正 grounding 到任何东西 | 使用更小、更面向步骤的证据包 |
| 工具暴露过宽 | 模型选错工具,或过度调用某个通用工具 | 按步骤限制工具集合 |
| 记忆薄弱 | 工作流重复劳动,或在步骤之间丢失连续性 | 持久化结构化状态,而不是原始 transcript |
| 没有审批边界 | 敏感动作全靠提示词约束 | 显式策略闸门与人工检查点 |
| 缺少运行追踪 | 操作员无法解释哪里出了问题 | 结构化日志、请求 ID、trace spans |
| 输出过于自由格式 | 下游系统无法安全消费模型结果 | 稳定的 JSON envelope 和 schema |
注意,这里面几乎没有哪个问题是靠“换一个更强模型”就能解决的。
模型质量当然重要,但生产可靠性的第一批明显提升,往往来自工作流结构,而不是换前沿模型。
当工作流的难点不在于“生成文本”本身,而在于反复、稳定且安全地组装正确上下文时,puppyone 才是关键。
这通常体现在:
在这些情况下,模型不应该每一轮都重新去猜企业上下文。上下文层应该把证据塑形一次,再把它稳定地分发给不同步骤、不同智能体,或者人工审核节点。
这比不断给原始文档堆更长的提示词,更适合生产环境。
如果你正在把一个已有的 LLM 工作流推向生产,最高杠杆的顺序通常是:
不要从“让智能体更自治”开始。
先从“让工作流更容易解释”开始。
这种心态通常会产生一种系统:第一周不那么惊艳,但第三个月更容易活下来。
用 puppyone 让工作流上下文更干净、更可复核Get started生产级工作流需要显式的上下文边界、按步骤收窄的工具、必要时的回退行为、审批规则,以及足够的日志去重建发生了什么。Demo 可以靠直觉,生产环境不行。
不应该。很多工作流更适合做成“辅助式”或“带检查点”的系统。完全自治是一种设计选择,不是成熟度证明。
通常是先把上下文组装与模型推理分开,再减少每一步可用的工具数量。这种改动往往能同时改善质量、成本和可复核性。