版本: v1.0 适用范围: 拉迷家居企微群聊风险监控系统 维护人: 风控团队
拉迷家居在企微运营约 60+ 个业主群,每日产生数百条聊天消息。现有风险预警系统通过「关键词匹配 + AI 审核」双重机制自动检测群聊中的风险内容(投诉、质量、法律纠纷等)。
本技能文档提供一套完整的事后审计工具,用于:
消息到达 → 关键词匹配(AC自动机) → 命中? → AI深度分析(DeepSeek) → 有风险? → 创建RiskEvent → 通知负责人
↓ 未命中 ↓ 无风险
丢弃 丢弃
关键瓶颈:
| 脚本 | 文件 | 用途 | 建议频率 | 耗时 |
|---|---|---|---|---|
| 覆盖审计 | audit-risk-coverage.ts |
关键词覆盖率 + 漏报检测 + 可视化 HTML | 每周 | ~30s |
| 深度分析 | audit-risk-deep-analysis.ts |
多维度分析 + AI 管理建议 + MD 报告 | 每月 | ~10s |
| 昵称回填 | backfill-member-nicknames.ts |
从 Message 表回填 GroupMember 缺失昵称 | 按需 | ~30s |
# .env 中需要配置
DEEPSEEK_API_KEY=sk-xxxx # AI 分析必需(可选,不配则跳过 AI 评审)
QIWE_GUID=B8591A9D-B540-...
cd backend
npx tsx scripts/audit-risk-coverage.ts
输出: audit-risk-YYYY-MM-DD.html — 在浏览器中打开,包含:
cd backend
npx tsx scripts/audit-risk-deep-analysis.ts
输出: audit-risk-deep-YYYY-MM-DD.md — Markdown 格式,包含:
| 指标 | 数值 | 评估 |
|---|---|---|
| 文本消息总量 | 1,470 | 日均 184 条 |
| 活跃群数 | 149 | - |
| 参与人数 | 142 | - |
| 风险事件 | 4 条 | 仅覆盖 3 个群 |
| 启用关键词 | 181 个 | - |
| 触发过预警的关键词 | 4 个 | 覆盖率 2.2% 🔴 |
| 完全未触发的关键词 | 176 个 | 占比 97.2% |
| 漏报群 | 21 个 | 高危 3 / 中危 17 / 低危 1 |
| 关键词 | 触发群 | 严重度 |
|---|---|---|
| 优惠 | 多个群 | low~medium |
| 投诉 | - | - |
| (其余 2 个) | - | - |
| 类别 | 总词数 | 命中词 | 命中消息 | 有效率 |
|---|---|---|---|---|
| 价格讨论 | 22 | 5 | 25 | 23% |
| 质量工艺 | 17 | 8 | 8 | 47% |
| 安装施工 | 12 | 2 | 3 | 17% |
| 负面情绪 | 17 | 1 | 2 | 6% |
| 竞品对比 | 23 | 1 | 1 | 4% |
| 投诉抱怨 | 51 | 0 | 0 | 0% 🔴 |
| 敏感词 | 25 | 0 | 0 | 0% 🔴 |
| 法律监管 | 8 | 0 | 0 | 0% 🔴 |
类型一:促销营销用词(占比最大 ~80%)
类型二:正常业务沟通(~12%)
类型三:真实质量风险(~8%,需关注)
| 操作 | 涉及关键词 | 原因 |
|---|---|---|
| 🔴 移除/降级 | 定金、订金、优惠、折扣、打折、砍价 | 大量 618 促销误匹配,非真实风险 |
| 🔴 移除/降级 | 色差、垃圾、宜家 | 正常业务语境高频出现 |
| 🟡 保留升级 | 脱胶、开裂、变形、发霉、装错 | 质量类词命中即应预警 |
| 🟡 保留观察 | 投诉、维权、退款、甲醛、超标 | 核心敏感词,虽本期未命中但须保留 |
| 🟢 新增 | 柜子有缝、板子发黑、味道大、掉皮 | 补充口语化投诉表达 |
目标: 将关键词库从 181 精简至 60-80 个高质量词,覆盖率从 2.2% 提升至 10%+
| 盲区类型 | 示例 | 检测方案 |
|---|---|---|
| 口语化投诉 | "柜子有缝""板子黑了一块" | 补充口语化关键词或正则变体 |
| 情绪爆发 | 连发 5+ 条消息、大量感叹号 | 统计消息密度和标点密度 |
| 图片/语音 | 客户发损坏照片 | 标注图片+文字交叉检测(需 OCR) |
| 群内@负责人 | @店长 + 投诉内容 | 检测 @模式 + 负面词组合 |
三级响应机制:
闭环证据: 预警关闭前需提供解决证据(维修照片、客户确认截图),防止"已读不回"
误报标记: 确认为误报的事件必须在关闭原因中注明,作为优化关键词的输入
| 频率 | 动作 | 负责 |
|---|---|---|
| 每日 | 查看风控大屏 pending 事件 | 值班客服 |
| 每周一 | 运行覆盖审计脚本,对比上周 | 风控专员 |
| 每月初 | 运行深度分析,输出月度报告 | 风控负责人 |
| 每月底 | 关键词大扫除(淘汰零命中词) | 风控 + 运营 |
核心 KPI:
数据查询 (fetchAllData)
├── Message (msgType=0,2,13,29)
├── RiskEvent
├── RiskKeyword (enabled=true)
└── GroupChat (roomId→roomName 映射)
↓
覆盖分析 (analyzeCoverage)
├── 按群分组消息
├── 关键词匹配 (matchKeywordsInMessages)
├── 漏报检测 (对比 alertedRoomIds / alertedKeywords)
└── 按严重度排序输出
↓
AI 评审 (aiReviewMissedAlert)
└── 高危/中危漏报 → DeepSeek 二次判定
↓
HTML 报告 (generateHTML)
└── 可视化报告 + 管理建议卡片
数据查询 (fetchData) + 基础统计 (basicStats)
├── 按天/按群/按发送者分布
└── 活跃群 TOP 15
↓
关键词匹配分析 (matchAnalysis)
├── 全量关键词命中次数
├── 各类别有效率排行
└── 命中消息列表
↓
漏报分析 (missedVsAlerted)
├── 逐群对比命中词 vs 已预警词
├── 漏报群分类(高危/中危/低危)
└── 真正未覆盖关键词
↓
AI 管理建议 (aiSummaryReport)
└── 5 维度管理建议(关键词/规则/盲区/流程/审计)
↓
MD 报告生成
import Parse from '../src/db/parse-client.js'; // Parse Server SDK
// AI: DeepSeek API (/v1/chat/completions)
// 模型: deepseek-chat, temperature=0.2~0.4
| 文件 | 说明 |
|---|---|
audit-risk-coverage.ts |
覆盖审计脚本 |
audit-risk-deep-analysis.ts |
深度分析脚本 |
backfill-member-nicknames.ts |
昵称回填脚本 |
audit-risk-2026-06-15-22.html |
本期 HTML 报告 |
audit-risk-2026-06-15-22.md |
本期 MD 报告(简版) |
audit-risk-deep-2026-06-15-22.md |
本期深度 MD 报告 |
../src/services/message-analyzer.service.ts |
线上分析引擎 |
../src/services/compliance-check.service.ts |
合规检查 + AC 自动机 |
../src/services/ai-analysis.service.ts |
DeepSeek AI 分析 |
../src/services/risk-event.service.ts |
风险事件 CRUD |
Q: 脚本跑很慢? A: AI 评审阶段每个漏报群调一次 DeepSeek,限制最多 20 次。取消 AI 可不配 DEEPSEEK_API_KEY。
Q: 漏报数量为什么和实际感觉不一致? A: 当前漏报检测基于"关键词命中但未触发预警"。关键词没命中的消息不在检测范围内(盲区)。
Q: 如何新增关键词? A: RiskKeyword 表手动添加,或通过前端「关键词管理」页面操作。系统每 5 分钟自动刷新 AC 自动机。
Q: 如何查看实时预警?
A: 前端风控大屏 http://localhost:4041/risk-control/dashboard,或预警弹窗(每 30s 轮询)。
技能文档由风控团队维护,每次重大变更后更新版本号。