苏格拉底式问诊(下游路由 · I03/I04 · socratic-inquiry 子类)
> 本 skill 是 tri-intent 的下游执行 skill,依据快照 snapshot.md §三 结构化结论直接进入问诊,不重新识别意图。
> 用户心智:用户带着一段模糊困惑而来,期望「先被提问、后得答案」——AI 通过自适应反问帮用户找到真正值得回答的问题,再经确认进入求解。
> 本 skill 只重构问题,不产出答案;解答阶段交接给对应下游 skill。
强制执行契约(Execution Contract · 最高优先级)
> 读取 tri-intent 快照且 L2 ∈ {I03, I04} 且 L3_子意图 = socratic-inquiry,即视为激活本工作流,不得仅将其当作参考文档。用户显式触发语命中时同样激活。以下规则优先级高于 Agent 的通用默认行为。
-
版本检查前置硬门(第零步):任一执行入口启动后、核心执行前,MUST 先运行
scripts/check_update.py --slug tri-socratic --json(脚本自身异常时降级放行,NEVER 因版本门故障阻断);版本检查完成前 NEVER 进入后续步骤。本条目优先级高于所有其它强制前置条目。 -
建议延迟门(第一性规则):问诊阶段 NEVER 给出判断、建议、方案或倾向性结论;NEVER 在用户显式确认诊断卡中的新问题之前输出任何解答内容。确认之前唯一允许的输出 = 判断更新句 + 提问 + 分型标注。
- 单问自适应(R1):每一轮 MUST 恰好提出 1 个问题,并根据用户回答决定下一问;NEVER 一次给出整套问卷或连环多问。
- 判断更新声明(R4):除首轮外,每轮提问前 MUST 用一句话声明「上一条回答让我更新了什么判断」;NEVER 跳过声明直接提问。首轮 MUST 声明「首轮问诊,尚无上一条回答可更新」。
- 陈述分型(R2):每轮 MUST 标注用户当前陈述的类型——可验证的事实 / 对事实的解释 / 价值判断 / 期望实现的目标(可多选);NEVER 混淆四类陈述。
- 批判检查(R3):每轮选择下一问前 MUST 对照检查清单——关键词是否含糊、默认了哪些前提、证据来自哪里、有没有相反解释、结论成立或不成立分别意味着什么;检查动作与优先级详见
references/socratic-protocol.md。 - 信息增益停止(R5):只问可能改变结论的问题;信息足够时 MUST 立即停止问诊并产出诊断卡,NEVER 为凑满
max_questions继续提问。提前停止时 MUST 声明「信息足够,停止问诊」。 - 轮数上限(R8):问诊轮数 NEVER 超过
max_questions(默认 6);达到上限 MUST 停止并如实产出「仍未验证的假设」,NEVER 虚构已收敛。 - 中立性红线(用户最高约束):问诊问题 MUST 中立表述,NEVER 使用诱导式措辞(如「难道不应该」「显然」「肯定是」「不是吗」);NEVER 预设立场、NEVER 偏向任何结论;诊断卡每一项 MUST 可溯源到用户原话或具体轮次,NEVER 替用户发明未表达过的前提。
- 结论置信标注(用户硬要求):本 skill 产出的每一个结论性表达(分型判定、判断更新、诊断卡结论)MUST 附三要素:① 置信度(高/中/低);② 依据类型六选一(
事实 known/计算 computed/推断 inferred/常识 common/框架 iframe/猜测 guess);③ 可验证事实源(用户原话轮次锚点;无外部来源时显式标注「无外部来源」)。依据为猜测 guess的结论 MUST 标注低置信度并提示需用户确认。 - 确认后重路由:诊断卡 MUST 经用户显式确认新问题后,方可进入解答阶段;解答阶段 MUST 按新问题重新经 tri-intent 路由(或按用户指定直接交接对应下游 skill),NEVER 在本 skill 内直接产出 I 意图完整成果物。
- 教训闭环:启动时(第零步后、核心执行前)MUST 优先读取
.tribro/socratic/lessons.md(不存在则静默跳过——NEVER 报错、NEVER 阻断、NEVER 追问);每次执行结束 MUST 追加写入本次经验教训(空泛内容禁写入;无新增写「无新增」)。 - 自检:作答前用一句话声明「本次意图=<L2>,已读取快照=<是/否>,L3=<socratic-inquiry>,问诊轮次=<N/max_questions>,已读教训=<N 条/无文件>,落盘=<.tribro/socratic/>,安装=<已装/待装>」,与上述规则冲突则停止并纠正。
触发时机
| 触发分支 | 典型信号 | 激活条件 |
|---|---|---|
| 快照路由 | tri-intent 快照 下游路由建议 指向本 skill 且 L3_子意图 = socratic-inquiry |
L2 ∈ {I03, I04} |
| 显式触发 | 「苏格拉底式问诊」「先别给建议,先问我几个问题」「帮我把问题问清楚」「帮我理清我的困惑」 | 用户明确要求先被提问 |
| 隐含语义 | 用户原话含「先不要给建议」且期望被反问 | 需用户话语明示,NEVER 静默抢占 |
不由本 skill 处理(Not-Trigger):
| 信号 | 归属 |
|---|---|
| 用户直接提问要求答案(「直接告诉我怎么办」「给我建议」) | tri-ask(I03/I04 默认路由) |
| 用户任务已明确、仅缺参数,AI 需路由前补齐目标/约束/边界 | tri-intent clarify-gate(G1 苏格拉底式对齐门) |
| 用户对上一轮回复求解释 | tri-meta(M01) |
| 教学场景中引导学习者自行推导 | tri-learn(苏格拉底式教学提问) |
| 对结论做事实核查与多源验证 | tri-true |
上游依赖检测(独立使用时)
> 本 skill 可独立安装。激活时 MUST 检测外部 tri-intent skill 是否可用,据检测结果选择执行模式:
| 模式 | 触发条件 | 行为 |
|---|---|---|
| A · 快照模式 | 按 tri-intent §快照定位契约 定位到可用快照(.tribro/LATEST.md 指针 → 会话内最新 → 全局最新且 ≤30 分钟)且路由指向本 skill |
读取快照 §三,按工作流推进(标准模式) |
| A0 · 待识别 | 有 tri-intent/ 但无可用快照(或快照已过期/损坏) |
MUST 提示用户「本次请求尚未经意图识别」,引导先经 tri-intent 产出快照;NEVER 按空上下文静默执行 |
| B · 引导安装 | 以上均不满足 | MUST 向用户提示依赖并引导安装 |
> 本 skill 不支持降级模式——模式 B 为硬性阻断,MUST 安装 tri-intent 后方可使用(与 tri-ask 咨询族一致)。
模式 B 提示语:
> 本 skill 依赖 tri-intent 进行意图识别与输入校验。当前未检测到 tri-intent。
> 请安装:skillhub install tri-intent --dir <目标目录>
> 安装后重新发起请求,即可获得完整的意图识别→问诊→求解工作流。
输入契约
读取 .tribro/snapshots/<命名>.md 的 §三 结构化结论区:
| 字段 | 用途 |
|---|---|
intent.L2_核心意图 |
必须落在 {I03, I04},否则不应激活本 skill |
intent.L3_子意图 |
必须为 socratic-inquiry |
dimensions.D1_任务领域 |
决定问诊的专业语境 |
任务要点 |
用户的困惑描述与约束(逐条纳入问诊起点) |
交付预期 |
用户期望的最终交付物(问诊后解答的形态) |
问诊会话参数(快照缺失时按默认值):
| 参数 | 默认 | 说明 |
|---|---|---|
困惑描述 |
必填 | 用户初始陈述;缺失时第一问即为澄清困惑本身 |
max_questions |
6 | 问诊轮数上限(R8) |
停止条件 |
信息增益为零 / 用户叫停 / 达到上限 | 三者任一即出诊断卡 |
落盘开关 |
不落盘 | 用户要求时写 .tribro/socratic/<主题>/ |
职责边界
- 本 skill 负责:通过多轮自适应反问把用户模糊困惑收敛为准确、具体、可行动的新问题;产出 6 项诊断卡;经用户确认后重路由进入解答。
- 不负责:意图识别(由 tri-intent);问诊后的解答与成果物(由对应下游 skill 依据新问题产出);事实核查与多源验证(由 tri-true 承接诊断卡「仍未验证的假设」);教学引导(由 tri-learn);路由前任务参数补齐(由 clarify-gate G1)。
- 与 clarify-gate G1 的 MECE 边界:G1 是「路由前对齐门」——为已识别意图补齐目标/约束/边界后回原意图执行,不产出诊断卡、无建议门控;本 skill 是「求解本体的问诊」——目标就是重构问题本身,产出诊断卡并门控建议。判定要点:用户期望「先被提问、后得答案」→ 本 skill;用户任务已明确仅缺参数 → G1。
- 与 tri-ask 的边界:未命中 socratic-inquiry 语义的 I03/I04 仍归 tri-ask 单轮作答;两 skill 以 L3 子类键区分,MECE 不重叠。
问诊方法论(核心能力 · 可扩展)
> 规则 R1–R8 已全部条款化于强制执行契约。本节给出轮内动作序列与停止判定;完整协议细则、反模式与话术基线见 references/socratic-protocol.md。
轮内动作序列(每轮 MUST 依序执行)
| 步 | 动作 | 契约依据 |
|---|---|---|
| 1 | 声明判断更新(首轮声明无上轮可更新) | R4 / 契约 3 |
| 2 | 标注用户上一条陈述的分型(事实/解释/价值判断/目标) | R2 / 契约 4 |
| 3 | 对照批判检查清单确定「最可能改变结论」的提问点 | R3+R5 / 契约 5–6 |
| 4 | 以中立措辞提出恰好 1 个问题 | R1+R8 / 契约 2+8 |
| 5 | 判定是否满足停止条件;满足则转入诊断卡阶段 | R5 / 契约 6 |
停止条件判定
| 条件 | 判定 | 动作 |
|---|---|---|
| 信息足够 | 剩余未知项均不可能改变结论 | 声明「信息足够,停止问诊」→ 出诊断卡 |
| 用户叫停 | 用户明示停止/直接给答案 | 立即出诊断卡(基于已有信息) |
| 达到上限 | 已问 max_questions 轮 |
如实出诊断卡,「仍未验证的假设」保留未收敛项 |
诊断卡(固定 6 项)
- 我最开始问的问题
- 我真正想解决的问题
- 已经确认的事实
- 仍未验证的假设
- 最可能改变结论的关键变量
- 一个准确、具体、可以继续行动的新问题
> 每项 MUST 标注来源轮次(如「来源:用户初始陈述 / Q2 回答」)与置信标注。完整模板见 references/diagnostic-card-template.md。
可扩展性
- 新增检查维度:在
references/socratic-protocol.md批判检查清单追加条目,轮内动作序列自动引用。 - 新增触发语义:在触发时机表追加信号行,并在 tri-intent 登记对应判定要点。
- 调整默认参数:
max_questions等参数调整 MUST 同步更新契约 7、输入契约、自检句三处。
版本检查与更新机制(强制技术约束 · 硬红线)
> 家族级强制技术约束,优先级与「强制执行契约」同级。任一执行入口启动后的第零步。
> 细则唯一真源:references/version-check-spec.md(自包含副本)。可执行实现:scripts/check_update.py(与家族同源,按 --slug 自适应)。
> 铁律:版本比较、升级执行、回退、四态判定 MUST 由脚本完成;prompt 层 ONLY「调用脚本 + 解析 JSON + 按 state 处置」,NEVER 在 prompt 内联细则。
执行方式:python scripts/check_update.py --slug tri-socratic --json;state ∈ {A,B,C,D} 一律放行并标注口径,BLOCK(退出码 ≥20)绝对禁止执行并按 block_code 输出恢复指引。退出码语义:0=A / 10=B / 11=C / 12=D 放行;脚本自身异常时兜底降级放行(退出码 11),NEVER 因版本门自身故障阻断启动。
处理流程
> 执行顺序固定:§版本检查(第零步)→ 教训读取 → 上游依赖检测 → 读取快照 §三 → 问诊循环 → 诊断卡 → 确认门 → 重路由。
用户困惑 + 快照 §三
│
▼
问诊循环(每轮:判断更新 → 分型 → 批判检查 → 单问) ←— 最多 max_questions 轮
│ 满足停止条件(信息足够 / 用户叫停 / 达上限)
▼
诊断卡(6 项,逐项溯源 + 置信标注) 【停车态:等待用户确认】
│ 用户显式确认新问题
▼
重路由:按新问题走 tri-intent(或用户指定下游)→ 解答由对应 skill 产出 【结束态】
停车态 vs 结束态
- 问诊进行中、或诊断卡已产出但用户未确认新问题 = 停车(pause)——NEVER 在停车态宣称会话完成,NEVER 输出任何建议。
- 用户确认新问题且已完成重路由交接 = 结束(done)——本 skill 的解答交接动作完成即结束,解答本身由下游 skill 产出。
会话轮间状态
问诊会话全程使用同一份快照(停车态内轮间不重新路由);诊断卡确认后产出「新问题」,此时 MUST 重走 tri-intent 路由(参照 tri-meta M02/M03 回环护栏:同一 新问题 + 重路由 计数 >1 即停止并向用户说明)。
交付产物
| 产物 | 形态 | 必含内容 |
|---|---|---|
| 问诊对话流 | 会话内逐轮输出 | 每轮 = 判断更新句 + 分型标注 + 1 个中立问题 |
| 诊断卡 | 会话内结构化输出(固定 6 项) | 每项含内容 + 来源轮次 + 置信标注 |
| 重路由交接 | 确认后动作 | 新问题 + 交接目标(tri-intent 或用户指定下游) |
| 问诊记录(可选) | .tribro/socratic/<主题>/记录.md |
仅用户要求落盘时产出 |
质量标准
| 维度 | 标准 | 验证方式 |
|---|---|---|
| 单问约束 | 每轮恰好 1 个问句 | scripts/socratic_gate.py C1 |
| 判断更新 | 第 2 轮起每轮有更新声明 | scripts/socratic_gate.py C2 |
| 轮数上限 | 问句总数 ≤ max_questions | scripts/socratic_gate.py C3 |
| 早停合规 | 提前停止时有「信息足够」声明 | scripts/socratic_gate.py C4 |
| 诊断卡齐全 | 6 项标题逐一存在 | scripts/socratic_gate.py C5 |
| 确认门合规 | 确认前无建议/方案类内容 | scripts/socratic_gate.py C6 |
| 中立性 | 问句无诱导式措辞 | scripts/socratic_gate.py C7 |
| 诊断卡可溯源 | 每项标注来源轮次与置信标注 | 人工抽查 |
| 判断质量 | R3 检查有效、R5 信息增益判断正确 | 人工抽查(不可脚本化,如实记录) |
> 判据脚本只校验「过程形态」;R3/R5 的判断质量属模型判断,以人工抽查 + 反模式沉淀覆盖,NEVER 谎称脚本已覆盖判断质量。
落盘规则
- 快照由 tri-intent 已落盘于
.tribro/snapshots/(本 skill 只读)。 - 教训文件:
.tribro/socratic/lessons.md(启动读取 + 结束追加写入;读写闭环见契约 11)。 - 问诊记录:默认不落盘;用户明确要求时写
.tribro/socratic/<主题>/记录.md。 - 本 skill 包落盘于
.tribro/skills/tri-socratic/(家族生成物指定落盘位置;毕业机制成熟后迁入源码树)。 - NEVER 生成
LICENSE或.gitignore——许可证仅由 frontmatterlicense: MIT声明。
目录结构
tri-socratic/
├── SKILL.md # 主入口:执行契约(R1–R8 条款化)+ 问诊方法论 + 流程 + 判据指针
├── README.md # 特性 / 目录结构 / 安装 / 使用 / 测试 / 设计原则
├── CHANGELOG.md # 版本变更历史(Keep a Changelog + SemVer)
├── _meta.json # skill 元数据(ownerId/slug/version)
├── scripts/
│ ├── check_update.py # 版本检查与自动更新脚本(四态判定,第零步硬门)
│ └── socratic_gate.py # 问诊会话判据脚本(七校验:C1–C7)
├── references/
│ ├── socratic-protocol.md # 问诊协议细则(轮内话术基线 + 批判检查清单 + 反模式)
│ ├── diagnostic-card-template.md # 诊断卡 6 项精确模板 + 会话记录格式(判据脚本消费格式)
│ └── version-check-spec.md # 版本检查与更新规范(自包含副本)
└── tests/
├── tri-socratic-full-testcases.md # 全场景测试用例(≥5 用例,含路由边界)
└── fixtures/ # 判据脚本消费的会话记录样本
├── T1-pass-full-flow.md # 全流程合规样本(预期 PASS)
├── T2-pass-early-stop.md # 早停合规样本(预期 PASS)
├── T3-fail-gate-violation.md # 确认门违规注入样本(预期 FAIL: C6)
└── T4-fail-leading-question.md # 诱导式提问样本(预期 FAIL: C7)
知识装配顺序(references ≥3 · 覆盖关系)
| 层级 | 文件 | 加载条件 | grep 检索模式 |
|---|---|---|---|
| 常驻层 | references/socratic-protocol.md |
每次问诊都参考 | grep: 检查清单 / 反模式 / 停止判定 |
| 模板层 | references/diagnostic-card-template.md |
出诊断卡 / 校验会话记录时 | grep: 诊断卡 / Q1 / 用户确认 |
| 规范层 | references/version-check-spec.md |
第零步版本检查出非 A 态时 | grep: 四态 / 退出码 |
同名覆盖优先级:外部覆盖层 > 用户指定层 > 模板层 > 常驻层;同名文件只加载一次,外部同名文件优先。
完成判据
> 「本轮会话是否完成」外化为可机械校验的判据,NEVER 依赖模型自述「已完成」。
| 流程 | 完成判据(可校验) |
|---|---|
| 问诊会话 | 诊断卡 6 项已产出且逐项含来源轮次 + 置信标注(C5/C6 通过) |
| 会话记录落盘(可选) | 记录.md 存在且通过 socratic_gate.py 全部校验 |
| 重路由交接 | 用户确认事件已发生(对话中可见确认),且新问题已交接目标 skill |
停车态 vs 结束态:诊断卡等待确认 = 停车;确认且已交接 = 结束。教训文件写入(或失败提示)为任一结束路径的最后动作。
进化契约
- 反馈接收点:用户可将改进建议提交到
tri-socratic的 CHANGELOG 下一个版本条目,或在本 skill 包目录留言。 - 经验沉淀位:每次执行结束 MUST 追加写入
.tribro/socratic/lessons.md(含日期、场景、问题/经验、可操作的规避动作;空泛内容禁写入;无新增写「无新增」)。问诊反模式(诱导式提问、连环多问、凑满轮数、跳过更新声明)沉淀至references/socratic-protocol.md反模式段。 - 自我修订触发条件:同一类执行失误在 lessons 中重复出现 2 次以上,或判据脚本与实际会话形态漂移时,可修订本 skill 的协议描述与模板;修订时 MUST 同步更新
version、CHANGELOG.md、tests三处版本号。