docs: spec审查修正——推送_前缀过滤/两提醒串行优先级/电话归泛词/模板句过墙断言/correction预算说明
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
# CLAUDE.md
|
||||
|
||||
“/;
|
||||
HESUPIPE 管道建材 AI 客服(hesupipe.com,河南和硕集团)。
|
||||
FastAPI + SQLite + 智谱 GLM,嵌入外贸官网,做"AI 需求了解 + 留资获客 + 邮件/UniService
|
||||
CRM 推送",AI 不回答价格/交期/MOQ 等实质问题,一律引导留资转客户经理。
|
||||
@@ -27,7 +27,7 @@ CRM 推送",AI 不回答价格/交期/MOQ 等实质问题,一律引导留资
|
||||
|---|---|---|
|
||||
| 行业与提示词 | 4 个提示词全部建材化:`system.md`(管道外贸人设+MOQ/交期/样品/认证红线)、`company_facts.md`(HESUPIPE 事实卡)、`extractor.md`(意向品类/规格要求/标准要求/采购数量等字段)、`evaluator.md`(管道采购意向分级) | 汽车(Hesu Auto)语义 |
|
||||
| boundary_filter 多语言墙 | 墙按建材市场扩充:`€`/`£`+数字、西葡俄阿价格词(precio/costo/custo/preço/цена/стоимость/سعر/أسعار/ثمن,含复数与阿语定冠词 ال 连写形态)+天数词(días/дней/أيام 等);迂回话术池 EN/ZH/**ES**;规格防误杀(DN/PN/SDR/PE100/SCH/ISO4427/20ft 不拦) | 只中英 + `$` + 零号码墙 |
|
||||
| 线索键前缀 | `PUSH_EXTERNAL_KEY_PREFIX=ai-kefu-jc`(与汽车项目线索空间隔离,**勿改回 ai-kefu**) | `ai-kefu` |
|
||||
+| 线索键前缀 | `PUSH_EXTERNAL_KEY_PREFIX=ai-kefu-jc`(与汽车*--*项目线索空间隔离,**勿改回 ai-kefu**) | `ai-kefu` |
|
||||
| 端口 | 8017 | 8016 |
|
||||
| Docker 容器名 | `hs-ai-kefu` | (上游原名不同) |
|
||||
| 品牌 | HESUPIPE,品牌蓝 `#066fc0`(theme.js 与 widget.js 中的主题派生单元整块同步,`tests/test_theme_static.py` 强制一致) | HESU,橙色 |
|
||||
@@ -66,7 +66,7 @@ uvicorn app.main:app --host 0.0.0.0 --port 8017
|
||||
PYTHONUTF8=1 python scripts/mock_uniservice.py # 监听 9099,X-Api-Key: test-key-123
|
||||
|
||||
# 生产部署(服务器上)
|
||||
bash deploy.sh # docker compose 构建并启动,健康检查 127.0.0.1:8017/health
|
||||
bash deploy.sh # docker compose 构建并启动,健康检查 7654/health
|
||||
```
|
||||
|
||||
- 聊天演示页 `/`,管理后台 `/admin`,健康检查 `/health`。
|
||||
|
||||
@@ -67,9 +67,25 @@
|
||||
|
||||
### 4.3 一次性计数(防死缠/spam,防漏洞 1/3)
|
||||
|
||||
- raw_info 内部状态键(`_` 前缀,不进推送画像):`_email_asked`、`_cc_asked`
|
||||
- raw_info 内部状态键:`_email_asked`、`_cc_asked`
|
||||
- 注入提醒的同时落计数;条件判断先查计数——**每个提醒每会话最多注入一次**
|
||||
- 计数由 reminder 注入路径写入(与现有 `_` 前缀内部状态管理同构)
|
||||
- ⚠️ **推送过滤(spec 审查发现的必需项)**:`lead_push_service._build_payload`
|
||||
的 `profile_out = dict(raw_info)` 是整体拷贝且**不过滤 `_` 前缀**(渲染侧
|
||||
两处有过滤,推送端没有)——必须同步加
|
||||
`{k: v for k, v in raw_info.items() if not str(k).startswith("_")}` 级过滤,
|
||||
并补推送 payload 断言,否则 `_email_asked` 等内部状态泄进生产 CRM
|
||||
- ⚠️ **计数写回的实现约束**:`_build_context_reminder` 是 staticmethod 且收到
|
||||
的是内存副本——调用方须在流式开始前显式写回 `profile.raw_info` 并提交
|
||||
(轮末 extractor 合并起点是 `dict(profile.raw_info or {})`,提前写入可存活)
|
||||
|
||||
### 4.3b 提醒优先级(两提醒同轮并发时的串行规则,spec 审查补充)
|
||||
|
||||
主场景恰恰是并发:客户常"留裸号且无邮箱"。**一次只注入一个,顺序固定**:
|
||||
|
||||
1. **国家代码确认优先**(先把手上的号码补全闭环)
|
||||
2. 邮箱轻补仅在以下任一条件满足后才允许注入:号码已带国家代码前缀、
|
||||
`_cc_asked` 已消耗(问过一次,无论客户是否配合)
|
||||
3. 即两个提醒由计数与优先级共同串行化——AI 任何一轮只追问一件事
|
||||
|
||||
### 4.4 再索要墙精确化(boundary_filter.py asks_contact)
|
||||
|
||||
@@ -77,8 +93,10 @@
|
||||
(None = 原行为全丢,兼容无参调用)
|
||||
- 渠道分辨:精确渠道词(whatsapp / e-mail / 邮箱 / 微信…)命中 → 仅当
|
||||
该渠道**已在 confirmed_channels** 才丢;不在手则放行
|
||||
- **泛渠道词(number / phone / contact / 联系方式 / 号码)保守处理**:
|
||||
- **泛渠道词(number / phone / contact / 电话 / 联系方式 / 号码)保守处理**:
|
||||
客户已有任何号码渠道在手 → 照丢(宁丢勿放,防重复索要惹恼客户)
|
||||
- **精确词与泛词同句共存**(如 "leave your number or email"):任一命中
|
||||
判丢即丢(保守方向)
|
||||
- 中文/英文模式同规则
|
||||
- conversation.py 调用点传入 confirmed 渠道集合(该状态已在前移区算好)
|
||||
|
||||
@@ -86,6 +104,8 @@
|
||||
|
||||
- 邮箱后到会触发一封"更正/补充邮件"(客户经理先后收 WhatsApp 版、补邮箱版)
|
||||
—— 信息更全,属预期
|
||||
- 客户重发完整号走现有"改号覆盖"机制 → 会消耗一次 correction 邮件/推送
|
||||
(与邮箱后到共享每会话 3 封上限,正常预算内)
|
||||
- 客户拒绝补国家代码:号码按现状照常 confirmed,线索照发(软引导不设卡)
|
||||
|
||||
## 5. 不动清单
|
||||
@@ -106,7 +126,12 @@
|
||||
国家代码追问句;`_cc_asked` 后 → 不含
|
||||
3. **prompt 静态断言**:system.md 含 "with the country code" / 邮箱轻补模板句 /
|
||||
好差示例新增组
|
||||
4. 全量 pytest 绿(现有再索要墙断言按新语义同步更新)
|
||||
4. **新模板句过墙回归断言**(spec 审查补充):两个新模板句(国家代码追问句、
|
||||
邮箱轻补句)在对应渠道已确认场景下会被 asks_contact 判丢、在缺失渠道场景
|
||||
放行——防止后续改模板措辞时无意撞墙或穿透
|
||||
5. **推送 payload 断言**:`_email_asked`/`_cc_asked` 不得出现在 _build_payload
|
||||
产物中(`_` 前缀过滤生效)
|
||||
6. 全量 pytest 绿(现有再索要墙断言按新语义同步更新)
|
||||
5. **真实 LLM 验收**(生产冒烟后补):①客户给裸号 `0501234567` → AI 礼貌请其
|
||||
重发完整号(仅一次);②客户留 WhatsApp → AI 轻补邮箱一次;③只留邮箱的
|
||||
客户 → 不被纠缠要 WhatsApp(分步双要以 WhatsApp 起手,邮箱-only 客户
|
||||
|
||||
Reference in New Issue
Block a user