24902c3c438035f0c32d91f1d82921a9343fcdb2
从 ai-kefu-jc/scripts/breach_rate.py 拷入并适配多租户: CLI 改为 --tenant <slug> 必填, 经 platform.db 门禁(租户须已 bootstrap 注册, 同 import_legacy/archive 纪律)后只读打开 tenants/<slug>.db; 新增 --platform-db/--tenants-dir 覆盖参数(默认 repo 根约定路径)。 其余逻辑与 jc 原版一致: PATTERNS 锚定式匹配(美元符/货币单位多语言/ 价格名词前置/交期承诺/号码回显≥10位/邮箱回显), 逐 assistant 轮次 首模式命中即计, 汇总破防率(>10% 启动方案B 输出过滤)。观察漏放侧 偏差——误杀侧不在本脚本口径(人工复核)。 冒烟: 临时库验证 happy path(5 轮 3 中 60%, user 行排除/NULL 内容 守卫/中文标签)与四类门禁拒绝(未注册/库缺文件/platform.db 缺/ schema 未就位), 临时文件已清。全量 pytest 630 passed 2 skipped。 Co-Authored-By: Claude Code <noreply@anthropic.com>
all-kefu
统一多租户 AI 客服平台:一套引擎 + 租户配置包,消除此前"每客户复制一套代码"的分叉模式。项目由 ai-kefu / ai-kefu-jc 两个复制分叉项目合并而来(jc 为主线),Phase 1 引擎合并与租户化改造、Phase 2 平台层(platform.db + admin API)、Phase 3 管理后台 SPA 均已完成。
现状能力(Phase 3 收尾时点):
- 多租户引擎:TenantRuntime 隔离边界,engine 包不感知平台层,可整体拎走独立部署。
- 站点模型:一租户多站点(品牌/主题/站点级覆盖),词表、提示词、品牌全部配置化;配置存 platform.db 版本快照(分组校验 / 回滚 / 热加载),seed_profiles 为出厂档案与测试形态。
- Host 路由:按域名解析租户,未知 Host 404;WS 通道租户化客户端 key 防串库,另有限流与每 IP 连接上限。
- 引擎行为:cc 区号补全判定树、多语言墙(中/西/葡借道/俄/阿)、dual-contact 分步双要、CC 强制墙、lead 邮件推送。
- 平台层:scrypt 认证 + 内存 token + 登录限流;租户管理(创建向导 / 站点 / 域名 / 停用);配置版本管线(整组替换 / 回滚 / 重置出厂 / 试金石);头像上传(魔数校验 + uuid 重命名);数据视图(会话 / 推送日志 / 删除,租户 scope 强制);统计(卡片 / 漏斗 / 趋势 / 分布 / 推送健康,逐库聚合禁 ATTACH);密钥掩码哨兵(
__SET__往返);DB 源生产装配(TENANT_SOURCE=db 默认 + bootstrap_platform.py 引导)。admin API 全在/api/platform前缀(Host 豁免、路由依赖守护),端点清单见 CLAUDE.md。 - 管理后台 SPA(Phase 3,
admin/目录,Vue3 + Element Plus + pnpm):登录 / 强制改密 / 角色化菜单(超管 vs 租户管理员);仪表盘(平台总览 + 租户卡片墙 / 我的指标);租户管理与站点域名;会话与线索(筛选 / 详情消息流 / 推送日志 / 删除);配置中心(品牌 + 本地预览 + 嵌入代码 + 头像上传 / 提示词词表 / 试金石 / 凭据掩码编辑 + SMTP 测试 + 推送探测 / contact·engine·misc 通用 JSON 编辑 / 版本对比回滚重置);统计分析(ECharts 漏斗 / 趋势 / 分布 / 推送健康);平台设置(ai.* / smtp.* 推荐键 KV 表单 + 存储总览,现阶段仅存储不接引擎回退链)。
本地跑法:后端 PYTHONUTF8=1 .venv/Scripts/python -m uvicorn app.main:app --port 8018 --workers 1;管理后台 cd admin && pnpm install && pnpm dev(Vite 代理 /api → 8018)。工作约定与测试基线(后端 pytest 595 / 前端 vitest 156)见 CLAUDE.md。
设计文档(spec):docs/superpowers/specs/2026-10-12-unified-kefu-platform-design.md
Description