它解决的问题
让 AI 给客户发消息这件事,最大风险不是技术不行,是公关事故:
- “我们一定能 100% 退款” → 不能保证的话变绝对承诺
- 把客户电话发到群里 → PII 泄露
- 同一句话 5 分钟内发 10 遍 → 营销骚扰
- 给已经在黑名单的客户继续发 → 投诉升级
风控审计把所有这些前置成强制闸门 —— Agent 想发什么,先过一遍,过不了直接拦截,留痕给 SOC / 法务追溯。
5 层静态规则
每条外发动作(销售 Agent / 群运营 / 知识库审核)都必经:
| 层 | 规则 | 触发动作 |
|---|---|---|
| 1. 敏感词 | 政治 / 投诉 / 色情 / 暴力词表 | 拦截 + 留痕 |
| 2. 绝对承诺 | ”保证 / 一定 / 100% / 永远 / 绝对” | 拦截 + 标 absolute_promise_literal |
| 3. PII 拦截 | 11 位手机 / 邮箱 / 18 位身份证 | 拦截 + 标 pii_literal |
| 4. 频控 | 同客户 N 次 / 时 · 同群 M 次 / 日 | 进入”冷却”状态 |
| 5. 黑名单 | 客户 / 群 / 关键词三维度 | 直接拒绝 |
字面规则永远跑、永远拦 —— 哪怕 LLM 觉得”这句话没事”。
LLM 语义 doublecheck
字面层 OK 的内容继续过 LLM 合规审核:
- 语义级绝对承诺:“肯定可以”、“问题不大” 这种字面不命中但语义违规
- 事实性虚假:“我们和阿里有合作” 这种真假难辨的断言
- 未授权 PII:客户名字 + 公司 + 头衔的组合
- 客户已表达拒绝:根据上下文判断”再发就是骚扰”
LLM 失败(disable / no_key / timeout)默认按 manual_review 处理,永不放行可疑内容。
审计日志
每个动作(拦截 / 放行 / 改写)都写:
{
"ts": "2026-05-09T14:23:11+08:00",
"actor": "agent.sales_v6",
"target": "wechat_contact_id:wxid_xxxxx",
"action": "send_message",
"verdict": "blocked",
"rules_triggered": ["absolute_promise_literal"],
"llm_decision": "manual_review",
"raw_text": "保证 24h 内退款",
"rewritten_text": null
}
日志可:
- 控制台浏览(按客户 / 时间 / 动作类型筛选)
- 导出 CSV / JSON(每周对账给法务 / SOC)
- 流式 webhook(实时推送到 SIEM / 安全平台)
配额管理
按维度可配置触达 / 发送 / 频次上限:
- per-客户:单客户 24h 内最多发 N 条;超过自动进入静默 24h
- per-群:单群每小时发言上限 / 每日上限
- per-账号:单账号每天群发动作上限(保号)
- 企业自定义规则(仅企业版):调用 Python lambda 写复杂业务规则
与其他模块的关系
- 销售 Agent 外发前必过。
- 群运营 候选话术池入池前必过。
- 知识库 审核闸门复用同一套规则引擎。
- 客户卡片 看每个客户的”被拦截 / 已放行”历史。
看一眼
控制台 → 风控审计页可以按”全部 / 已拦截 / 待人工核 / 已放行”过滤; 点击某条进抽屉看完整规则触发明细 + LLM 判定理由 + 原文 / 改写文本对比。