1. 为什么只做上线前 Checklist 不够
很多企业做 AI 合规审计时,会先补一张上线前检查清单:
- 有没有权限控制;
- 有没有日志;
- 有没有人工确认;
- 有没有敏感词策略;
- 有没有测试报告。
这些检查项是必要的,但对生产环境里的 AI 系统来说还不够。
原因是 AI 的风险发生在运行时。
一次 AI 调用可能同时经过:
用户输入 -> Prompt 组装 -> RAG 检索 -> 上下文拼接 -> 策略判断 -> 模型生成 -> tool call -> 人工复核 -> 输出或写入业务系统其中任何一个环节出问题,都可能导致最终输出偏离预期。
例如:
- RAG 检索到了过期文档;
- 外部网页或上传文件里混入了不可信内容;
- tool call 参数被错误生成;
- 高风险输出没有进入人工复核;
- 日志只记录了最终回答,没有记录上下文和策略命中。
因此,企业 AI 审计不能只停留在上线前 Checklist,而要设计运行时审计能力!
< 核心目标是 >:
看得见发生了什么 解释得清为什么发生 判断得出是否越界 沉淀得下如何整改2. 运行时审计的核心对象
运行时审计不是单纯记录模型输入输出,而是要覆盖完整链路。
建议至少覆盖 7 类对象。
| 审计对象 | 需要记录什么 | 目的 |
|---|---|---|
| 应用 | app_id、场景、owner、风险等级 | 知道哪个 AI 应用发生了行为 |
| 用户 | user_id、user_role、team_id | 判断权限和责任边界 |
| 输入 | input_summary、输入来源、是否外部内容 | 判断请求意图和可信等级 |
| 检索 | knowledge_base、chunk_id、文档版本 | 回放 RAG 命中内容 |
| 策略 | policy_hits、policy_version、处理结果 | 判断规则是否生效 |
| 工具 | tool_name、tool_args、tool_result、权限等级 | 追踪 tool call 行为 |
| 输出 | output_summary、final_destination、review_status | 判断输出去向和复核状态 |
如果只记录 prompt 和 response,后续排查时会非常被动。
真正有价值的审计日志,应该能把一次 AI 行为串成完整链路。
3. 审计事件触发器设计
不是每一次 AI 调用都需要重审。
建议通过触发器判断哪些请求需要重点记录、拦截或进入复核。
3.1 数据触发器
当请求读取以下数据时触发:
- 客户数据;
- 个人信息;
- 合同;
- 财务;
- 源代码;
- 工单详情;
- 内部策略文档。
3.2 内容触发器
当输入或输出中出现以下内容时触发:
- 价格承诺;
- 合同范围;
- 法律责任;
- 供应商推荐;
- 医疗、金融等高风险内容;
- 对客户可见的承诺性表达。
3.3 工具触发器
当 Agent 调用以下类型工具时触发:
- 写入类工具;
- 发送类工具;
- 审批类工具;
- 删除类工具;
- 修改配置类工具;
- 查询敏感数据类工具。
3.4 外部输入触发器
当上下文包含以下内容时触发:
- 外部网页;
- 用户上传文件;
- 供应商上传文件;
- 第三方接口返回值;
- 邮件附件;
- 未验证知识库片段。
这类内容建议默认标记为untrusted_content。
3.5 异常触发器
当出现以下情况时触发:
- 输出被人工驳回;
- 策略频繁命中;
- tool call 调用失败;
- 成本异常波动;
- 同类请求反复出现错误;
- 某个知识库片段多次导致错误解释。
触发器的意义,是把审计从“人工记得查”变成“系统主动提示”。
4. 最小审计日志字段
如果不能一次性建设完整审计平台,可以先从最小日志字段开始。
建议高风险 AI 行为至少记录以下字段。
| 字段 | 示例 | 作用 |
|---|---|---|
| request_id | req_20260707_001 | 串联一次完整 AI 调用 |
| app_id | procurement_agent | 标识具体 AI 应用 |
| user_role | 采购经理 | 判断权限和责任边界 |
| scenario | 供应商评审摘要 | 识别业务场景 |
| risk_level | L2 | 决定是否进入复核 |
| input_summary | 生成供应商报价对比摘要 | 保留输入意图 |
| data_sources | supplier_upload, contract_template | 追踪数据来源 |
| retrieved_chunk_ids | doc_18_chunk_03 | 回放检索片段 |
| prompt_version | prompt_v3.2 | 定位提示词版本 |
| model_version | model_xxx | 定位模型版本 |
| policy_hits | price_commitment_risk | 记录策略命中 |
| tool_calls | none / approval_query | 追踪工具调用 |
| output_summary | 生成供应商优先级建议 | 记录输出摘要 |
| human_review_status | rejected / approved | 记录人工复核状态 |
| final_destination | draft_only / approval_flow | 判断是否影响业务状态 |
| incident_tag | price_claim_unverified | 标记异常类型 |
| remediation_status | policy_updated | 记录整改闭环 |
这里有两个关键点。
第一,不一定要永久保存完整原文。
涉及隐私、客户数据或敏感业务信息时,可以采用脱敏、摘要、哈希、分级留存、最短必要留存等方式。
第二,字段要能支持回放。
日志不是为了“证明有记录”,而是为了能在问题发生后回答:
- 当时模型看到了什么;
- 命中了什么策略;
- 调用了什么工具;
- 有没有人工确认;
- 最终输出去了哪里;
- 后续整改是否完成。
5. 风险分级与处理策略
运行时审计必须和风险分级绑定。
否则很容易出现两个极端:
- 全部放开,风险不可控;
- 全部人工审核,业务跑不动。
建议采用三层处理。
| 风险等级 | 适用场景 | 处理方式 |
|---|---|---|
| L1 低风险 | 内部摘要、知识整理、会议纪要、低影响脚本辅助 | 自动处理,保留基础日志 |
| L2 中风险 | 外发内容草稿、需求分析、技术方案初稿、测试样例、客户回复建议 | 明确 reviewer,保留审计记录 |
| L3 高风险 | 生产代码核心逻辑、数据库变更、权限策略、客户沟通定稿、商业决策、涉及隐私与合规的数据处理 | 不允许 AI 生成后直接采用,必须人工主写或双重验证 |
这套分级的核心不是限制 AI,而是限制 AI 在高风险场景里的自动闭环。
6. 采购 Agent 示例
假设企业上线了一个采购 Agent。
它可以:
- 汇总供应商资料;
- 对比报价和服务条款;
- 生成采购评审摘要。
某次运行中,供应商上传文件里出现了一段描述:
本报价在特殊项目中可视为长期优惠。采购 Agent 在生成摘要时,将其写成:
该供应商具备长期价格优势。这句话可能触发三层风险:
| 风险 | 说明 |
|---|---|
| 业务风险 | 采购经理可能把它作为供应商排序依据 |
| 法务风险 | 长期价格优势可能被误读为合同承诺 |
| 组织风险 | 后续难以解释该判断来自正式报价、合同条款还是供应商单方面描述 |
如果系统具备运行时审计,应能回放以下信息:
| 回放项 | 结论 |
|---|---|
| 数据来源 | 来自供应商上传文件,属于外部不可信输入 |
| 上下文 | 模型同时看到历史报价表和供应商补充说明 |
| 策略命中 | 未命中“价格承诺需内部确认”策略 |
| 工具调用 | 未写入审批系统,只生成摘要草稿 |
| 人工复核 | 采购经理驳回,要求补充合同依据 |
| 整改动作 | 更新价格承诺策略,标记 supplier_upload 为 untrusted_content,相关输出升级为 L2/L3 复核 |
这类案例说明,运行时审计的价值不是证明 AI 永远不会错,而是在 AI 出现偏差时,快速定位偏差来源,并把偏差变成下一轮控制能力。
7. 最小落地步骤
如果没有完整平台,可以先做一个最小版本。
Step 1:选 3 个高风险场景
优先选择:
- 客户可见输出;
- 涉及合同、价格、采购、财务的输出;
- 能调用工具或写入业务系统的 Agent;
- 会读取客户数据、个人信息、源代码或内部敏感文档的场景。
Step 2:定义 5 类触发器
先从以下触发器开始:
- 敏感数据触发;
- 外部不可信内容触发;
- 工具调用触发;
- 客户承诺触发;
- 人工驳回触发。
Step 3:记录最小日志字段
至少记录:
- request_id;
- app_id;
- scenario;
- risk_level;
- data_sources;
- policy_hits;
- tool_calls;
- output_summary;
- human_review_status;
- incident_tag。
Step 4:建立复核队列
把 L2、L3 内容集中进入 reviewer 队列。
复核队列不只是让人确认一次,而是为了沉淀“哪些风险经常出现”。
Step 5:每周复盘 30 分钟
每周只看三类问题:
- 哪些触发器命中最多;
- 哪些输出被人工驳回最多;
- 哪些问题应该转成新策略或新测试样本。
8. FAQ
Q1:运行时审计是不是必须保存完整 Prompt 和上下文?
不一定。可以根据风险等级选择完整保存、摘要保存、脱敏保存、哈希留存或分级留存。
关键是保留足够的可回放线索。
Q2:所有 AI 请求都要进入人工复核吗?
不建议。更合理的方式是按风险分级处理:低风险自动化,中风险 review,高风险人工主写或双重验证。
Q3:只有 Agent 才需要运行时审计吗?
不是。RAG、知识库问答、客户回复生成、代码助手、数据分析助手等,只要进入真实业务流程,都需要考虑运行时审计。
Q4:运行时审计和普通日志有什么区别?
普通日志记录“发生过”。运行时审计要回答“为什么发生、是否越界、如何整改”。
Q5:最先应该做哪件事?
先盘点 AI 应用资产和高风险场景,再定义触发器和最小日志字段。不要一开始就追求完整平台。
9. 上线前检查清单
发布前可以把下面这张清单放进技术方案评审或上线评审材料里。
| 检查项 | 必填 / 建议 | 通过标准 |
|---|---|---|
| 是否完成 AI 应用资产登记 | 必填 | 有 app_id、owner、场景、风险等级 |
| 是否定义高风险场景 | 必填 | 至少覆盖客户可见输出、工具调用、敏感数据读取 |
| 是否定义审计触发器 | 必填 | 数据、内容、工具、外部输入、异常 5 类至少覆盖 3 类 |
| 是否记录最小日志字段 | 必填 | request_id、data_sources、policy_hits、tool_calls、human_review_status 可回放 |
| 是否区分 L1 / L2 / L3 | 必填 | 高风险动作不允许 AI 自动闭环 |
| 是否建立 reviewer 队列 | 建议 | L2 / L3 内容有明确 reviewer 和处理结果 |
| 是否有整改回流机制 | 建议 | 异常能转为策略、测试样本或权限调整 |
| 是否确认数据留存策略 | 必填 | 涉及隐私和客户数据时有脱敏、摘要或分级留存策略 |
这张表的作用不是替代公司内部安全流程,而是帮助技术、产品、安全/合规团队在同一张表里对齐:当前 AI 系统到底能不能被回放、被复核、被持续改进。
结尾
企业 AI 合规审计不是只做一张上线前 Checklist。
真正关键的是,把审计能力嵌进 AI 系统运行链路里,让输入、检索、策略、工具、输出、人工复核和整改闭环都能被追踪。
如果你正在推进 AI 助手、RAG、Agent、知识库问答、采购助手、客户成功 Copilot、代码助手或内部自动化工具上线,可以先用《企业 AI 合规审计 Checklist》做一次最小自查。
重点检查:
- 哪些 AI 应用已经在运行;
- 哪些场景应该触发运行时审计;
- 哪些数据源和工具调用需要重点留痕;
- 哪些输出必须进入人工复核;
- 哪些异常可以沉淀为策略和测试样本。
Checklist 不是终点,而是把审计能力嵌进系统的第一步。
如果你需要把这套内容放进技术方案评审或上线前自查流程,可以评论或私信AI审计,获取《企业 AI 合规审计 Checklist》完整版。