Superpowers 三件套之三 / DOT 提示工程原理 / 形式语言 + 认知负荷 + format priming

DOT Graph
作为 提示工程
—— 完整原理与应用

为何 LLM 能"读懂"DOT?为何 DOT 比散文更有效?背后是 LLM 训练数据的语料富集、Tokenization 友好性、形状语义的多模态先验,以及形式语言理论的降维之作。

8
DOT graph 数
6
covered skills
3-5×
token 效率
4
实证 commit
§ 00 — Abstract

不是文档美化,是行为约束

Superpowers 在核心 skill 中嵌入大量 DOT graph,不是为了好看 —— 它是一种针对 LLM 行为约束的提示工程技术。

A Single Through-Line

本文要论证四件事:

AI 理解 DOT —— 因为它在训练数据中富集、tokenization 友好、形状语义有先验。
DOT 比散文更有效 —— 把决策路径离散化、消除指代歧义、压缩 token、形成不可绕过的状态机。
背后是形式语言理论 + 认知负荷理论 + format priming 的综合应用。
项目内有真实 A/B 实证(commit 9d2b886)。

DOT graph 是 LLM 行为约束的"领域专用语言(DSL)"—— 它把 prompt 从自然语言降维到正则语言,把 agent 的行为从"建议遵守"提升到"沿边必经"。

§ 01 — First Principles

AI 如何"读"DOT

人类看到 DOT 是先视觉渲染再理解。LLM 没有视觉系统 —— 那它为何还能正确解析"决策树"语义?答案有三层。

Layer 1
Tokenization 友好性
DOT 的核心句法元素 ->[shape=...][label="..."] 在主流 BPE tokenizer 中是少数稳定 token,不会被切碎。

-> 这个 token 在训练数据中语义分布极其集中:C/C++ 成员访问、graphviz、数学逻辑蕴含、UML、Haskell 类型签名 —— 它本身就携带"A 引出 B"的语义先验,不像散文中的 "then"、"and"。

Layer 2
训练语料 graphviz 富集
LLM 训练数据中包含数百万 .dot / .gv 文件、Wikipedia 状态机文章、graphviz 学术示例、编译器 CFG、StackOverflow 几万问答。

这意味着 DOT 是 LLM 训练时见过最多的"图描述语言" —— 它的语法和语义已被深度内化到模型权重中。

Layer 3
Attention 天然契合
Transformer 的 self-attention 计算"哪些 token 互相相关"。DOT 的 A -> B 天然就是一个 attention 模式——attention head 容易学到"看到 ->,就把右侧节点聚合到当前位置"。

而散文中 "if A happens, then B follows but only when C is true unless..." 把同一关系埋在 10+ 个非语义 token 后,attention 不容易锁定。

Critical Evidence
LLM 真"懂"DOT 的关键证据

DOT 允许节点定义和边定义任意顺序。把同一段 DOT 完全打乱顺序,语义对 LLM 来说完全等价—— 它能正确解析图结构,与文本顺序无关。

这说明 LLM 不是把 DOT 当字符串处理,而是真的在内部建立了图的拓扑表示

这与 Anthropic 的可解释性研究一致:复杂结构化输入会激活 LLM 中专门的"组合电路"。

§ 02 — Seven Advantages

DOT 编码的七大优势

逐项展开 DOT 相比散文的优势。每一条都对应一种 agent 在散文中可能产生的失败模式。

i.
决策路径的强制离散化

散文版包含的歧义:"consider whether"——必须做还是可以做?"if so, refactor"——refactor 谁?"otherwise"——指代什么?"be careful about"——怎么 careful?

散文版 · 多歧义
"If the test passes, you should consider whether the code is over-engineered, and if so, refactor; otherwise you can move on, but be careful about edge cases."
DOT 版 · 无歧义
"Test passes?" -> "Over-engineered?" [label="yes"]; "Test passes?" -> "Move on" [label="no"]; "Over-engineered?" -> "Refactor" [label="yes"]; "Over-engineered?" -> "Move on" [label="no"];

每个决策只有有限个出边,每条边都有显式 label,没有"otherwise / consider / be careful"的逃生口

ii.
不可绕过的状态机语义

LLM 在散文中常见的失败:跳过中间步骤、重新解读规则、提前终止。DOT 把流程编码为有限状态机——每个状态是节点,状态转移必须通过显式的边,终点节点(doublecircle)是唯一合法的"结束"。

这与形式语言理论(Formal Language Theory)直接相关:DOT 描述的图在语义上是有限状态自动机,agent 的行为被限制在图的可达路径内。

