diff --git a/docs/superpowers/specs/2026-10-08-cc-enforcement-wall-design.md b/docs/superpowers/specs/2026-10-08-cc-enforcement-wall-design.md new file mode 100644 index 0000000..e4b47c9 --- /dev/null +++ b/docs/superpowers/specs/2026-10-08-cc-enforcement-wall-design.md @@ -0,0 +1,65 @@ +# 设计增补:CC 追问输出侧强制 + 回显豁免收窄(墙层) + +- 日期:2026-10-08(场景①三轮提示词迭代 0/8 后的需求方决策) +- 前置:2026-10-08-dual-contact-and-country-code-design.md(本增补修改其实现层) + +## 1. 背景与决策 + +场景①(裸号→国家代码追问)经三轮提示词层修复(共改 system.md 5 处 + reminder 3 处 ++ 让位唯一锚点 + 禁数字回显),真实 GLM 验收核心断言累计 **0/8**。行为分析结论: +GLM 对**顺对话惯性**的指令全部服从、对**反惯性**的 CC 重发追问结构性无视—— +这是层级问题不是措辞问题。 + +**决策(需求方已确认)**:沿用本项目"prompt 教行为,墙保底线"的既有 doctrine +(价格墙同款演进路径),把 CC 追问升级为输出侧确定性强制;同步收窄零号码墙的 +客户回显豁免(该豁免与"不回显"红线矛盾,GLM 稳定利用它回显号码 3/3)。 + +## 2. 规则一:CC 强制墙 + +- **触发**:本轮 `_contact_completion_note` 返回 `["_cc_asked"]`(裸号在场且未问过) + ——conversation.py 流程已有该判定(completion_marks) +- **检测**:本轮完整 AI 回复不含 `country code`(大小写不敏感)——含则视为 + GLM 已自发服从,不干预 +- **动作**:不含 → 整段替换为 CC 模板句(英文正文 "Got it — Could you send the + full number with the country code, like +966 5x xxx xxxx? Just so our manager + can reach you directly.",中文同 `_CC_NOTE_ZH` 正文),走既有 violated 替换 + 机制(logger.warning 留痕) +- **计数**:`_cc_asked` 照常写回(一次性语义不变——无论 GLM 是否服从,本轮消耗) +- 客户配合重发完整号后:下轮号码带前缀 → CC 墙/note 均不再触发,确认句自然回归 +- 客户不理睬:下轮 `_cc_asked` 已消耗 → 墙不再触发(一次性) + +## 3. 规则二:回显豁免收窄(零号码墙) + +- **现状**:`no_contact_value` 对 AI 输出中的 ≥10 位数字串/邮箱,若出现在近期 + 客户消息中则豁免("礼貌回显"设计) +- **决策变更**:**移除 AI 输出侧的回显豁免**——红线早已规定"客户自己的号码/ + 邮箱也不回显(确认收到即可)",豁免与红线矛盾且被 GLM 稳定利用;AI 输出中 + 的客户号码只可能来自回显(它不掌握其他号码),拦截无误杀面(规格数字 + DN110/5000m 等不构成 ≥10 位连续数字) +- **实现**:`no_contact_value` 的 `user_history` 豁免参数停用(保留签名兼容或 + 移除参数+清理调用点,以最小改动为准);替换句走 NO_CONTACT_* 既有分支 +- **测试影响**:既有回显豁免测试(含阿语回显一致性)按新语义更新为"AI 输出 + 客户号码一律拦" + +## 4. 不变项 + +- 提示词层全部保留(三层话术/提醒/禁令——墙只是兜底,GLM 自发服从时零干预) +- 串行优先级/一次性计数/推送过滤/墙渠道精确化均不变 +- 价格墙/零号码墙其余行为不变 + +## 5. 测试策略 + +1. CC 墙单测:触发轮回复不含 "country code" → 替换为模板句;含 → 原样; + 非触发轮(带前缀号/_cc_asked 已耗/双渠道齐)→ 不干预 +2. 回显收窄单测:AI 输出含客户裸号/完整号/邮箱(无论客户消息是否有)→ 拦截; + 规格数字形态 → 放行 +3. 集成:CC 触发轮 + FakeAI 输出纯确认句 → 最终流出为 CC 模板句且 `_cc_asked` 落库 +4. 第四轮生产验收:场景①三断言(CC 句必出/零数字回显/一次性)+ 场景②③复验不回归 + +## 6. 风险 + +| 风险 | 等级 | 缓解 | +|---|---|---| +| CC 替换句与客户上下文衔接生硬 | 低 | 模板句自带 "Got it —" 开头;观察期收集反馈 | +| 回显收窄误杀合法场景 | 低 | AI 输出无其他号码来源;规格数字形态已验证安全 | +| 邮箱回显也被拦后确认句变短 | 低 | 符合红线设计(确认收到即可) |