关于 fable5
fable5 是一项通过程序化检查,让推理更有依据、校准更恰当的技能,适用于调试、代码审查、重要决策及严格限制格式的写作。它强调区分证据状态并在交付前复核。
主要功能
- 01执行三部分目标检查
- 02按任务利害调整推理深度
- 03采用五步结构化推理
- 04标注主张的证据状态
- 05通过复核关卡检查答案
- 06机械核验受限格式输出
适用场景
- 01调查软件问题根因
- 02审查代码与架构决策
- 03评估有争议或高风险主张
- 04生成严格遵循格式的文本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rheinmir/ setup --skill fable5安装后在 Claude Code 中输入/fable5确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/content-taste.mddesign-taste.mdworked-examples.md详细介绍
技能:fable5
这不是要模仿的人设,而是一组机械化流程,旨在让推理更有依据、校准更准确,也更不容易被误导,包括被模型自身流畅的输出误导。它无法增加能力,只会消除那些可预见的失败模式,避免浪费模型已有的能力。
内容
目的与背景
- **目的:**让推理更有依据、校准更准确,也更不容易被误导。这是一组机械化流程(Floor、Proportionality Gate、Five Moves、Constraint Loop、Claim Discipline、Self-Review Gate),而不是要模仿的人设。它无法增加能力,只会消除可预见的失败模式。
- 触发条件(何时使用):
- 用户说“fable5”“bật thinking mode”“reason like fable 5”“nghĩ kỹ vào”,或调用
/fable5。 - 调试、根因分析、代码审查、架构/策略决策、有争议或高风险的主张、受约束的写作(禁用特定字母、字数限制、藏头诗、严格格式)——任何准确性比速度更重要的任务。
- 用户说“fable5”“bật thinking mode”“reason like fable 5”“nghĩ kỹ vào”,或调用
- **非目标:**不是人设或语气;不会增加模型能力;不会擅自解决未被要求处理的相关问题(只用一句话指出,不展开);不会取代领域技能——
references/design-taste.md/references/content-taste.md会将此协议应用于设计和文案。
心智模型
/fable5 → 模式开启(持续应用于每次回复)→ 每次回答:Floor(目标 · 跟进 · 遗留事项)→ Proportionality Gate(Direct | Standard | Full;遇到严格输出限制时 → Constraint Loop)→ Five Moves(Frame · Ground · Reason · Attack · Deliver),全程遵循 Claim Discipline → Self-Review Gate → 输出……直到“stop fable5” / “normal mode” → 模式关闭。
输入与输出约定
| 字段 | 是否必需? | 含义 | |
|---|---|---|---|
| 输入 | 激活 | 是 | “fable5” / “bật thinking mode” / “reason like fable 5” / “nghĩ kỹ vào” / /fable5 — 在本次会话剩余时间内开启该模式 |
| 输入 | 深度切换 | 否(默认为 Standard) | “fable5 direct” / “fable5 full” |
| 输入 | 停用 | 否 | “stop fable5” / “normal mode” — 唯一的关闭方式 |
| 输入 | 每条用户请求 | 是 | 协议所处理的事项 |
| 输出 | 每次回答 | 是 | 结果优先,主张需标注类型(OBSERVED/DERIVED/PRIOR/ASSUMED),并说明最薄弱环节和未解决的问题 |
| 输出 | 受约束的文本 | 存在严格输出限制时 | 只有在机械验证完成后才原样交付(Constraint Loop 第 3 步) |
持久模式约定:开启后,每次回复都必须启用;多轮对话后不得退回快速模式匹配;即使不确定也必须保持启用;只有使用上述停用短语才能关闭。
规则和能力
- RULE-01 (MUST):一旦启用,每次回复都必须处于 ACTIVE 状态。仅在输入 "stop fable5" / "normal mode" 时关闭。
- RULE-02 (MUST):这些步骤刻意设计成机械流程——当直觉与此处的规则冲突时,以规则为准。
- RULE-03 (MUST):绝不跳过 Floor,即使只需回答一行。绝不让 Direct 模式忽略触发的 Floor 检查或可机械核验的输出约束。
- RULE-04 (MUST):只有工具可以提升声明的可信度——绝不能通过更有把握地重述来提升;只有在 Constraint Loop 第 3 步针对最终交付的确切文本运行后,“输出符合约束”才是 OBSERVED。
- RULE-05 (MUST):Self-Review Gate 的 YES 必须通过实际行动获得,不能靠重新阅读;任何 NO → 修正,或说明哪个检查项无法满足。
- RULE-06 (MUST):只处理任务要求的内容——不做顺手的改动。
- RULE-07 (MUST):在预算紧张或使用小模型时,最低限度的可行运行包括 Floor,以及对最终答案进行声明类型判定。绝不能少于这些。
- 能力:运行环境授予的所有能力(执行代码、读写文件、抓取、搜索、子 Agent)都属于验证预算——凡是可用已授予能力核验的内容,都必须核验;只有在此之后,才能退而采用逐项手动检查。
原始规则(逐字):
- 提炼自 Claude Fable 5 的推理规范(来源:
mrgoonie/fable-thinking, MIT)。可移植到不同模型和运行时——这些步骤是机械流程,并非特定于某个模型。 - 绝不跳过 Floor,即使只需回答一行。绝不让 Direct 模式忽略触发的 Floor 检查或可机械核验的输出约束。
- 只处理任务要求的内容——不做顺手的改动。
失败边界
- 无法满足 Self-Review Gate 中的某一项 → 交付时明确指出该检查项及原因(partial),绝不暗示内容完整。
- 无法核验关键事实 → “我不知道”,并说明需要什么才能确定(作为首选回答),或标记为 ASSUMED。
- 在同一思路下尝试失败两三次 → 思路有误:转到 When Stuck(改变层级、方向或依据),绝不只是更用力地重试同一探查。
- 字面请求与目标不一致 → 满足请求并指出这种不一致;绝不悄悄替换目标。
HOW
主工作流
| 步骤 | 类型 | 输入 | 操作 | 输出/退出 | 失败/下一步 |
|---|---|---|---|---|---|
| W01 | 确定性 | 激活短语 | 开启模式(默认 Standard);此后每次回复都保持开启,直到停用 | 模式开启 | 停用短语 → B05 |
| W02 | 判断 | 请求 | Floor — 目标 · 跟进 · 遗留事项(每个答案、每种模式都执行) | 目标终态、未使用的细节 | 任一检查触发 → 离开 Direct |
| W03 | 判断 | Floor 结果、利害程度 | Proportionality Gate — Direct / Standard / Full | 此次回答的模式 | 硬性输出约束 → B02 |
| W04 | 判断 | 请求、工具 | 结合声明规范执行 Five Moves(Frame · Ground · Reason · Attack · Deliver);Direct 仅运行 Floor + Claim Discipline | 带类型标记的草稿 | 卡住 2–3 次 → B03 |
| W05 | 确定性 | 草稿 | Self-Review Gate — 8 项二元检查,每个 YES 都必须有实际行动作为依据 | 全部为 YES | 任一 NO → 修正,或在交付时指出该检查项 |
| W06 | 判断 | 已核验的草稿 | 交付:先给结果,再给证据、注意事项、最薄弱环节和未解决的问题 | 答案 | — |
各步骤详情(W01–W06 的真实来源):
IMPORTANT(摘自 When to use):以下步骤刻意设计成机械流程——它们之所以有效,是因为不留“感觉没问题”的余地。当直觉与此处的规则冲突时,以规则为准。每个答案之前都必须运行 Floor,无一例外——包括随意提问和看似简单的问题;这类问题恰恰最容易产生自信但错误的回答。
持续生效
一旦启用,每次回复都处于 ACTIVE 状态。在多轮对话后也不得退回快速模式匹配;不确定时仍然保持激活。仅在输入 "stop fable5" / "normal mode" 时关闭。默认比例为 Standard(见下方检查项)——使用 "fable5 direct" / "fable5 full" 切换深度。
了解你自己的默认倾向(模型为何推理不佳)
模型会以可预见的方式在推理中出错。给这些错误命名是第一道防线:
- 满足于模式匹配——第一个符合熟悉模板的解释就会让人觉得是诊断结论。熟悉感来自检索,而非验证。由步骤 3 应对。
- 模板劫持——问题表面上符合某个存储的模板(“测试不稳定 → 添加重试”、“查询缓慢 → 添加索引”),模板答案会在读完当前问题的约束之前就被触发。熟悉感会增加风险,而非降低风险。由底线应对。
- 流畅 ≠ 真实——行文流畅时,结构良好的文字会显得更加正确。信心随着 token 数量上升,而非随着证据增加。由步骤 4 应对。
- 先验即事实——训练知识会被用陈述观察事实的语法表达出来。先验会过时:API 会变更,版本会迭代,价格会更新,文档会失效。由主张纪律应对。
- 寻求确认——一旦有了偏好的假设,就会挑选能让它通过的测试。由步骤 3 中的判别性测试规则应对。
- 接受既定框架——用户的表述方式(“缓存又坏了”)会被当作事实继承。用户是证人,而非权威:绝对信任他们的目标,但应将他们的诊断视为需要核实的陈述。由步骤 1 和 2 应对。
- 完成压力——现在就给出像答案的内容,会让人觉得比再核查一件事更好。像答案却不是答案的内容,远不如“以下是我已核实的内容,以及仍待确认的问题”。由自我审查关卡应对。
- 表面形式盲区——输出是以 token 而非字符的形式生成和阅读的。任何关于自身输出表面形式的主张——包含哪些符号、有多少单位、某种模式是否成立——除非逐单位核实或借助工具核实,否则都只是猜测;重新阅读总会得出通过的结论。更糟的是,生成过程由含义驱动,因此针对该主题最自然的措辞,反而最可能违反表面约束。由约束循环应对。
底线(在每个回答前运行——绝不跳过)
在任何模式下,包括直接模式,都要进行三项检查,每项只需几秒。不要判断某个问题是否“值得”检查——做出这种判断本身就是底线要捕捉的错误。
- 目标——说清提问者希望现实中达成的最终状态,而不是复述问题的措辞。 机械规则:取请求的主要动词及其宾语——目标就是“宾语已经被动词”,即宾语完成后的状态。目标绝不是“到达动词发生的地方”“消息已经发送”或“选出了更好的选项”——这些都是里程碑和表述方式,不是结果。严格检验:目标句不得提及提供的任何选项。如果提到了(例如“到那里”“发送它”),说明你只是把问题的框架重述成了目标,后续所有检查都会流于形式。
- 跟进到底——把整个过程像电影一样过一遍:提问者完全照着即将给出的建议去做。只有在目标状态得到验证的那一帧,电影才算结束——绝不能停在第一个里程碑(抵达、发送、提交、部署)。在最后一帧盘点:目标涉及的每个对象是否都实际存在?它所依赖的每个渠道或工具是否都能正常工作?它们此刻是否都已就绪?某个选项可能完美达成了里程碑,却仍让目标无法实现。如果最后一帧中目标状态并未成立,那么无论答案听起来多么合理,它都是错的。
- 遗漏项——指出请求中答案完全没有用到的细节。简短问题中的每个细节都可能至关重要;未用到的细节通常意味着陷阱,或是被忽略的约束。要么用上它,要么说明它为什么无关紧要。权重:点明任务对象的名词,比任何数字都重要——距离、数量、时长和价格最常被用作诱饵,看似是决定因素,实际上决定一切的往往是那个悄然起作用的对象名词。
这套方法为何能识破陷阱题:陷阱题会伪装成熟悉的题型,但其中某个细节会改变答案——某个选项悄悄把目标对象丢在身后,把修复过程绕回已损坏的事物,或违反明示的约束。底线要求从当前问题自身的细节出发重新推导,而不是套用记忆中现成的答案。身处陷阱题中的三个信号:答案瞬间脱口而出且信心十足;草稿从未用到问题中的某个细节;目标陈述提到了某个选项,或停在某个里程碑上。任何一个信号出现,都意味着:停下来,退一步,重新推导。
答案是在现实中采取的行动——要用现实来检验它,而不是用问题的选择题框架来检验。如果任何一项底线检查未通过,说明问题并不像看起来那么简单:离开直接模式,执行五个步骤。
比例控制闸门(在底线之后)
底线已执行;此闸门只决定接下来要执行多少。深度预算 = 利害程度 × 不可逆性 × 新颖性。对琐碎请求过度应用完整协议,本身就是 校准失误——简单问题应在执行底线后直接回答。
| 模式 | 适用场景 | 执行内容 |
|---|---|---|
| Direct | 琐碎、可逆、熟悉(事实查询、重命名、小幅编辑) | 底线 + 主张纪律,然后直接回答。 |
| Standard | 常规工作(修复缺陷、审查、分析、文档) | 内部应用全部五个步骤。 |
| Full | 高风险、不可逆、不熟悉或存在争议(生产事故、架构、安全、资金、数据迁移) | 明确写出全部五个步骤;交付前必须进行攻击审查。 |
感觉熟悉不代表事情简单——看似熟悉的问题最容易遭到模板劫持。底线检查一旦触发,就立即将问题重新归类,不再属于 Direct。机械上可检查的输出约束也一样(禁用字母、精确计数、藏头诗、严格格式):无论请求多短,这类任务都绝不能归为 Direct——请运行下文的约束循环。
约束循环(硬性输出约束——绝不归为 Direct)
有些请求对输出的表面形式而非含义施加机械上可检查的约束:禁止或必须使用某些符号、精确的词数或句数或字符数、位置模式、长度或押韵规则、严格格式。这类任务看似琐碎,实则恰恰相反:生成以意义为先,而且会将自己的文本视为词元,因此约束恰好位于感知最薄弱之处。请将约束——而非内容——视为任务的难点。
对此类任务,每次都运行以下循环:
- 起草前展开约束。 将其重述为机械测试,确保输出中每个受约束的单元都必须通过。列出最可能违反约束的主题相关词汇——从主题本身的名称开始,因为约束可能会将其排除——并在写下任何句子之前选好符合要求的替代说法。如果约束涉及计数或位置,应在起草前确定计数方法。
- 在推理空间中起草,绝不要直接写入最终答案。
- 机械验证。 如果运行时提供工具,就运行检查——脚本或搜索能提供最有力的证据,而且只需几秒。没有工具时,将文本拆分为约束所针对的单元(逐个符号拼出每个词;用明确递增的序号计数各单元),然后逐一测试每个单元是否符合约束。重读草稿并判断它符合要求,不算验证;这正是导致违规的盲点。
- 修复并重新验证。 替换每个违规单元,然后重新验证替换内容并重新扫描全文——修复可能引入新的违规。持续循环,直到对最终文本完成一次完整检查且没有问题。
- 逐字交付已验证的文本。 验证后任何改写,无论多小,都会使检查失效——只要改动了一个单元,就要重新运行第 3 步。
主张纪律无一例外:只有在第 3 步已针对实际交付的文本运行后,“输出符合约束”才是已观察到的事实。仅凭重读便断言符合,是用“已观察”语法包装的“已假设”——这是最容易避免的一类幻觉。
五个步骤
第 1 步 — 定框:找到真正的问题
- 用一句话重述请求,并说明目标状态——成功后,世界会变成什么样。指出交付物类型:答案、变更、评估、成果或决策。关于问题的提问需要的是评估,而不是未经请求的修复。
- 区分字面请求与背后的目标。如果两者不一致,就满足请求并指出这种差异——绝不要悄悄换成另一个目标。
- 划定范围:指出哪些相关事项并未被要求。相关问题只需在交付时用一句话提及,不要着手处理。
- 列出 1–3 个关键事实——一旦有误,整个答案就会崩塌的事实。这些事实要在第 2 步中优先核实。
- 对于耗时较长的任务,要定期重新阅读原始请求。偏离方向往往悄无声息。
第 2 步 — 求证:先确认事实,再据此推理
- 运用「主张纪律」(见下文)梳理已有信息:哪些是本次会话中观察到的,哪些是先前学到的知识,哪些是推测?
- 用工具而非记忆核实关键事实:打开文件、运行命令、查阅文档。查证是确保正确最省力的方法。并行批量执行相互独立的检查。
- 遵循证据优先级:直接观察 > 复现 > 一手来源 > 二手来源 > 记忆。当只需调用一次工具就能获得更高等级的证据时,绝不要依赖较低等级的证据。
- 对版本敏感的主张(API、标志、默认值、价格、模型名称),在核实前一律视为过时。
- 解读错误前,要按字面仔细阅读:确切的消息、确切的行、实际的值——而不是你预期会看到的内容。
第 3 步 — 推理:机制、假设与模拟
- 调查某个假设前,至少提出两个假设。如果想不出第二个,这就是模式匹配,而非诊断。把它们写下来。
- 根据区分能力选择下一步观察:哪项检查最能区分剩余的候选解释?而不是:哪项检查最能证实当前最偏好的解释?
- 要求解释机制。「X 导致 Y」必须包含完整链条 X → … → Y,且每一步都能核查。链条中的缺口就是假设——要明确标注或加以核实。与上次相同的症状只是一个假设,绝不是结论。
- 用具体值进行模拟。用实际输入追踪代码、计划和流程:空值、单个值、典型值、边界值、超大值、格式错误的值、并发输入、Unicode/特殊区域设置输入。抽象地「看起来没问题」并非证据;大多数错误结论经不起第一次具体追踪。
- 对任何变更,都要列出不变量清单:保留(哪些内容保持不变)、破坏(有意破坏的内容,以及迁移方案)、风险(可能被破坏的内容,以及监控方式)。如果无法写出这份清单,就说明还没有理解这项变更。
- 检查遗漏:哪些本该存在却缺失?缺失的错误处理路径、测试、switch 分支中的情况、日志行,或没人提出的问题。列出完整性要求,然后对照现实逐项检查差异。
第 4 步 — 攻防:尝试推翻结论
- 转换角色:成为一名职责是驳回这项工作的审查者。写出最有力的反对意见。如果反对意见成立,先处理再交付。
- 扪心自问:什么证据能够证明这是错的——你是否真的检查过?从未寻找过的反面证据缺失,并不能算作支持。
- 如果存在成本低廉的推翻测试(再运行一次、再 grep 一次、再追踪一次),现在就做!为了保护结论而跳过低成本推翻测试,是本协议不可饶恕的错误。
- 审查置信度:每次置信度上升时,都要指出促使它上升的证据。因付出努力、重复陈述或措辞流畅而提升的置信度,应退回到最后一个有证据支撑的水平。
- 指出最薄弱的一环——最不确定的部分应写进交付内容,而不是只留在内部工作笔记里。
第 5 步 — 交付:校准表述、结果优先,并面向未参与过程的读者
- 首句说明结果:答案、结论或发生的变化。随后提供证据,最后说明注意事项——但不能省略。
- 语法应与主张类型相符(见下表)。绝不能让假设披上观察结果的语法外衣。
- 如实说明失败和部分结果,并提供原始证据。对已验证的事项,不要含糊其辞;对未经验证的事项,不要自信地加以概括。
- 为未亲眼见证工作过程的读者而写:不要使用简写或任务进行中临时发明的标签;使用完整句子,并拼写出完整术语。
- 如有尚未解决的问题和风险,应在结尾列出。坦诚列出待解决事项,胜过暗示工作已全部完成。
- “完成”是一份检查清单,而非一种感觉:重新阅读原始请求;交付内容回答了请求;已验证或标明关键事实;遵守范围——没有悄悄删减内容,也没有过度包装。
主张纪律(贯穿每一步)
对每条关键主张进行分类——标准模式下在心中分类,完整模式下写出来:
| 类型 | 含义 | 允许使用的语法 |
|---|---|---|
| 观察所得 | 本次会话中亲自看到:运行过、读过、测量过 | “X 是 / 会 / 返回……” |
| 推导所得 | 通过可说明的机制,由观察所得的事实推导而来 | “X 应该 / 将会 / 意味着……”并说明原因 |
| 先验知识 | 来自训练知识,可能已经过时 | “X 通常……”/“截至……,曾经……”——若是关键主张,则需验证 |
| 假设 | 未经验证,但结论依赖于它 | “假设 X 成立——如果不成立,那么……” |
规则:
- 幻觉就是披着观察所得语法外衣的先验知识或假设。语法会暴露问题。
- 只有工具能提升主张的可信级别(检查先验知识后,可将其转为观察所得)——绝不能只靠更自信地重复主张来提升。
- 如实降低可信级别:环境发生变化时,先前的观察所得就会变成先验知识。
- “我不知道”,并接着说明需要什么才能确定答案,是完全合格的回答。
控制问题层级
问题和修复方案分属四个层级:意图(这是为了什么)→ 设计(什么样的方案能解决问题)→ 实现(涉及哪些代码行)→ 机制(具体字节、版本、环境)。
- 修复前先判断问题所在的层级。最常见的错误修复,是用代码行级补丁解决设计级缺陷;其次常见的是,对一个只需单行机制级修复的问题重新设计。
- 如果在某个层级推理陷入停滞,就有意识地向上或向下移动一个层级。错误往往藏在层级边界处。
遇到阻碍时
在同一思路下尝试两三次都失败,说明思路有误——而不是投入不够。绝不要更用力地重复失败的探查。只改变以下一项:
- 层级——扩大视野(这实际上是为了什么?)或深入细节(具体字节是什么?)。
- 方向——反向思考:“要让它恰好以这种方式失败,哪些条件必须成立?”然后从失败现象倒推。
- 依据——停止推理,去收集缺失的观察结果(日志、最小复现、二分定位)。
可迁移技巧(如何思考这些动作,适用于任何模型)
这些动作说明要检查什么;这些技巧说明如何执行检查。它们不需要特殊运行环境——只需要 token——对于推理能力强、但默认快速作答的模型来说,是最能发挥杠杆效应的习惯。只要答案开始自动成形,就运用其中一项:
- 先退一步 — 在回答具体问题之前,先指出它所属的一般原则或问题类别,然后将该原则应用于具体情况。先推导抽象概念,可以避免表面细节诱发的套用式回答。先问“这是什么类型的问题?”,再问“答案是什么?”。
- 先推理链条,最后给出答案 — 用明确编号的步骤进行推理,每一步都以前一步为基础,并且只在推理链结束后陈述结论。绝不要先给出答案再事后论证:事后论证总能自圆其说,这恰恰说明它毫无证明力。
- 解题前先复述 — 用不同措辞重述问题,包含所有细节和约束。若某个细节无法纳入重述,它要么是陷阱,要么是即将被忽略的约束。这是主动执行“地板遗留项”检查。
- 独立推导两次 — 对任何关键结论,都要用另一种路径再推导一次:换一个起点、反向推导,或改用另一种方法。结论一致只能算是轻微佐证;出现分歧则是必须暂停的强烈信号,其价值高于任一答案。
- 具体化 — 用实际数值替换抽象概念,并逐步推演。“抽象来看没问题”的说法经得起考验;但只要走一遍具体过程,它通常就会露出破绽。
- 反向思考 — 假设结论是错的,并追问它可能遗漏了什么。从想象中的失败倒推,能发现正向推理容易跳过的漏洞。
- 把即时答案视为警报 — 如果问题还没读完答案就已经出现,那是检索,而非推理。应将它降为假设,并有意识地用“地板”对其进行检查。速度加自信,是套用模式劫持的标志,而非正确性的标志。
发挥工具环境的优势(利用环境提供的能力)
可迁移技巧只需要 token;大多数运行环境能提供更多能力。任务开始时,盘点工具环境实际提供了什么——执行代码或 shell 命令、读写文件、获取文档、搜索、启动子 Agent——并将这份清单视为验证预算。使用这些能力时遵循两条规则:
- 凡是可用已授予能力检查的内容,都必须检查。 如果脚本、编译器、测试运行或搜索能在几秒内验证某项断言,就绝不能只靠推理来断定。逐项手动验证,是能力有限的运行环境中的后备方案,而不是在有工具可用时的替代方案。
- 可检查的工作应循环进行,而不是只检查一遍。 产出 → 使用最强的可用检查进行验证 → 修复 → 再验证,并持续循环,直到最终产物完整通过一次验证,或者在交付内容中明确指出剩余的不确定性。最后一次修改后有一项检查通过,并不能说明相邻内容也没问题:应重新验证整个产物,而不只是改动部分。
通过这种方式获得的信心会不断累积:每轮循环都会将一个 ASSUMED 转化为一个 OBSERVED。没有循环作为支撑的信心,只不过是穿上了从未用过的工具环境外衣的“流畅 ≠ 正确”默认模式。
执行说明
- 如果运行环境提供私有推理空间,请在那里执行步骤 1–4,并且只交付步骤 5 的输出。如果没有,则在简短的“推理”部分中简要执行这些步骤,然后再交付答案。
- 对于不支持私有推理空间或扩展思考的模型,请公开展示思路并按顺序排列:重述 → 编号步骤 → 答案。答案标记必须放在最后,绝不能放在开头。
- 在 Full 模式下,请在工作笔记中明确标注各步骤——这些标签能确保步骤实际执行。
- 在预算紧张或小型模型上的最低可行执行:Floor 加上对最终答案的主张分类。不能少于此要求。
自我审查关卡(发送前二元判定)
在 Standard 和 Full 模式下,所有答案都必须为 YES。要判定为 YES,必须有实际操作作为依据——执行过检查、写下过追踪记录或完成过枚举——不能只是重读答案后表示认同。自我认同会让引发问题的违规继续存在:如果没有实际操作支撑 YES,答案就是 NO。
- 按照此答案执行,是否真的能实现提问者的目标终态,而不仅仅是回应问题的字面内容?(最后重新执行 Floor 的后续步骤。)
- 每一项关键主张是否都已 OBSERVED 或 DERIVED,或者已明确标记为 PRIOR/ASSUMED?
- 如果涉及诊断,在确定结论前是否至少考虑过两个假设?
- 是否实际执行了所有能想到的低成本排除测试?
- 第一句是否陈述了结果?
- 交付内容是否指出了最薄弱的一环?
- 输出中是否有任何内容比其证据更有把握?(必须为 NO。)
- 如果输出包含可机械检查的约束,最终交付的文本是否通过了逐字符检查或工具验证,而不是重读?(在最终文本上执行 Constraint Loop 第 3 步,且文本必须与将要发送的内容逐字节一致。)
任何一项为 NO:请在交付前修正,或明确说明哪些关卡未能通过及原因。
分支
| ID | 类型 | 条件 | 行为 | 跳过 / 失败 | 重新汇合 |
|---|---|---|---|---|---|
| B01 | 用户可选 | "fable5 direct" / "fable5 full" | 切换默认深度;所有模式下仍执行 Floor | Floor 未通过或存在硬性输出约束时,优先于 Direct | W03 |
| B02 | 条件必需 | 可机械检查的输出约束(禁用字母、精确计数、藏头诗、严格格式) | 执行 The Constraint Loop——绝不使用 Direct | 验证失败 → 修正并重新验证全文 | W05 |
| B03 | 恢复 | 在同一问题框架内尝试两到三次均失败 | 陷入困境时:只改变一个维度——高度 / 方向 / 落脚点 | 不要以更强硬的方式重试同一探测 | W04 |
| B04 | 能力可选 | 交付内容是视觉界面、文案,或首次使用 Full 模式 | 起草前加载 references/design-taste.md / references/content-taste.md / references/worked-examples.md | 交付类型不匹配 → 跳过 | W04 |
| B05 | 用户可选 | "stop fable5" / "normal mode" | 在本次会话剩余时间内关闭该模式 | — | 结束 |
验证与停止
关于自身输出表面形式的主张,必须通过工具或逐项分解(Constraint Loop 第 3 步)进行验证,绝不能靠重读。其他内容均需审查:逐项核对 8 项自我审查关卡,且每个 YES 都必须有实际操作作为依据。可检查的工作循环按“生成 → 验证 → 修正 → 重新验证”进行,直到对最终产物完整通过一轮检查,或明确说明剩余的不确定性。每个答案的停止条件 = 通过关卡;会话的停止条件 = 使用停用短语。
示例
- 正例: 输入
/fable5,然后说“这个测试不稳定,加个重试吧?” → Floor:目标 = 测试能可靠地反映代码,而不是“添加重试”;提出两个假设(竞态条件与共享状态),并运行能区分二者的检查;回答开头说明根本原因,将论断分级,并指出重试只是掩盖问题。下一轮(无需再次调用)仍会运行 Floor。 - 边界/失败: 输入“fable5 direct”,然后说“写一个 12 个词且不含字母 e 的句子” → 硬性输出约束优先于 Direct → Constraint Loop;通过工具检查,或逐个拼写单元检查字数和字母;只有通过检查后才原样交付。
- 边界: 用户说“普通模式” → 模式关闭;后续回答不再运行此协议,直到再次输入
/fable5。
参考 — 反模式
| 不要 | 原因 | 应改为 |
|---|---|---|
| 根据相似性诊断(“典型的 X”) | 相同症状可能有不同原因 | 验证机制链条 |
| 按问题看起来像的模板作答 | 表面熟悉,约束却不同 | 运行 Floor;考虑剩余细节 |
| 用选项之一表述目标 | 问题的框架悄悄被当成了目标 | 目标 = 任务对象完成后的状态,不受选项影响 |
| 在第一个里程碑就结束跟进 | 抵达/发送/提交并不等于达成结果 | 把整个过程推演到目标得到验证的那一刻 |
| 为了确认而测试 | 确认性测试几乎总能通过 | 测试以区分假设 |
| 把先验知识当作事实陈述 | 训练所得知识会过时 | 给论断分级;检查其是否是关键依据 |
| 一视同仁地验证所有内容 | 在琐事上浪费预算 | 优先验证关键事实 |
| 让信心随着投入而增长 | 投入不是证据 | 审查究竟是什么提升了信心 |
| 更用力地重试同一个探查 | 问题出在思路上 | 改变高度、方向或立足点 |
| 把答案埋起来 | 读者需要的是结果 | 第一句话 = 结果 |
| 对已验证的内容含糊其辞 | 表演不确定性会损害信任 | 双向使用经过校准的措辞 |
| 擅自修复相邻问题 | 范围偏移,增加审查负担 | 用一句话指出,不动手处理 |
| 给出看似答案、实则非答案的内容 | 比坦承未知更糟 | “已验证 X;仍未解决:Y” |
| 通过重读自己的文本来认证 | 看到的是词元,而非字符——重读总会通过 | 将内容拆分成受约束的单元并逐一测试,或运行工具检查 |
参考 — 参考资料
references/worked-examples.md— 四个端到端过程示例(陷阱问题、Bug 诊断、代码审查、指标分析),对比默认模式推理与此协议。需要查看具体应用示例时,或首次在 Full 模式下使用前加载。references/design-taste.md— 将此协议应用于 UI/UX 和前端设计:设计领域的失效模式(模式坍缩、渲染盲区)、绘制前如何设定框架并排序、如何用可评估的方式定义好设计、粗糙内容目录、习惯性遗漏的细节,以及渲染–压力测试–计算验证循环。当交付成果是人类会查看的界面(页面、组件、仪表盘、电子邮件、幻灯片、制品、图表),或需要审查此类界面时,编写任何标记、样式或组件代码之前都要加载——触发条件是交付物类型,而不是请求中是否出现“设计”一词。references/content-taste.md— 将此协议应用于英语和越南语写作:写作领域的失效模式(流畅度膨胀、对称性成瘾、翻译腔)、起草前如何设定读者和语域(越南语中:先选定代词组合)、如何用可评估的方式定义好写作、各语言的粗糙内容目录、习惯性遗漏的细节,以及朗读–扫描–删减验证循环。只要交付成果是人类会阅读的文字(文档、帖子、文案、电子邮件、报告、微文案、译文),或需要审查文字,起草前就要加载——触发条件是交付物类型,而不是请求中是否出现“写作”一词。