iii.
形状作为多模态语义锚点

这些形状的语义先验已经在 LLM 预训练阶段被编码进权重。当 SKILL.md 写 "NEVER use git add -A" [shape=octagon, fillcolor=red],LLM 不需要查 dot 文档就知道这是警告——octagonredfillcolor 这些 token 组合在训练语料中等价于"危险/停止"。

形状DOT 名语义训练数据来源
box 行为 / 动作 流程图标准
diamond 决策 流程图教科书 / UML 活动图
octagon (red) 警告 / STOP 道路标志 / 安全文档
doublecircle 入口 / 出口 自动机理论中的接受状态
ellipse 状态 UML 状态图
cmd plaintext 字面命令 shell 文档约定

语义压缩:用 4-5 个 token 替代了一段散文("This is an EXTREMELY important warning, you must absolutely never...")。

iv.
与 Chain-of-Thought 的协同
散文 CoT · 漂移
"Hmm, the user wants to fix a bug. The skill says I should investigate root cause first. Let me think about what 'root cause' means in this context. Maybe it's the immediate trigger? Or maybe deeper?..."
DOT 引导 CoT · 沿节点走
"I'm at node 'Bug detected'. The diagram says next is 'Phase 1: Read error message'. Doing that. Now at 'Reproduce consistently?'. Reproducible — yes. Next: 'Check recent changes'..."

Superpowers 的做法是反向的:不是让 LLM 自己生成图(Tree of Thoughts、Graph of Thoughts),而是把图作为约束预先放进 prompt —— agent 沿图行动,无需自己规划。

v.
无歧义的引用 · Anaphora 消除

散文中常见 "...do this, then check it, if it fails, retry that step..." —— "this"、"it"、"that" 指代什么?人类靠上下文,LLM 靠 attention,但都有出错可能。

DOT 中所有引用都是节点字符串字面量:"Run test" -> "Test passes?" —— 字符串完全匹配,没有指代消解的空间,attention 锁定 100%。这在 NLP 领域称为 anaphora resolution,是自然语言理解的经典难题之一,DOT 直接绕过了它。

vi.
Token 效率 · 密度优势

实测对比(subagent-driven-development/SKILL.md):

散文版
1100 字
含所有边、label、循环
DOT 版
350 字
同等表达力

密度高的内容在 attention 中权重更高 —— 10 个 token 的关键决策比埋在 50 个 token 散文中的同一决策更易触发 agent 关注。

vii.
人机双向可读

同一段 DOT 既能让 agent 读懂,也能让人类用 dot -Tsvg 渲染成图来审查。文档作者修改 SKILL.md 时,可以渲染图看自己的设计意图是否清晰 —— 这种"自我审查"循环散文做不到。

项目专门为此提供了 render-graphs.js 工具,输入 SKILL.md 路径即可批量生成 SVG。

§ 03 — Theoretical Foundations

背后的理论根基

DOT 提示工程不是凭空发明,而是建立在多个学科基础之上的综合应用。

Theory 1 · 1950s
形式语言与状态机
DOT 描述的有向图 = 有限状态机(FSM)。Kleene、Rabin、Scott、Chomsky 奠基。在软件工程出现于编译器 CFG、协议验证(TLA+)、UML、正则表达式。

Superpowers 的创新:把 LLM 的 prompt-following 行为也建模为 FSM。每个 SKILL.md 是一个"程序",每个 dot graph 是这个程序的 CFG。

Theory 2 · 2022
In-Context Format Priming
LLM 有一个研究充分的现象:示例的格式会影响输出格式。给 JSON 例子 → 输出 JSON;给 dot graph → 输出"按节点遍历"的结构化思考。

参考 [Min et al., 2022]:format 对 ICL 的影响超过 content 本身。DOT 让 agent 进入"按节点遍历"的思维模式,减少创造性偏离。

Theory 3 · CLT
认知负荷理论
LLM 处理散文要做句法解析、指代消解、推断"if X then Y"的隐含逻辑、维持工作记忆 —— 这些都消耗 attention 容量。

DOT 把这些隐式工作显式化:节点和边把句法解析做完,字面量引用消除指代消解,[label="yes"] 把语义直接写在边上 —— 给 agent 留更多 attention 处理本质问题。

3.4 Chomsky 层级视角

如果用乔姆斯基语言层级看,Superpowers 的关键洞察是:把 prompt 从 0 型(散文)"降维"到 3 型(DOT/FSM) —— LLM 的输出空间也随之被约束。

