用途
Prompt Atom Extraction & Formalization 旨在把松散的操作者散文转化为原子:最小化、已分类、机器可读的意图单元,让注册表可以存储、流水线可以路由、未来会话可以执行,而无需重新解读原来那一大段文字。
为什么存在
操作者意图往往是打包到达的——一个密集段落可能承载一条长期法则、两条指令、一条约束和一个开放问题。作为散文保留时,该意图只能由重新阅读并重新推导它的人执行。原子化后,每个单元获得一个 ID、一个类别、一个生命周期状态和来源信息——它变得可治理。原则是:原子是永久的;提取是增量式的;源内容不会因被形式化而被破坏。
原子类别
| 类别 | 性质 | 生命周期 | 示例 |
|---|---|---|---|
| law | 长期规则;约束所有未来行为 | 永久,直到修订 | "nothing local-only — every artifact git-tracked AND pushed" |
| value | 权重/偏好;塑造选择但不强制某一选择 | 持久 | "prefer user coinages over standard vocabulary" |
| directive | 一个具体可执行动作 | 直到 DONE | "register the 5 bench agents in fleet.yaml" |
| constraint | 任何动作执行方式的边界 | 有范围或永久 | "never chezmoi add over existing source without diffing" |
| question | 由人类拥有的开放决策 | 直到被回答 | "GCP_SA_KEY provisioning — enable CI deploys?" |
| branch-vector | 可能未来中的一个分叉;选项处于叠加态 | 直到坍缩 | "skills live in domus OR a-i--skills — decide before next install" |
三种状态
- RAW——逐字来源片段,未改动。始终保留(引用或按范围引用),绝不编辑。
- CLEANED / FORMALIZED——意图以规范化语言最小化重述,已分类,并附加 frontmatter。
- ELEVATED——原子被泛化到其长期形式:剥离事件特定细节,链接到相关原子,准备好进入宪法或注册表层。只有 laws、values 和 constraints 会 elevate;directives 和 questions 则 resolve。
每个原子都会记录其所处状态;一次提取过程可以合理地停在 CLEANED。
工作流
1. 切分来源
在意图边界而非句子边界拆分文本——一个意图是一个不可再分的“do/never/prefer/decide”单元。
密集提示会打包抽象:预计每个操作者段落产生 3–10 个原子。欠切分(每条消息一个原子)是主要失败模式。
为每个片段分配来源范围:{file, line-range} 或 {session-id, message-index}。
2. 分类
应用类别表。消歧测试:
- 下个月它仍然具有约束力吗?→ law/value/constraint,而非 directive。
- 它是在命令一个动作还是限定一个动作?→ directive vs constraint。
- agent 能否单独解决它?如果不能 → question。
- 是否列出了多个互斥的未来但没有选择?→ branch-vector。
- 在 law 和 value 之间犹豫时:laws 会被违反,values 会被权衡。如果你能想象出一种被认可的权衡,那它就是 value。
3. 形式化为 frontmatter
id: ATM-NNNNNN # mint from the registry's counter — never invent ranges
class: constraint
state: CLEANED
text: "Never `chezmoi add` over existing source without `chezmoi diff` first."
raw: "…also for god's sake diff before you chezmoi add anything again…"
provenance: {session: 8bb8f846, message: 41}
captured: 2026-06-07
status: OPEN # OPEN | DONE | ANSWERED | COLLAPSED | SUPERSEDED-BY:{id}
links: [ATM-013811] # related atoms; liberal linking
tags: [chezmoi, destructive-ops]
规则:
- 从注册表自己的计数器表面铸造 ID——读取它、认领范围、写回;永远不要猜测下一个 ID。
- raw 是必须的:逐字或按范围引用的来源。没有来源的形式化是改写,不是提取。
- 每个原子一个意图。如果 text 字段需要“and”,就拆分它。
4. Elevate(在需要时)
对于跨 ≥2 个独立来源反复出现的 laws/values/constraints:
- 剥离事件细节("in the limen repo" → 去掉,除非受范围约束)。
- 将支持性原子链接为证据。
- 标记 state: ELEVATED 并按指针路由到适当的长期表面(宪法层、reliquary、registry)——原子留在注册表中;表面引用它。
5. 追加并报告
将原子追加到注册表表面(仅追加;现有原子绝不会被一次提取过程编辑——supersession 是一个新原子,带有 SUPERSEDED-BY 反向链接)。
输出来源映射与计数:按类别、按状态统计原子数,加上被有意未原子化的片段(对话填充),以便评审者审计丢弃决策。
反模式
- 原子化助手的重述,而不是操作者的话。只从来源轮次中提取。
- 编辑 RAW。逐字层是证据;所有规范化都发生在 CLEANED 中。
- 通过模式匹配最后看到的 ID 来铸造 ID。注册表计数器存在正是因为并行会话会竞争;read-claim-write。
- 省略无聊的原子。嵌入在抱怨中的约束("never do X again")是最有价值、也最常被跳过的提取。
- 从单次出现进行 elevate。一个强有力的陈述是一个 CLEANED constraint;elevation 需要反复出现。