SpringAI 客服安全合规实战:敏感词过滤、PII 脱敏与对话审计
SpringAI 客服安全合规:敏感词过滤、PII 脱敏与对话审计实战
基于 SpringBoot 3.3.x 与 SpringAI 1.0.x,文章给出 AI 客服上线金融、政企场景的安全合规方案:用 DFA 算法做敏感词双向过滤,10 万词库匹配 1ms 内完成;在调用混元前用正则脱敏手机号、身份证号、银行卡号与邮箱;审计日志独立存储于腾讯云 CDB,只允许 INSERT、保留 5 年,并保留原始与脱敏两份记录。方案参照等保三级与《个人信息保护法》设计。
正文
摘要: AI 客服上线金融/政企场景必须过安全合规关。本文实现敏感词过滤 Advisor、PII(个人身份信息)脱敏、对话审计日志 CDB 留存、留痕追溯查询,满足等保三级和金融监管要求。脱敏后用户输入中的手机号/身份证号/银行卡号被替换为 ,审计日志保留原始与脱敏两份,兼顾合规与可追溯。
适用版本: SpringBoot 3.3.x / SpringAI 1.0.x / 腾讯云 CDB/CLS / 混元 / JDK 17+ 一、背景:AI 客服上线必须过的安全合规关
前 9 篇把客服能力跑通了,但安全团队提了四个硬要求,不过不让上线:
要求二:PII 脱敏。 用户在对话中可能输入手机号、身份证号、银行卡号,这些信息不能明文传给混元(数据出境风险),也不能明文存日志。
要求三:对话审计留痕。 金融监管要求每笔客服对话可追溯,保留期 ≥ 5 年。审计日志不能篡改,需要独立存储。
要求四:监管报送接口。 监管抽查时,能按时间范围/用户/会话导出完整对话记录。
二、敏感词过滤 Advisor 2.1 敏感词库管理
【为什么需要这段代码】 敏感词库不能硬编码,需要从 CDB 加载并支持热更新。DFA 算法(确定有限自动机)做敏感词匹配,比 String.contains() 快 100 倍,10 万词库匹配 1ms 内完成。
2.2 敏感词过滤 Advisor
【为什么需要这段代码】 这是第 6 篇 Advisor 链的增强版。用户输入和 AI 回复双向过滤:请求阶段拦截用户敏感词,响应阶段过滤 AI 回复敏感词。AI 回复由大模型生成,即使 Prompt 约束了也可能偶尔产出敏感词,必须后置过滤。
三、PII 脱敏:个人身份信息保护 3.1 PII 识别与脱敏
【为什么需要这段代码】 用正则识别手机号/身份证号/银行卡号/邮箱,替换为脱敏格式。脱敏在调混元前执行,确保 PII 不出腾讯云(混元 API 虽然在腾讯云内,但 PII 脱敏是合规要求)。审计日志保留原始与脱敏两份,兼顾合规与可追溯。
3.2 脱敏 Advisor
【为什么需要这段代码】 脱敏 Advisor 在敏感词之后、调混元之前执行。脱敏后的消息传给混元,PII 不出系统。审计日志同时记录原始消息和脱敏消息,原始消息加密存储,仅授权人员可解密查看。
四、对话审计与留痕追溯 4.1 审计日志表设计
【为什么需要这段 SQL】 审计表独立于对话历史表,满足金融监管要求:不可篡改(只允许 INSERT)、保留 5 年、支持按时间/用户/会话查询。originalmessage 加密存储,maskedmessage 明文供普通查询。
4.2 留痕追溯查询
【为什么需要这段代码】 监管抽查时需要按时间范围导出完整对话记录。AuditQueryService 提供按时间/用户/会话查询接口,返回的审计记录中 originalmessage 需授权解密。导出格式支持 JSON 和 CSV,满足监管报送要求。
--- 五、安全合规自检清单
六、系列全 10 篇回顾
本系列从零搭建了基于 SpringAI + 腾讯云的企业智能客服系统,10 篇形成完整知识闭环:
| 篇目 | 核心技术 | 解决的问题 | 关键成果 | |------|---------|-----------|---------| | 01 | ChatClient + SSE | 流式对话 + 历史持久化 | 首响 8s→1.2s | | 02 | BeanOutputConverter | 意图分类 + 槽位提取 | 准确率 68%→94% | | 03 | VectorStore + ES | 向量存储 + 混合检索 | 召回率 91% | | 04 | ETL + COS | 文档自动同步 | 500份3分钟导入 | | 05 | ChatMemory | 多轮对话记忆 | Token降78% | | 06 | Advisor 链 | 横切逻辑编排 | 代码120行→15行 | | 07 | @Tool | Agent 调用工单 | 任务完成率45%→87% | | 08 | 多模型路由 | 成本优化 | 月成本降66% | | 09 | Token治理 | 缓存+告警 | 月成本降79% | | 10 | 安全合规 | 脱敏+审计 | 等保三级达标 | 知识闭环
腾讯云产品覆盖
| 指标 | 改造前(规则引擎) | 改造后(SpringAI+混元) | 提升 | |------|----------------|---------------------|------| | 首响时间 | 8 秒 | 1.2 秒 | ↓85% | | 一次解决率 | 61% | 87% | ↑26pp | | 转人工率 | 45% | 18% | ↓27pp | | 日均处理量 | 3000 轮 | 12000 轮 | 4× | | 月 Token 成本 | — | ¥1518 | 可控 | | 安全合规 | 不适用 | 等保三级达标 | ✅ | 七、踩坑实录 坑 1:DFA 敏感词库热更新时匹配中断
现象: 运营更新敏感词库时,正在进行的对话偶尔漏过敏感词检查。
定位: loadWords() 直接替换 dfaFilter 引用,替换瞬间有短暂窗口未覆盖。
解决: 用 volatile 修饰 dfaFilter 引用,或用 AtomicReference 保证可见性。热更新在低峰期执行。 坑 2:PII 正则误匹配订单号
现象: 订单号 CS20260809001 被银行卡正则 [1-9]\d{14,18} 匹配,脱敏成 9001。
定位: 订单号含连续 14+ 位数字,被银行卡正则误命中。
解决: PII 匹配前先排除已知格式(订单号 CS 开头)。或用更精确的银行卡正则(带 Luhn 校验):
坑 3:审计表 INSERT only 导致 Token 统计更新失败
现象: 审计表写入成功,但后续想更新 tokensconsumed 字段报 UPDATE command denied。
定位: 审计表设了 INSERT only 权限,任何 UPDATE 都被拒。
解决: Token 用量在写入审计表时就从 ChatResponse 获取,一次性 INSERT 完整记录,不做后续 UPDATE。如果必须更新,用追加记录方式(新 INSERT 一条 Token 补充记录)。 八、系列完结语
10 篇文章从 SpringAI 接入混元的第一个 Hello World,到生产级安全合规审计,完整覆盖了企业智能客服的全链路。
技术选型回顾: SpringAI 1.0 作为 Spring 官方 AI 框架,与 SpringBoot 生态无缝集成,通过 OpenAI 兼容接口对接混元,数据不出腾讯云。相比 LangChain4j 更贴近 Spring 哲学,相比腾讯云 Agent 平台(CodeBuddy/WorkBuddy)更灵活可控。
核心经验三条: Advisor 链是架构骨架——所有横切逻辑(安全/限流/RAG/日志)通过 Advisor 链编排,业务代码保持纯净 多模型路由是成本关键——按复杂度选 pro/standard/lite,成本降 66% 安全合规是上线前提——敏感词/PII 脱敏/审计留痕不是可选项,是必选项
随着 SpringAI 生态成熟和混元能力增强,这套架构会持续演进。但核心方法论——抽象、编排、路由、治理、合规——不会过时。 真实性声明: 本文基于腾讯云 CDB/CLS + 混元实测。安全合规方案参照等保三级要求设计,PII 脱敏规则参照《个人信息保护法》实施。审计表权限控制在腾讯云 CDB MySQL 8.0 上验证。 如果本文对你有帮助,欢迎点赞、收藏、转发! 有任何问题或建议,请在评论区留言交流 关注我,获取更多 SpringAI + 腾讯云实战经验!行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!