层级类型例子描述能力
0无限制自然语言、英文散文最强 / 最易歧义
1上下文有关XML 嵌套规则
2上下文无关程序语言、JSON
3正则 / FSMDOT graph、正则表达式受限 / 最少歧义 ★

输入语言层级越受限,输出空间越受限 —— 这就是为什么 dot graph 能减少 hallucination 和 deviation。

3.5 可解释性视角:Attention 的"组合电路"

近期可解释性研究发现 Transformer 内部存在专门处理结构化输入的 attention 电路:Induction heads(识别重复模式)、Successor heads(识别 a→b→c 序列)、Composition circuits(组合多步推理)。DOT 的 A -> B -> C 模式天然激活这些电路 —— 这是结构化 prompt 比散文更有效的微观机制。

§ 04 — Empirical Evidence

项目内的实证证据

Superpowers 不是基于理论推断使用 DOT,而是经过实证验证。以下是 git 历史中可追溯的证据。

直接 A/B 验证 · 2026-03-10
commit 9d2b886 — Add spec review loop to checklist and flow diagram
"The spec review loop existed in the prose 'After the Design' section but was missing from both the checklist and the process flow diagram. Since agents follow the diagram and checklist more reliably than prose, the spec review step was being skipped entirely."

这是一次自然的 A/B 测试:

A 组
步骤只在 prose 中
→ agent 跳过该步骤
B 组
步骤同时在 prose + diagram + checklist
→ agent 遵守

修复:把同一个步骤同时加进 checklist 和 dot graph,agent 立即开始遵守。

间接证据 · v4.0.0
commit 030a222 — Description trap 现象

当 skill 的 YAML description 总结了 workflow,agent 倾向于读 description 就停下,忽略下面的 flowchart

修复方法:把 description 改为只描述触发条件,不做 workflow 总结,强制 agent 必须读 graph。

反向证明:当 description(散文)和 graph 冲突时,agent 倾向于跟散文走 —— 所以不能让散文偷跑在 graph 前面。

工程跃迁 · 2025-12-17
v4.0.0 引入 DOT 体系

v4.0.0 单版本 39 commits 中,与 DOT 相关的关键 commits:

  • 28ba020 · Add render-graphs.js tool for visualizing skill flowcharts
  • a9b94ae · Rewrite subagent-driven-development with executable flowcharts

这是项目从"用图装饰文档"到"图就是文档主体"的范式转变

反向证据 · DOT 不是万能
writing-skills 明确规定的禁区
"Use flowcharts ONLY for: Non-obvious decision points, Process loops where you might stop too early, 'When to use A vs B' decisions" "Never use flowcharts for: Reference material, Code examples, Linear instructions, Labels without semantic meaning"

为什么有这些禁区:Reference material 用表格更密集;Code examples 在 DOT 标签里无法 copy-paste;Linear instructions 用编号列表更清晰;无语义标签等于没有图,只是装饰。

这条规则承认 DOT 是工具不是教条 —— 用错地方反而降低 agent 理解。

失败教训 · 过度结构化
commit 8e38ab8 — Simplify brainstorming skill to match original vision

项目早期曾尝试用 6-stage 流程图大规模引导 brainstorming,结果是机械化执行而失去对话感

教训:DOT graph 的最佳用途是决策点和分支("该往哪走?"),而不是线性的 step-by-step 教程("按 1234 做")。

§ 05 — Research Context

与近期 LLM 研究的关联

把 DOT 提示工程放在 Structured Prompting 流派的版图中。

5.1 Structured Prompting 流派

方法思路与 Superpowers DOT 的关系
Chain of Thought (CoT)让 LLM 显式推理互补 — CoT 是输出端,DOT 是输入端
Tree of Thoughts (ToT)LLM 在分支上探索互补 — ToT 让 LLM 生成树,DOT 给 LLM 树
Graph of Thoughts (GoT)用图组织思考最接近 — 但 GoT 让 LLM 生成图,DOT 让 LLM 沿图走
Program-of-Thought (PoT)输出可执行代码互补 — PoT 输出程序,DOT 输入程序
Constrained Generation解码层约束互补 — 不修改解码,纯 prompt 实现

Superpowers 的独特位置:它是输入端的图约束——不修改模型、不修改解码,纯靠 prompt engineering 实现行为约束。

5.2 DOT vs Mermaid · 为什么不用 Mermaid?

维度DOTMermaid
训练语料规模★★★ 大★★ 中
LLM 解析能力★★★ 强★★ 中
形状语义化★★★ 丰富★ 有限
渲染工具dot CLImermaid-cli
GitHub 内联渲染✗ 无✓ 有

