Files
ai-kefu-jc/docs/superpowers/specs/2026-10-08-cc-enforcement-wall-design.md
T
浅念 99f51e7703 fix: 墙层审查修复——10位号穿透/CC轮回显closing用CC句/breach号码观测/拼接分隔
审查(With fixes)四项:

- Important-1: LONG_NUMBER_RE {9,17}→{8,17}——旧量词最小匹配 11 字符,
  纯 10 位号(沙特裸号 0501234567,CC 模板范例市场本体)穿透。实测钉死
  行为边界: 逗号不在字符类,"50,000,000" 千分位形态仍放行(与
  "45,000 km" 同机制,审查预估会命中系漏算逗号);空格分隔 ≥10 位命中;
  DN110/5000m/VIN 规格形态全放行
- Important-2: CC 触发轮回显被零号码墙拦下时(violation==no_contact),
  closing 改用 CC 模板句而非 NO_CONTACT_ALREADY——GLM 有 3/3 回显倾向,
  客户该收到追问而非"稍后联系"虚假承诺;价格墙路径不变。设计文档 §2
  补记该裁决
- Minor-4: breach_rate.py 补号码回显(≥10位,与墙同形)与邮箱回显两条
  观测模式,补上漏放观测盲区
- Minor-5: violated 收尾与已流出前缀之间补空格分隔("...xxxx? Got it —"),
  空格随 closing 一起流出,客户所见与落库一致;CC/触发轮缓冲未流出,
  emitted 恒空天然不受影响

测试 256 passed(253+3)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-08 13:59:41 +08:00

4.3 KiB
Raw Blame History

设计增补: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 留痕)
  • 回显冲突裁决(2026-10-08 审查修复补记):触发轮若零号码墙先拦下回显句 (violation=="no_contact"),替换句改用 CC 模板句而非 NO_CONTACT_ALREADY—— GLM 有 3/3 回显倾向,该路径概率高,客户该收到追问而非"稍后联系"虚假承诺; 价格墙路径(violation=="boundary")维持原替换话术不变
  • 计数:_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 输出无其他号码来源;规格数字形态已验证安全
邮箱回显也被拦后确认句变短 低 符合红线设计(确认收到即可)