feat(ai/script): Skills harness — SKILL.md registry + composer + 11 P0 packs
Phase A: 把 draft_plan_script 的 system prompt 从单一长字符串重构为
Anthropic Skills 标准格式 — base-system.md(通用铁律) + N 个 SKILL.md
(场景特化),composer 按 input 动态装配。
新增基建:
skill.types.ts zod frontmatter schema + match context types
skill-registry.service.ts 启动期 scan + parse + 强校验(fail-fast,跟 yaml
assemblers 风格一致),__dirname/skills 路径
skill-composer.ts 纯函数 — applies match + allowedPopulation 跨维
度排除 + priority 排序 + composeHash
skills/base-system.md 从原 DRAFT_PLAN_SCRIPT_SYSTEM 抽出 50 行通用部分
(§0 总则白名单 / §3 禁词 / §4 销售文风 / §6 时间
排班 等全场景铁律)
11 个 P0 SKILL.md:
scenario/treatment-initiation 新链(启治召回)
diagnosis/K02-caries 龋齿 / 补牙
diagnosis/K04-endo 根管(allowedPop: teen/adult/elder)
diagnosis/K05-perio 牙周
diagnosis/K08-edentulism 缺牙 / 种植(allowedPop: teen/adult/elder,
严禁报价铁律已内置)
population/child 儿童(<14,找家长 / 临床禁忌交叉)
population/teen 青少年(14-17,半自主)
population/adult 成年(18-64,baseline,故意保持薄)
population/elder 老年(>=65,慢节奏 / 家属同决策 / warm
默认 / 不能 urgent)
relationship/new-customer 新客(无上次治疗可引,降门槛加倍)
relationship/returning 回头/熟客(可引主诊医生 / 治疗链)
call.ts:
- 注入 SkillRegistry,buildPrompt 走 composer
- env AI_SCRIPT_USE_SKILLS=0 退回 legacy 全量 prompt(回滚保险)
- promptVersion 区分 'skills-base-v1' / 'time-marker' (legacy),
SQL 对比版本效果时拆分群体
- fallback close 段去加粗时间 + 加 (示例) + "以诊所排班为准" —
避免 fallback 自己触发 close_no_bold_time block
input.types.ts:
reason 加 subKey + dxCode + scenarioKey(skill composer 显式映射,
composer 不做文本推断)
orchestrator.buildCallInput:
传 raw subKey + 派生 dxCode(K00-K09 全表 map);primaryScenarioKey 直传
prompt.ts:
- 原 DRAFT_PLAN_SCRIPT_SYSTEM rename → _LEGACY(env=0 回滚路径)
- buildDraftPlanScriptPrompt 加 matchedSkills 参数,末尾追加"本次激活的
skills" 清单(LLM 跨 skill 自检 + 落账归因)
- 删 inline hint "(老客可家常)/(新客需详细)" — relationship skill 接管
nest-cli.json: 加 assets 配置把 modules/ai/calls/skills/**/*.md 拷到 dist
ai.module.ts: 注册 DraftPlanScriptSkillRegistry provider
Phase B(下一 commit):补 K00/K01/K03/K06/K07/K09 6 个 dx skill +
objection-playbook + safety description skill。
Showing
Please
register
or
sign in
to comment