Mermaid 的优势是 GitHub 渲染好看,但这是给人类的好处,对 agent 没用。DOT 的训练数据规模和形状语义丰富度更适合 LLM。

§ 06 — Practice

何时用 DOT,何时不用

基于以上理论和项目实践,给出实操判定。

6.1 用 / 不用 DOT 的判定

用 DOT
✓ 多分支决策("if X then A else if Y then B") ✓ 含循环的流程("keep retrying until...") ✓ 不可绕过的强制顺序("A 必须先于 B") ✓ 状态转移(FSM)
不用 DOT
✗ 线性步骤(用 numbered list) ✗ 参考资料 / API 文档(用 table) ✗ 代码示例(用 code block) ✗ 无语义节点(step1, step2)

6.2 写好 DOT 的 5 条经验法则

法则 1
节点用语义形状,不用默认 box 一刀切
✗ 全是 box,丢失语义
"Check tests" -> "Pass?" -> "Refactor"
✓ 形状区分
"Check tests" [shape=box] "Pass?" [shape=diamond] "Refactor" [shape=box]
法则 2
节点名是完整短语,不是缩写
✗ 看不出含义
step1 [label="step1"] helper2 [label="helper2"]
✓ 节点名本身就是描述
"Read error message" "Reproduce consistently?"
法则 3
边一定要有 label
✗ 无 label,分支语义靠猜
"Test passes?" -> "Refactor" "Test passes?" -> "Debug"
✓ label 显式
"Test passes?" -> "Refactor" [label="yes"] "Test passes?" -> "Debug" [label="no"]
法则 4
警告 / STOP 用 octagon + red
"NEVER use git add -A" [shape=octagon, style=filled, fillcolor=red, fontcolor=white]
法则 5
终态用 doublecircle
"Process complete" [shape=doublecircle] "Use finishing-skill" [shape=doublecircle, style=filled, fillcolor=lightgreen]
§ 07 — Limitations

局限性与未来方向

DOT 不是万能。承认局限是工程严肃性的一部分。

局限 1
DOT 不能表达概率 / 权重
"通常走 A 路径,例外走 B" 在 DOT 中只能用 label 描述,不能量化。
在 SKILL.md 散文中补充
局限 2
嵌套深度有限
5 层以上的 cluster 嵌套,agent 容易误解层级关系。
拆成多个 graph,互相引用
局限 3
图过大反而损害理解
50+ 节点的 graph,agent 可能只关注前 20 个。
每个 graph ≤ 30 节点,复杂的拆分
局限 4
模型能力差异
GPT-4 / Claude 4 解析 DOT 很准确,较小或较旧模型可能解析不稳。
对低能力模型同时提供散文版作为 fallback

目前 Superpowers 选择的 DOT 是 2025 年 LLM 时代下"成熟度 / 效果 / 成本"的最优解。可能的扩展方向包括 Petri net(并发)、TLA+ 风格的状态约束、多模态 DOT + 真实渲染图。

§ 08 — Summary

三句话给读者带走

把所有理论与实证压缩为带得走的核心论断。

i.
AI 真的"懂" DOT
因为它在训练数据中见过百万个 dot 文件,DOT 是 LLM 的"母语方言"之一
ii.
DOT 不是装饰
它是把 SKILL.md 从"建议性散文"升级为"约束性程序"的工具。
iii.
DOT 不是万能
它擅长决策与分支,不擅长线性叙事和参考资料

七大优势速记

i. 决策路径离散化
消除散文歧义
ii. 状态机不可绕过
agent 无逃生口
iii. 形状的多模态语义
octagon = STOP,无需解释
iv. CoT 协同
agent 沿节点走,CoT 短而准
v. 指代歧义消除
字面量引用
vi. Token 效率 3-5×
同等表达更省
vii. 人机双向可读
dot 渲染 SVG 给人审查
Core Thesis

DOT graph 在 Superpowers 中扮演的角色,是 LLM 行为约束的"领域专用语言(DSL)"—— 它把 prompt 从自然语言降维到正则语言,把 agent 的行为从模糊的"建议遵守"提升到结构化的"必经路径"。

三大理论根基:形式语言 / FSM · 把 prompt 降维到正则层级。In-Context Format Priming · 格式影响输出。Cognitive Load Theory · 把隐式工作显式化。

实证证据链:9d2b886 graph > prose A/B 实证 · 030a222 description trap 反向证据 · a9b94ae v4.0.0 引入完整 DOT 体系 · 8e38ab8 过度结构化的反例教训。

原文

源链接