Commit 52ca8c28 by luoqi

feat(ai/script): Phase B — K00/K01/K03/K06/K07/K09 + objection-bank + safety-self-check

补齐 K00-K09 全 10 个 ICD-10 牙科 dx skill 覆盖 + 2 个 playbook。

diagnosis/(6 个):
  K00-development     发育/萌出异常(乳牙滞留/多生牙,allowedPop: child/teen)
  K01-impacted        阻生牙(智齿,allowedPop: teen/adult/elder)
  K03-hard-tissue     牙体硬组织非龋损伤(磨损/楔状缺损/酸蚀/隐裂)
  K06-gum-alveolar    牙龈/牙槽嵴疾患(增生/肿物,谨慎不主动提"癌")
  K07-ortho           正畸(K07,长周期1-3y,儿童8-12黄金窗,严禁报价)
  K09-jaw-cyst        颌骨囊肿(高风险,必须外科会诊,话术高度谨慎,
                       1 周内必须复联拒绝者)

playbooks/(2 个):
  objection-bank       异议总库 8 种通用高频异议 + scenario × pop 优先级矩阵
                       (priority 200,全场景加载,跟 dx 特化异议互补)
  safety-self-check    safety 规则描述版,让 LLM 输出前主动核查 6 条 close 段
                       约束 + 禁词,主动规避 safety gate 命中(命中→走 fallback)
                       (priority 250,机器规则仍在 call.ts safetyRules,
                        本 SKILL.md 是 LLM 看的描述版,两者同步维护)

验证(本地 smoke):
  - nest build 成功,19 个 SKILL.md + base-system.md 全部 copy 到 dist
  - composer 4 案例端到端验证全通过:
    * 成人 K08 → matches 6 个 skill(scenario + K08 + returning + adult
      + objection + safety)
    * 儿童 K02 → matches 6 个 skill(child + new + K02 + ...)
    * 老人 K05+K08 → matches 7 个 skill(多 dx 多 skill 命中)
    * 儿童 K08 → 正确排除 K08(allowedPopulation 跨维度约束生效),
      只 matches 5 个 skill(scenario + child + ...)
