cms-tbs-scene-create
核心定位
本 Skill 只做一件事:根据用户执行意图,读取对应 references/*.md 与 references/*.json,再执行 scripts/*.py。
参数、边界、分支逻辑都以 references 为准,SKILL.md 只负责入口和流程约束。
执行纪律(最高优先级)
- 流程由 Gate-0 → Gate-5 单向推进,禁止跳步。
- 每个 Gate 只允许"本 Gate 规定的动作",其余一律禁止。
- 每次向用户输出前,必须通过
references/review-checklist.md;未通过不得输出。 tbs-scene-parse.py返回的stage是唯一推进依据;禁止靠猜测判断阶段。- 用户未明确回复"确认",永远不进入 Gate-5(create)。
- Agent 执行
tbs-scene-*.py必须传--output <result.json>;完整 JSON 只读文件,不把 stdout 结果贴给用户。 - 每次会话的 payload / parse / draft / validate / create JSON 必须保存到会话级状态目录:
workspace/.cms-log/state/cms-tbs-scene-create/{sessionId}/。/tmp仅允许一次性调试,不得作为长期draftPath或跨轮状态来源。 - 单一真源:跨轮一律以同一路径下的
latest-draft.json(draftPath指向的文件)为scene与meta的权威来源;knowledge-check/parse/ 内部场景生成之后,必须先写回或重读该文件,再进入下一步。禁止用孤立的parse-result.json片段替代整份 draft 做后续门禁。 - 校验输入与 Gate-3 顺序:
tbs-scene-knowledge-check.py成功后必须基于更新后的latest-draft.json再parse;内部按scenario-json-parse生成title/sceneBackground/actorProfile/doctorOnlyContext/coachOnlyContext后,必须合并进scene并再次parse直至stage进入可校验阶段后,才允许对同一份 draft 执行tbs-scene-validate.py(scope=FULL)。禁止在场景正文尚未写入 draft 时,用“仅含基础字段 + 占位 knowledgeIds”的中间态去跑 FULL 校验。
推荐文件名:
workspace/.cms-log/state/cms-tbs-scene-create/{sessionId}/
├── latest-payload.json
├── latest-parse-result.json
├── latest-draft.json
├── latest-validate-result.json
└── latest-create-result.json
所有 parse / validate / create 轮次必须沿用同一个 {sessionId} 目录;下一轮 payload 必须基于 latest-draft.json 的 scene 增量合并,禁止用 scene: {} 或临时 /tmp/*.json 覆盖已确认状态。
强制前置
真实创建前须经 cms-auth-skills 取 token,并以 --access-token 注入 tbs-scene-create.py。细则见 references/auth.md。
阶段状态机
每个 Gate 列明:本阶段加载 references、允许的动作、绝对禁止、推进条件。
success=true 不等于可推进;推进依据是当前 Gate 规定的条件,不是 success。
Gate-0 · 意图分流
| 读 | references/output-templates.md(模板 0)、references/common-params.md |
| 允许 | 咨询 → 仅说明 + 问"是否执行";执行意图 → 进 Gate-1 |
| 长文本例外(强制视为执行意图) | 首轮用户输入建议 ≥80 字,且在以下 6 类“基础要素”中命中 ≥3 类(不要求精确字段名,语义命中即可):① 产品/品种 ② 科室/医生对象 ③ 场景地点 ④ 医生顾虑/异议点 ⑤ 代表目标/希望达成结果 ⑥ 时间窗口/业务节点/背景 → 必须执行一次 base-info-parse.md 抽取 parsedFields,再执行 tbs-scene-parse.py 并按模板 1/2 回显确认清单;禁止仅用自由发挥追问替代脚本链路 |
| 禁止 | 纯咨询时调用任何脚本;在命中长文本例外时停留在纯追问/自由发挥;生成任何字段 |
Gate-1 · BASE_INFO_CONFIRM
| 读 | references/base-info-parse.md、references/tbs-scene-parse.md(阶段 1)、references/output-templates.md(模板 1/2)、references/common-params.md |
| 允许 | ① 用模板 1 回显已识别字段 + 待补充项 + clarifyQuestions;② 每轮最多 2 问、最多 2 轮;③ 接收补充后重新 parse;④ 基础 6 项齐备但未确认时,仅预告“确认后会建议产品知识主题”;⑤ 首次 parse 前创建会话级状态目录,并把 --output 与 draftPath 指向该目录 |
| 禁止 | 调用 validate / create;自行生成 title / sceneBackground / doctorOnlyContext;扩展确认清单字段;用户未明确确认前设置 baseInfoAcknowledged=true;未确认基础信息前生成或要求确认产品知识主题 |
| 推进条件 | 6 个基础字段齐备 且 用户明确确认 → 下一轮 payload 顶层 + scene 内双写 baseInfoAcknowledged=true,再进入 Gate-2 |
Gate-2 · KNOWLEDGE_CONFIRM
| 读 | references/tbs-scene-parse.md(阶段 2)、references/product-knowledge-topic-generate.md、references/output-templates.md、references/common-params.md |
| 允许 | ① 当主题为空时按 product-knowledge-topic-generate.md 生成 2-4 条建议主题并写入 parse payload;② 同时展示基础信息 6 项 + 产品知识主题;③ 用户确认主题后执行 tbs-scene-knowledge-check.py;④ 品种不存在时先自动创建并保存 drugId,再查产品知识;⑤ 已存在知识直接复用,缺失主题要求补正文;⑥ 用轻确认收口:确认 / 删除 / 改名 / 新增;⑦ 同轮最多 1 次 parse;⑧ 用户说"暂无正文"时仅记录正文为空 |
| 禁止 | 只展示知识主题不展示基础信息 6 项;同轮 parse 超 1 次;未完成知识检查就进入场景内容生成;调用 validate / create;把"暂无正文"当作"无需主题";向用户索要 title / sceneBackground |
| 推进条件 | 用户确认产品知识主题并传 productKnowledgeNeedsConfirmed=true,且知识检查 knowledgeReady=true → parse 返回 READY_FOR_SCENE_GENERATION |
Gate-3 · READY_FOR_SCENE_GENERATION(内部生成,不等用户)
| 读 | references/scenario-json-parse.md、references/scene.schema.json |
| 允许 | ① 内部生成 title / sceneBackground / actorProfile / doctorOnlyContext / coachOnlyContext;② 合并进 scene 后重新 parse |
| 禁止 | 跳过生成直接 validate;把 doctorOnlyContext / coachOnlyContext 展示给用户逐段确认;调用 create |
| 推进条件 | 生成完成 + parse 返回 READY_FOR_VALIDATE |
Gate-4 · READY_FOR_VALIDATE → 落库前确认
| 读 | references/tbs-scene-validate.md、references/output-templates.md(模板 3)、references/common-params.md(展示声明规则) |
| 步骤(有序不可跳) | Step 1 执行 validate(scope=FULL);passed=false → 转写 blockingIssues 为中文,禁止继续 |
Step 2(仅 passed=true 后)执行 references/review-checklist.md §D;未通过不得展示落库前确认 | |
Step 3 用模板 3 完整展示 mustDisplayFields,并记录 validationReport.displayHash 作为本轮确认绑定值;只给"确认 / 取消"收口 | |
| Step 4 等待用户明确回复;"取消" → 终止;"确认" → 进 Gate-5 | |
| 禁止 | passed=false 时继续;未完整展示 mustDisplayFields 就收口 |
Gate-5 · 真实落库(create)
| 读 | references/tbs-scene-create.md、references/auth.md |
| 进入条件(缺一不可) | ① userConfirmation = "确认";② meta.lastParseStage=READY_FOR_VALIDATE;③ validate passed=true 满足 FULL / TBV+meta.lastFullValidationPassed 组合门禁;④ confirmedDisplayHash=validationReport.displayHash;⑤ displayContractSatisfied=true 或 displayedFields 覆盖 mustDisplayFields;⑥ access-token 已注入且非占位符 |
| 步骤 | 执行 tbs-scene-create.py;成功 → 模板 4A;失败 → 模板 4B |
| 禁止 | 任意条件未满足时调用 create |
补充硬门禁:tbs-scene-validate.py 会输出 validationReport.sceneHash 与 validationReport.displayHash;tbs-scene-create.py 必须校验当前 scene 与 sceneHash 一致,且用户确认绑定的 confirmedDisplayHash 与当前展示内容一致,否则要求重新 validate 或重新展示最终确认。
输出自检
每次用户可见输出、调用 validate 前、调用 create 前,必须执行 references/review-checklist.md。
用户可见回复
所有话术模板 → references/output-templates.md。输出规则与字段拦截 → references/common-params.md、references/review-checklist.md。禁止播报读文档/跑脚本等内部过程;不向用户贴 JSON。
常用命令与必读文档
建议先读:references/README.md(总索引与推荐阅读顺序)。
模块路由与能力索引(平铺结构)
本 Skill 对齐
cms-cwork-workflow的平铺结构:references/*.md与scripts/*.py同级索引;不做scripts/<module>/分层。
规则与门禁以对应references/*.md为准,执行入口以对应scripts/*.py为准。
| 用户意图 | 模块 | 能力摘要 | 模块说明 | 脚本 |
|---|---|---|---|---|
| 创建/生成场景(分阶段收集与推进) | scene | 解析输入→回显缺失→推进 Gate | ./references/tbs-scene-parse.md | ./scripts/tbs-scene-parse.py |
| 校验场景草稿(创建前门禁) | scene | FULL/TBV 校验并生成 issues | ./references/tbs-scene-validate.md | ./scripts/tbs-scene-validate.py |
| 检查产品知识主题可用性(确认后门禁) | scene | 查询/复用已有知识;缺失则要求正文 | ./references/tbs-scene-parse.md | ./scripts/tbs-scene-knowledge-check.py |
| 真实创建落库(用户确认后) | scene | resolve 主数据并 createScene | ./references/tbs-scene-create.md | ./scripts/tbs-scene-create.py |
补充:
- 自然语言骨架提取:
references/base-info-parse.md+references/scene.schema.json(完整场景契约;基础信息阶段仅填基础字段,required不用于 S1 阶段校验) - 场景正文生成:
references/scenario-json-parse.md+references/scene.schema.json - 用户可见模板:
references/output-templates.md - 运行时自检:
references/review-checklist.md - 开发态自检:发布前按
references/doc-consistency.md执行scripts/check-doc-consistency.py - 复杂编排示例:
references/agent-patterns.md
测试示例(推荐)
示例 1:先做基础信息分阶段解析
# 第一步:先读 references/base-info-parse.md
# 第二步:按 references/scene.schema.json 提取基础信息骨架并写入 payload.json(仅填基础字段,不要求 required 全满)
# 第三步:执行 parse,判断当前阶段
python3 scripts/tbs-scene-parse.py --params-file payload.json --output result.json
示例 2:校验(全量 / PATCH 后轻量)
# 先读 references/tbs-scene-validate.md
python3 scripts/tbs-scene-validate.py --params-file draft.json --output validate-result.json
python3 scripts/tbs-scene-validate.py --params-file draft.json --scope tbv --output validate-tbv-result.json
示例 3:用户确认创建后真实落库
# 第一步:先读 references/tbs-scene-create.md
# --access-token 传入 cms-auth-skills 返回的真实 token;勿使用尖括号占位字面量
python3 scripts/tbs-scene-create.py \
--params-file draft.json \
--access-token "$ACCESS_TOKEN" \
--output create-result.json
反向示例(不要这样做)
- 未到
READY_FOR_SCENE_GENERATION就读取scenario-json-parse.md或生成场景正文。 - 未经过 validate 通过就进入创建。
- 用户未明确回复"确认"就调用
/scene/createScene。
错误处理与通用参数
通用错误格式、--params-file 用法、输入文件规则请查看 references/common-params.md。
目录结构
cms-tbs-scene-create/
├── SKILL.md
├── version.json
├── scripts/
│ ├── README.md
│ ├── tbs-client.py
│ ├── tbs-md-sanitize.py
│ ├── tbs-scene-parse.py
│ ├── tbs-scene-knowledge-check.py
│ ├── tbs-scene-validate.py
│ ├── tbs-scene-create.py
│ └── check-doc-consistency.py
└── references/
├── README.md
├── auth.md
├── base-info-parse.md
├── tbs-scene-parse.md
├── tbs-scene-validate.md
├── tbs-scene-create.md
├── scenario-json-parse.md
├── common-params.md
├── output-templates.md
├── parse-runtime-config.json
├── review-checklist.md
├── agent-patterns.md
├── maintenance.md
├── scene.schema.json
└── doc-consistency.md