parent c5129c72
---
name: diagnosis-K00-development
description: K00 牙发育 / 萌出异常(乳牙滞留 / 多生牙 / 萌出迟缓 / 釉质发育不全)。主要是儿童 / 青少年场景,需要面诊评估观察周期。不能预设治疗方案,基本都是"看一下医生评估"。
priority: 50
applies:
diagnosisCodePrefix: K00
allowedPopulation: [child, teen]
version: 0.1.0
---
# K00 牙发育 / 萌出异常话术包
## 临床素材
- 俗称:**乳牙没掉** / **多长了一颗** / **新牙没出来** / **牙齿表面有问题**(按具体情况选)
- 处置:**面诊评估观察** → 必要时拔乳牙 / 拔多生牙 / 促萌 / 修复
- 多数情况"先观察",**不要预设要做什么治疗**
## opening 段增量
- 引用诊断:"那次 X 医生检查时发现 X 小朋友(姓 X)的牙齿 ..."
- 描述要儿童家长能听懂:"有一颗乳牙该掉没掉" / "多长了一颗牙" / "恒牙该长还没长出来"
## followup 段增量
- 强调"评估为主":"主要是医生看一下,看是需要处理还是再观察一段时间"
- 时间窗:**儿童发育期,几个月内评估一次合适**
- 周末优先(儿童家长上班 + 孩子上学)
## 异议增量
- **"我看孩子没什么不舒服"** → "发育期的牙齿问题,**很多是没什么感觉的,但影响后面恒牙的位置**,早评估早安心"
- **"我们去口腔医院做过 X 光"** → 接受;"那您方便的话,把片子带过来给我们医生看一下,可以省一次拍片"
## 回写要点
- 同意约 → 「成功约新预约」+ 标注 K00 评估
- 家长决定再观察 → 「考虑中」+ 6 个月后跟进
- 否认("没这回事") → 「诊断争议」
## 协同
- 必须跟 population-child / population-teen 协同(儿童家长沟通模式由 pop skill 主导)
---
name: diagnosis-K01-impacted
description: K01 阻生牙(智齿 / 阻生埋伏牙)未拔除场景。主要是智齿 — 大部分需要拔,但不是急症。提供智齿话术骨架、拔牙后顾虑应对、对应异议(怕疼/伤神经/没影响要不要拔)。
priority: 50
applies:
diagnosisCodePrefix: K01
allowedPopulation: [teen, adult, elder] # 儿童 K01 少见,有也按特殊评估走
version: 0.1.0
---
# K01 阻生牙(智齿等)话术包
## 临床素材
- 俗称:**智齿** / **后边那颗多生的** / **埋着没出来的牙**(智齿场景默认"智齿")
- 处置:**拔除**(大部分)/ **观察**(极少数无症状无危害的)
- 流程:**局麻下拔牙**,简单拔牙 15-30 分钟,复杂拔牙(完全埋伏) 1 小时左右,术后**1-2 周肿胀消退**
-**下颌智齿靠近下牙槽神经**,术前需要拍片评估,**部分医生会建议 CBCT**
- 拔多颗:**通常一次拔同侧 1-2 颗**,不一次拔满口
- 风险预后:阻生智齿不拔可能导致冠周炎反复发作 / 邻牙龋坏 / 牙列拥挤
## opening 段增量
- 引用诊断:"那次 X 医生检查时,看到您 X 颗智齿是阻生的,建议拔除"
- 如 reason 提到反复发炎:"您当时跟医生反馈过那颗智齿发炎,后来还有发作吗?"(共情)
## followup 段增量
### 流程说明(必带)
> "智齿拔除是**局麻下做**,过程 15-30 分钟,完全埋伏的可能 1 小时左右。"
> "拔完**1-2 周内可能有肿胀**,正常吃软食 + 冰敷,大部分人 3-5 天就明显好转。"
### 拔多颗安排
> "如果您有几颗智齿都需要拔,**一般一次拔同侧 1-2 颗**,不会一次让您拔完;您可以分 2-3 次完成。"
### 时间相对宽松(不是急症)
- 没有冠周炎反复发作时,时间宽:"本月内方便的时候过来都行"
- 有发炎反复时:**尽快约**(炎症期不能拔,要消炎后再做),提醒"先约个评估,医生看看炎症情况"
## 异议增量(K01 特化)
- **"我没感觉,有必要拔吗"** → "阻生智齿不发作时确实没感觉,但**清洁难、容易蛀邻牙**;长期看建议拔,**早拔恢复快**,年纪大了拔风险大一些"
- **"听说拔下面的智齿会伤神经"** → "下颌智齿确实靠近神经,所以**拔之前医生会拍片评估**,如果风险高会推荐做 CBCT;医生会跟您讲清楚风险后再做"
- **"我准备生小孩 / 备孕"** → 严肃;"备孕和孕期建议**先处理好智齿**,孕期智齿发炎不能用药,会很被动;您方便的话最近约一下评估"
- **"我害怕拔牙"** → 共情;"很多人怕,**现在都是局麻下做,过程基本无感**;您可以先来面诊,医生跟您讲清楚再决定"
- **"拔完会不会瘦脸 / 脸型变了"** → "拔智齿对脸型影响很小,**长期可能轻微改善咬合**;不要为了瘦脸去拔,医生评估说要拔再拔"
- **"我去其他医院看过说不用拔"** → 尊重;"那您方便的话来我们这边再看一下,**不同医生评估可能不同**,您参考一下"
## 回写要点增量
- 同意约拔智齿 → 「成功约新预约」+ 标注预计拔 N 颗 + 是否需要 CBCT
- 同意但要排期 → 「考虑中,1-2 周跟进」
- 拒绝 / 决定不拔 → 「明确拒绝(K01)」+ 标注"建议下次有反复时再回访"
- 备孕 / 孕期场景 → 「成功约新预约」+ 标记紧急度提高
## 老人(elder)交叉
- 老人 K01 拔牙风险高,**不主动建议拔**,改"评估是否一定要处理"
- 由 population-elder skill 主导节奏
---
name: diagnosis-K03-hard-tissue
description: K03 牙体硬组织疾病(非龋损伤 — 磨损 / 楔状缺损 / 酸蚀 / 牙隐裂)。需要修复,但常被患者忽视(不疼)。提供"为什么要修复"科普骨架、异议(不疼不修)、跟 K02 龋齿区分。
priority: 50
applies:
diagnosisCodePrefix: K03
version: 0.1.0
---
# K03 牙体硬组织损伤(非龋)话术包
## 临床素材
- 俗称(按具体类型):
- 磨损 / 牙齿磨平了 / 咬合面磨损
- 楔状缺损 / 牙颈部凹陷 / 牙齿根部缺口
- 酸蚀 / 牙齿表面发黄发软
- 牙隐裂 / 牙齿裂纹 / 咬硬东西就疼
- 处置:**树脂充填修复 / 嵌体 / 牙冠**(看损伤深度)
-**K03 不是龋齿**,患者经常以为"不蛀就没事",**需要科普 "非龋损伤也要修"**
- 病因消除:磨损要查夜磨牙 / 楔状缺损要查刷牙习惯,**单纯修复不解决根因会反复**
## opening 段增量
- 引用诊断:"那次 X 医生检查发现您 X 颗牙的牙齿表面有 [磨损 / 缺损 / 酸蚀] 的情况"
- ⚠️ 不要笼统说"龋齿",这是 K02;K03 需要明说"不是蛀牙,是另一种损伤"
## followup 段增量
### 区分龋齿(必带,K03 特化)
> "这种**不是蛀牙(K02),是另一种损伤**,可能是 [咬合磨损 / 刷牙过重导致的牙颈缺损 / 饮食酸蚀] 等;治疗也是修复,但**原因不一样,要处理根因不会反复**。"
### 不痛≠没事(K03 特化)
> "这种损伤**早期通常不痛**,但如果不修,**会持续加深**,最后可能伤到牙神经,那就要做根管;早修便宜得多也简单得多。"
### 时间宽松
"本周末或下周方便的时候约一下,半小时左右"
## 异议增量(K03 特化)
- **"不疼啊,有必要修吗"** → "K03 损伤的特点就是**早期不痛**,**深到神经才痛**,那时候要做根管;早修一次就好,拖大了步骤会多"
- **"我又不是蛀牙"** → "对,这个**不是蛀牙**,是磨损 / 缺损 / 酸蚀 / 裂纹类的非龋损伤;不蛀不代表不用修,**该补还是要补**"
- **"我以前牙齿就这样"** → "可能是**长期慢性形成的**,您之前没在意没发现;**现在发现了趁早处理**,等加深处理就麻烦"
- **"是不是夜里磨牙的问题"** → "**有可能,磨损 / 隐裂常跟夜磨牙有关**;您来面诊医生会评估,严重的可能需要**配夜磨牙垫**保护"
## 回写要点增量
- 同意约修复 → 「成功约新预约」+ 标注 K03(非龋损伤,需区分 K02)
- 同意 + 怀疑夜磨牙 → 标注"可能需要 OS 垫"
- 拒绝 → 「明确拒绝」+ 标注"科普「非龋损伤也要修」,3 个月后再回访"
---
name: diagnosis-K06-gum-alveolar
description: K06 牙龈 / 牙槽嵴疾患(牙龈增生 / 牙龈瘤 / 牙槽嵴病变)。多需要外科或综合处置,常跟 K05 牙周炎叠加。可能需要病理活检,谨慎科普避免恐慌。
priority: 50
applies:
diagnosisCodePrefix: K06
version: 0.1.0
---
# K06 牙龈 / 牙槽嵴疾患话术包
## 临床素材
- 俗称(按具体类型):
- 牙龈增生 / 牙龈长了一块 / 牙龈鼓出来
- 牙龈瘤 / 牙龈上的肿块(⚠️ 不说"瘤"字面让患者紧张,改"牙龈上的肿物")
- 牙槽骨问题 / 牙床问题
- 处置:**面诊评估** → 必要时**手术切除 + 病理检查**
-**K06 常需要病理活检** — 切下来送病理,绝大多数是良性,**话术里不要主动提"癌"**,但也不能拍胸脯说"绝对没事"
## opening 段增量
- 引用诊断:"那次 X 医生检查时发现您牙龈上有 [一块增生 / 一个肿物 / 不太正常的地方]"
- ⚠️ 措辞中性,**不渲染严重,也不假装没事**
## followup 段增量
### 强调"评估为主"
> "这种情况**建议来面诊一下**,医生看一下具体的大小、性质,**绝大多数是良性的**,但要面诊才能确定;有些可能需要做一个小处理 + 送检查"
### 不要主动提"病理 / 活检 / 肿瘤 / 癌"等词
- 患者会脑补;让医生面诊时再讲
- 仅当患者主动问"会不会是 X"时如实回答"绝大多数是良性的,具体面诊医生看"
### 时间偏紧
- K06 不是急症,但**优于普通龋齿排队**;"近期方便的时候约一下,本周或下周都行"
## 异议增量(K06 特化)
- **"我看着没什么大事"** → "您看着确实可能是良性的,**很多 K06 都是良性的**,但**需要医生面诊评估**,确认一下性质;面诊半小时左右"
- **"会不会是肿瘤"** → 不回避也不夸大;"绝大多数是良性增生,但**确实要面诊确认**,如果需要可以**取一小块化验**;您不用过度担心,但建议来评估"
- **"我朋友说就是上火"** → "**牙龈增生有些跟炎症 / 上火有关**,有些跟其他因素有关;**真正确定要医生面诊**,不能凭外观判断"
- **"我前段时间洗过牙就好了一些"** → "**洗牙能改善牙龈炎症**,但 K06 这种增生 / 肿物**单靠洗牙不够**,还是要面诊评估"
## 回写要点增量
- 同意约面诊 → 「成功约新预约」+ 标注 K06 评估
- 决定再观察 → 「考虑中,2-4 周跟进」(K06 比 K02 优先,缩短跟进周期)
- 拒绝 → 「明确拒绝」+ 标注"建议向患者再次科普 K06 评估必要性"
- 提到"反复增大 / 出血 / 疼痛" → 标注"紧急面诊建议"
## 跟 K05 协同
- K06 + K05 同时命中是高发组合(牙龈炎/牙周炎 + 增生),按 K05 主导,K06 作为"另外还有一块需要单独看的"
---
name: diagnosis-K07-ortho
description: K07 颌面发育异常(错颌畸形 / 正畸适应症)。长周期项目(1-3 年),儿童青少年是黄金窗,成人也能做但更慢。不报价,不承诺时长,引导面诊评估。
priority: 50
applies:
diagnosisCodePrefix: K07
version: 0.1.0
---
# K07 颌面发育 / 错颌畸形(正畸)话术包
## 临床素材
- 俗称:**牙齿不齐** / **地包天** / **龅牙** / **牙缝大** / **咬合不好** / **戴牙套**(矫正俗称)
- 处置:**正畸 / 矫正 / 戴牙套 / 隐形矫正**
- 流程:**1-3 年周期**,**每月复诊 1 次**;包含:面诊评估 → 拍片取模 → 方案设计 → 戴矫治器 → 月复诊 → 保持期
-**黄金窗 8-12 岁**(儿童乳牙换牙期 / 牙列发育期);**14-17 岁次之**;成人也能做但骨头硬移动慢
- 价格区间极大(几千到十万),**严禁报价**
- 方案差异:**金属托槽 / 陶瓷托槽 / 隐形矫正(隐适美 / 时代天使等)**,适应症医生评估
- ⚠️ "戴牙套不好看 / 影响吃饭 / 周期长" — 患者最大三个顾虑
## opening 段增量
- 引用诊断:"那次 X 医生检查时,提到您 [牙齿排列不齐 / 咬合的问题],建议考虑正畸"
- 儿童家长场景(由 population-child 主导):"X 小朋友的牙齿现在 X 阶段,医生提到现在是矫正比较合适的时机"
## followup 段增量
### 强调"先评估"(必带,正畸不能盲做)
> "正畸是个**长期项目**,**先来面诊评估**,医生看一下您的具体情况、需要做什么方案、大概多长时间;评估这一步不收治疗费(⚠️ 政策无字段不主动说免费)"
### 黄金窗强调(儿童 / 青少年场景)
> "8-12 岁是儿童矫正的**黄金时期**,牙齿移动快、效果好;[X 小朋友] 现在的年纪正好;如果再晚一些处理会更复杂一些。"
### 成人场景(adult)
- 不要让成人觉得"我太晚了":
> "成年人也完全可以做,**只是周期可能比儿童长一些**;现在很多成年人在矫正"
### 不报价、不承诺时长
- ❌ "矫正大概 1 万 / 2 万"
- ❌ "您这种情况大概 18 个月"
- ✅ "**具体方案 + 价格 + 周期**,医生面诊评估后给您一个完整的方案讲解"
## 异议增量(K07 特化)
- **"我都成年了还能矫吗"** → "完全可以,**成人正畸越来越常见**;只是周期可能稍长,效果一样好"
- **"戴牙套丑 / 影响我工作"** → "现在有**隐形矫正**(透明牙套)的方案,从外观几乎看不出来;具体哪种适合您,医生会评估"
- **"听说很贵 / 大几万"** → 不报价;"正畸的费用跨度比较大,**金属、陶瓷、隐形差别不小**,**面诊医生根据您的具体情况给方案和价格**"
- **"周期太长了,要 2 年"** → "正畸是慢工细活,**确实需要 1-3 年**,具体时间面诊评估;一旦做完,牙齿排齐**一辈子受益**;您可以来听一下医生讲方案再决定"
- **"我朋友说要拔牙才能矫"** → "**部分情况确实要拔牙腾空间**,但**也有不拔牙的方案**;医生面诊评估您的牙弓骨条件后给具体建议"
- **"我们家小朋友说不想戴"** → 共情;"很多小朋友刚开始抗拒,**戴 1-2 个月就习惯了**;您方便的话先带 X 小朋友来认识医生 + 看一下牙套样子,**不一定要立刻开始**"
## 回写要点增量
- 同意约面诊评估 → 「成功约新预约」+ 标注 K07 正畸评估
- 同意但要看时间 → 「考虑中,2 周跟进」
- 决定不做 → 「明确拒绝」+ 标注原因(费用/周期/外观)
- 已在外院做 → 「已在外院」+ 关闭
## 老人(elder)交叉
- 老人正畸罕见,本 skill 中标(K07 任意年龄都加载)+ population-elder skill 主导节奏
- 老人正畸通常是修复前预先排齐,**主要是修复方案设计**,不是单纯美观;话术由 population-elder 改写为"先看一下整体修复方案"
## 协同
- 儿童 K07 + population-child:由 population-child 主导改写称谓 / CTA,本 skill 提供专业素材
---
name: diagnosis-K09-jaw-cyst
description: K09 颌骨囊肿 / 颌骨其他疾病。少见但高风险场景,需要外科会诊 / 手术 / 病理活检。话术高度谨慎,不在电话里详细科普,核心目的"约最近时间面诊外科"。
priority: 60
applies:
diagnosisCodePrefix: K09
allowedPopulation: [teen, adult, elder] # 儿童 K09 极罕见,有也走儿科专项
version: 0.1.0
---
# K09 颌骨囊肿 / 颌骨疾病话术包
## ⭐ 核心定位
**K09 是 K00-K09 中风险最高的场景**:可能需要手术、可能需要病理。话术必须**高度谨慎**:
-**不在电话里详细科普方案**(医生面诊讲)
-**不主动提"癌 / 肿瘤 / 切除手术"**(吓患者)
-**不淡化**("没什么大事" — 不负责任)
-**核心目的:把患者请来面诊,医生当面讲**
- ✅ 强调"**外科 / 颌面外科** 医生面诊"(让患者知道严肃)
- ✅ 时间紧迫感比 K01-K08 高,**优先安排**
## 临床素材
- 俗称:**颌骨问题** / **下巴(上颌)有囊状的东西** / **拍片发现的影像问题**
- 处置:**外科 / 颌面外科面诊****手术摘除 + 病理检查**(大部分)
- 紧迫度:**亚急性**,不是急救,但**不能拖几个月**
## opening 段增量
- 引用诊断:"那次 X 医生检查时发现您 [颌骨上有囊状的影像 / 下巴有不太正常的地方],建议您**尽快回来由外科医生面诊**"
- ⭐ "外科医生面诊"措辞要说出来 — 让患者知道这不是普通牙问题
## followup 段增量
### 措辞模板(必带,严格)
> "这种情况建议**近期回来由我们外科医生面诊评估**,看一下具体的范围、性质,**绝大多数是良性的**,但**确实需要面诊确定**,可能需要做一些处理。"
> "时间上**尽量这 1-2 周内**约一下,**不影响您日常,但也不要拖太久**。"
### 时间安排
- 工作日上午医生集中接外科会诊:"周一到周五上午可以专门安排外科,您看哪天方便?"
- 给具体方向 + (示例):"您看 X 上午这个方向行不行,我先帮您按 [周二上午(示例)] 登记,具体时段诊所确认后短信告诉您"
### 不在电话里讲具体方案
- ❌ "可能要做手术摘除"
- ❌ "可能要送病理"
- ✅ "**具体方案医生面诊讲**,这边电话里不能给您细看"
## 异议增量(K09 特化)
- **"是不是很严重 / 是不是肿瘤"** → 不夸大也不淡化;"绝大多数颌骨囊肿是**良性的**,但**确实需要面诊确认**;您**不必过度担心**,也**建议尽快来面诊**"
- **"我看着 / 我感觉没什么"** → "K09 大部分**早期没有感觉**,**主要靠影像发现**;但因为发现了,**就该面诊评估**,这是负责任的处理方式"
- **"我去综合医院看吧"** → 尊重 + 给选择;"完全可以,综合医院的口腔颌面外科也合适;您**方便来我们这边**也可以,我们这边有 X 医生(⚠️ 仅 reason.triggerDoctor 有时填,否则改为"我们外科医生")"
- **"我想跟家里人商量一下"** → 配合(老人场景常见);"完全可以,**建议尽快**商量 + 来面诊;您和家人商量好了告诉我们,这边帮您留外科时间"
- **"上次拍的片子能不能再看一下"** → "可以,**带上片子来面诊**,医生会综合看;**面诊比单看片子更准**"
## 回写要点增量
- 同意约面诊 → 「成功约新预约」+ **标注高优先级 K09 + 外科**
- 决定再观察 → 「考虑中,**1 周后必须再联系**」(K09 跟进窗很短)
- 决定去其他医院 → 「已在外院 / 转外院」+ **标注 K09 转出,关注后续**
- 完全拒绝面诊 → 「明确拒绝」+ 升级标记"K09 拒绝面诊,主管核查后人工跟进"
## 客服执行特别注意
- ⚠️ **K09 不能像 K02 那样随便结案**,任何"考虑中"都要 1 周内复联
- ⚠️ **不要在通话末尾说"祝您一切顺利"** — 显轻飘,改"那您先和家人商量,我们等您消息"
## 老人(elder)交叉
- K09 + 老人,population-elder skill 主导节奏,本 skill 提供素材;**家人参与决策必须主动提**
---
name: playbook-objection-bank
description: 异议应对总库,scenario × population 跨场景共用的高频异议(再考虑 / 价格 / 没时间 / 已在外院 / 不打扰)+ 客服回复范式。LLM 在 objection 段必须按 ### A./B./C. 子标题分块,挑 3-4 个最适合本次召回的异议覆盖。本 skill 全场景加载(priority 200,装配在最后)。
priority: 200
applies: {} # 全场景加载,跨 scenario × diagnosis × population
version: 0.1.0
---
# 异议应对总库(playbook)
## ⭐ 客服外呼最常见的 8 种异议(按出现频率排序)
### 1. "我再考虑考虑"(出现率 ~40%)
**底层动机**:还没下决心 / 怕被推销 / 想给自己留缓冲
**应对范式**:
- ✅ "完全理解,这种决定确实要想清楚。这样,我先帮您把医生时间留到 [周 X 上午或周 Y 晚上](示例),您想好告诉我们,如果不来我帮您取消就行,没关系。"
- ✅ "好的,您慢慢想;**X 月底之前**告诉我们都行(给一个软窗口)"
- ❌ "您再考虑就晚了" / "今天定下来还能 X" / "下次价格可能变"(全是销售套路)
### 2. "最近真的没时间 / 工作太忙"(出现率 ~25%)
**底层动机**:时间确实紧 / 也可能是软拒绝
**应对范式**:
- ✅ "理解,**周末或者工作日晚上**(到 8 点前)我们都开,您看哪个时段方便?"
- ✅ "如果近期实在不行,**下个月也可以**;您方便了告诉我们,我们提前帮您留个时间"
- ❌ "您再忙也得有健康" / "X 病不能等"(说教)
### 3. "听说挺贵的 / 多少钱"(出现率 ~20%)
**底层动机**:价格敏感 / 想砍价
**应对范式**:
- ✅ "[X 治疗类]的费用,**医生面诊后会给您一个明细**,根据牙位 / 方案 / 材料不同会有差异;您来评估之后,自己看着选合适的方案"
- ✅ "我这边电话里给不到准确的报价,这个由医生定,**面诊评估不收费**(⚠️ 仅当政策允许时,无字段不主动说免费)"
- ❌ "我们家性价比高" / "我们打折活动" / "X 千就够"(base §1 严禁报价/活动)
### 4. "已经在别的医院 / 已经在做了"(出现率 ~15%)
**底层动机**:已选择其他诊所
**应对范式**:
- ✅ "好的 [X 先生],那您方便的话我帮您把我们这边的召回记录关一下,**祝您治疗顺利**" + 回写「已在外院」
- ✅ "如果您后续想参考一下其他医生的方案,**也欢迎来我们这边对比**;不来也没关系"
- ❌ 不追问"哪家医院 / 多少钱" — 不合规也不礼貌
- ❌ 不拉踩其他医院
### 5. "不要打了 / 别再联系我"(出现率 ~5%,但必须严肃对待)
**底层动机**:不希望被联系
**应对范式**:
- ✅ "**好的 [X 先生],我立刻帮您加入不打扰名单**,后续不会再联系您;**祝您一切顺利**"
- ✅ 立即结束通话,**回写「不打扰」标记**
- ❌ 不解释 / 不挽留 / 不再次推销(任何挽留都让人更烦)
- ❌ 不说"我们是为您好"
### 6. "我不记得在你们诊所看过 / 怎么有我电话"(出现率 ~5%,新客高发)
**底层动机**:对诊所无印象 / 警惕陌生电话
**应对范式**:
- ✅ "我看到我们这边登记您 [X 月 X 日](具体引 reason 触发日期)到过 [X 诊所名] 做过 [X 检查/治疗];可能是 [家人帮约 / 公司体检 / 团购] ?"(给具体场景帮患者回忆)
- ✅ 如确认从未到过:"那可能是登记错了,我帮您从我们系统里删掉" + 回写「不打扰」
- ❌ 不强辩 "您一定来过"
- ❌ 不催"您仔细想想"
### 7. "我没那么严重 / 不疼,有必要吗"(出现率 ~20%,多见于 K02/K05/K07)
**底层动机**:无症状 → 觉得不必要
**应对范式**:
- ✅ "[K02/K05/K07 类] 的特点确实是**早期不疼**,但**会持续发展**;**早处理代价小**,等出现明显症状代价会大一些"
- ✅ 给具体临床事实佐证:"医生 X 月 X 日看到 X 牙的 X 问题"(从 reason 拿)
- ❌ 不恐吓"再不来就晚了" / "您再拖就没救了"
- ❌ 不用一般化恐吓("X 病很严重") — 要具体到这个患者
### 8. "我跟家人商量一下"(出现率 ~10%,老人 / 儿童家长高发)
**底层动机**:重大决策需要家庭参与
**应对范式**:
- ✅ "完全理解,**重要决定**要跟家人商量;您和家人商量好了告诉我们,我们这边帮您留好时间"
- ✅ 老人场景主动提:"**家人方便的话可以一起来听一下医生方案**"
- ❌ 不催"今天能不能定" — 会让患者立刻挂电话
---
## 用法指引
LLM 在生成 objection 段时:
1. **挑 3-4 个**最适合本次召回(scenario / population / dx)的异议
2. **按 ### A./B./C. 子标题分块**(base §5 已强制)
3. **每个异议下面 1 段 blockquote `> "..."`** 给客服话术
4. 可选 `> → 提交结果选「xxx」` 一行,指明客服回写动作
5. 跟 scenario / population skill 内已 cover 的具体异议**避免重复**;那些是细分,这里是通用兜底
### 优先级建议(按 scenario × population)
- **启治召回 + 成人**:1.再考虑 / 2.没时间 / 3.价格 / 7.不严重
- **启治召回 + 老人**:1.再考虑 / 8.跟家人商量 / 7.不严重 / 4.已在外院
- **启治召回 + 儿童家长**:1.再考虑 / 7.不严重 / 8.跟家人商量(儿童特化版异议见 population-child skill)
- **启治召回 + 新客**:6.不记得诊所 / 4.已在外院 / 1.再考虑
- **K08/K07 + 任意**:3.价格(高频)+ 1.再考虑 + 2.没时间
- **K05/K06/K09 + 任意**:7.不严重 + 8.跟家人商量 + 1.再考虑
### 跟 K-code / population skill 的协同
- diagnosis SKILL.md 内的"异议增量"是**该 dx 特化** 的具体异议(如 K08 "做了能用几年" / K04 "听说很疼")
- 本 playbook 是**跨场景通用兜底** + 优先级指引
- 异议选 3-4 个时,**优先用 dx 特化**,通用兜底补缺
---
name: playbook-safety-self-check
description: Safety 规则的"描述版" — 让 LLM 在生成前就自检 6 条 close 段约束 + 禁词 + 承诺式表述,主动规避后置 safety gate 命中(命中要走 fallback 损失质量)。本 skill 全场景加载(priority 250,装配在最末)。机器规则继续 TS(call.ts safetyRules),不挪 yaml。
priority: 250
applies: {}
version: 0.1.0
---
# Safety 自检清单(LLM 输出前主动核查)
⚠️ 以下规则是**后置硬约束**,LLM 输出后会用代码扫描;**命中 block 类规则 → 整段输出作废 → 走 fallback 模板**(质量下降)。
**所以每次输出前,**自己**先按这个清单核查一遍**,避免命中。
## 1. 全段:禁词扫描(block — 命中即作废)
任一段(opening/followup/objection/close)含以下任一词,**整次输出失败**:
- `一定能``保证``绝对``百分百``100%`(医疗承诺)
- `亲爱的`(销售化称呼)
- `便宜``促销``折扣``免费送`(销售化)
→ 检查方法:全文 Ctrl+F 扫一遍,有则改泛指或删除。
## 2. close 段:不能加粗具体时间(block — 命中即作废)
`**周六上午10点**` / `**本周五下午**` / `**明天上午9点**`
- 检测正则:`/\*\*[^*\n]*(?:周[一二三四五六日天]|\d+\s*(?:点|:|:))[^*\n]*\*\*/`
- 命中即整次输出失败
正确写法(任选):
-`周六上午10点(示例)` ← 不加粗 + (示例) 后缀
-`周六上午这个方向` ← 方向词替换具体时间
→ 检查方法:close 段所有 `**...**` 加粗块,看有没有"周X / 数字 + 点"。
## 3. close 段:不能用承诺式表述(block — 命中即作废)
PAC 没有排班 API,所以**没有任何时间是"已经定下来的"**;不能用以下措辞:
-`已为您约好` / `已成功预约` / `已为您预约` / `已经为您约` / `已替您预约`
-`约定本` / `敲定本` / `安排好了` / `已经预约`
正确写法:
-`我先按 X 帮您登记,具体时段以诊所排班为准`
-`我先帮您留 X 时间方向,稍后跟前台确认后短信通知您实际时间`
## 4. close 段:必须含"待确认"语义短语(warn — 不阻断但提示)
close 段缺以下任一短语会触发 warn 日志,不影响输出但应该带:
- `以诊所排班为准` / `排班为准`
- `稍后跟前台确认` / `跟前台确认` / `稍后跟诊所确认`
- `稍后短信确认` / `排班确认后告知` / `排班确认后短信`
- `稍后短信通知您实际` / `具体时段以` / `具体时间以`
→ 检查方法:close 段是不是有一句"待确认/排班相关"的弱化措辞。
## 5. objection 段:必须 ### A./B./C. 子标题分块(warn — 不阻断)
❌ 把 3 个异议合并成一长段
❌ 用 `- xxx` bullet 列异议
✅ 正确:
```
### A. "我再考虑考虑"
> "客服话术..."
### B. "最近没时间"
> "客服话术..."
```
## 6. close 段:必须含具体时间数字(warn — 不阻断)
close 段如果完全没数字(没"X 点"也没"X 月 X 日"也没"X 周")会触发 warn。
→ 给一个示例时间即可(如"周六上午10点(示例)")。
---
## 自检顺序建议
输出每段前依次问自己:
1. **opening / followup**:有没有引用至少 3 条 user prompt 给的事实?有没有「身份不符」的具体名词?
2. **objection**:是不是 3-4 个 `### A./B./C.` 子标题?每个有 blockquote `>`?
3. **close**:
- 加粗块有没有具体时间词?(有就去掉加粗 + (示例) 后缀)
- 有没有"我已为您约好"等承诺词?(有就改"我先按 X 登记")
- 有没有"以诊所排班为准 / 稍后跟前台确认"等弱化短语?(没有就加 1 句)
- 有没有 `**回写要点**` + 2-4 条 bullet?
4. **全段**:Ctrl+F 扫禁词清单(§1)
---
## 跟代码 safety rule 的关系
本 SKILL.md 是**给 LLM 看**的描述版自检清单,**机器规则**实际在
`apps/pac-service/src/modules/ai/calls/draft-plan-script/call.ts`
`safetyRules` 数组里(强类型 `SafetyRule<TOutput>`,runtime 性能 + zod 校验)。
**两者必须同步**:改了 call.ts 的 safetyRules,也要更新本文件;否则 LLM 自检会过但后置 gate 命中。
新加规则 PR review 时双向检查。
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment