起点
AI智能体的输出总是不可靠,该如何应对?这个问题,OpenProse、Natural-Language Agent Harnesses(NLAHS)与Attractor-Guided Engineering(AGE)都在寻找答案,但它们切入的角度截然不同。

前两者的答案聚焦于控制层:OpenProse借助确定性运行时确保目标被精确维护;NLAHS则利用自然语言文档使捆绑策略变得可审查。而AGE提出了一个更为根本的问题——在进行控制之前,我们究竟应该维护何种结构?
如果方向层不存在,那么再好的运行时和再清晰的捆绑,也不过是让整个结构更加顺滑地偏离正确轨道而已。
OpenProse从运行时抽象出发——设计一套合约语言和运行引擎,使AI智能体能够长期维护“持续为真”的目标。
NLAHs从表示媒介入手——将智能体捆绑策略从混乱的控制代码中分离出来,外化为可编辑的自然语言文档,再由共享的IHR运行时解释执行。
AGE则从工程过程切入——设计一套文档与流程体系,让人类与AI协作时,系统能够持续向稳定结构收敛。
通过几个问题就能看出它们的差异:OpenProse关注的是——如何确保一个目标始终保持不变;NLAHs关心的是——如何让一次智能体运行按照可审查的策略执行;AGE则追问——系统被推离既定轨道后,为何还能重新回到正确的方向?
不动点 ≠ 吸引子
OpenProse与AGE的核心抽象,对应着两种不同的数学对象,这里需要稍作深入解析。
不动点(Fixed Point):即f(x) = x。系统置于该点上便不再移动。其判定条件是严格的等式。不动点可能是稳定的(附近点向其收敛),也可能是不稳定的(附近点远离它)。不动点本身不包含吸引域(basin of attraction)的概念。
吸引子(Attractor):指一个集合(可以是点、极限环或奇怪吸引子),使得周围某个区域(即吸引域,basin of attraction)内的所有初始状态都会随时间演化而向它收敛。其关键性质并非“放上去就不动”,而是“从附近出发会被拉回来”。吸引子不必是一个点,它可以是流形。系统无需精确抵达该点——只要位于吸引域内,轨迹便会持续收敛。
OpenProse的指纹比对fingerprint == fingerprint是典型的不动点检测:输出是否与之前一致?一致则保持不变。
AGE所提出的“系统向稳定结构收敛”,更适合用吸引子的判断标准来理解:系统无需精确达到某个理想状态,只要控制机制能持续将其拉回稳定结构附近即可。
一个是状态判定——“是否到达”;一个是过程判定——“方向是否正确”。
控制目标 ≠ 吸引子:本体论上的关键区别
除了收敛机制(不动点 vs 吸引子)的不同,还存在一个更深层次的本体论差异:控制目标与吸引子的区别。
控制目标(Control Target)
在控制框架已经建立之后,用于定义“控制应当朝向何方”。它假设:控制框架本身已经存在,执行者会按照指令行动,偏离时通过重新执行指令来纠正。控制目标是外部强加的规范,驱使执行者去符合它。
数学吸引子(Attractor)
吸引子由系统自身的动力学产生——周围区域的所有初始状态都会随时间演化向它收敛。其关键特性在于:它是涌现的——由系统动力学定义,而非外部强加的指令;具备扰动-恢复能力——被推离后,系统动力学能将其拉回;系统无需“知道”它的存在——水无需理解洛伦兹吸引子,便会按其运动;它是由方程定义的流形——不枚举每个正确状态,只定义约束关系。吸引子为控制提供了最终因(final cause)。它在控制之前,不在控制之内。
打个比方
操作手册指导工人如何组装零件。工人依照手册操作,出现偏离时对照手册纠正。手册即为控制目标——它需要工人“知道”其内容并主动执行。
重力井则是吸引子——无论你如何推动物体,物体的动力学特性会自然地将它拉回。物体无需“知道”重力井的存在。
OpenProse与NLAHs的不变量都属于控制目标
OpenProse的Responsibility(Goal/Maintains/Continuity)是外部定义的规范。运行时通过指纹比对检测偏离,一旦偏离便重新渲染。这就是控制目标加确定性执行,收敛依赖于运行时强制重新执行规范。
NLAHs的捆绑模式(contract + stages + state / validation / recovery / stopping rules)告知IHR应该如何组织一次任务运行。IHR并非硬编码控制器,而是利用运行时策略来解释NLAH,将条款落实为子智能体调用、状态更新、验证关卡和工件合约。若智能体偏离,起作用的是验证/恢复/停止规则等控制目标,而不是系统动力学的自然收敛。“beha vior is flexible but still policy-guided”并非吸引子语义,而是运行时语义约束下的弹性执行。
AGE的所有者文档体系在类比意义上具备吸引子性质
- 扰动-恢复动态:AI修改代码(扰动)→ 测试/审计发现偏离 → 修正 → 系统回到结构附近。跨会话的扰动-检测-纠正循环构成了收敛动力学。
- 隐式定义的流形:
docs/architecture/并非枚举每个正确状态,而是定义约束方程。满足约束的状态构成流形,局部实现多样化,整体被拉向同一类结构。 - 跨会话涌现:上百次提交、数十个计划、多次审计叠加后的长期收敛——这是“系统行为”,而非“某次执行”。
AGE的恢复同样依赖文档作为真值源。区别不仅在于粒度和时间尺度,更在于约束对象的不同:控制层的指令约束一次执行如何完成;方向层则约束未来所有执行结果所允许落入的结构区域。
机制层的结构性平行
三个体系的机制层存在结构性平行:
| OpenProse | NLAHs | AGE | |
|---|---|---|---|
| 真值源 | Responsibility (Goal/Maintains) | NLAH (contract + run rules) | Owner docs (docs/architecture/) |
| 解释者 | OpenProse reactor | IHR runtime | AI agent 读文档 |
| 执行单元 | render | task run | plan(重大变更时) |
| 检测 | 指纹比对 | validation gates | CI + audit |
| 关闭条件 | postcondition + receipt | completion gates + artifacts | Closure Gates + 独立 closure audit |
| 纠正 | 重新 render | retry / recovery / honest stop | 修正代码,重读文档 |
机制槽位相似,但语义不同。该表仅说明三者都是控制系统,并不表示它们控制的是同一类对象。OpenProse与NLAHs使一次执行更可控;AGE则判断这些执行累积后是否仍指向同一个长期结构。
差异不在机制层,而在于机制层之上是否存在方向层。OpenProse的Responsibility与NLAHs的NLAH都是自包含的规范——它们定义了自己的完成条件(指纹相等/合约满足),无需外部引用“系统应该向什么结构收敛”。AGE也有完成条件(CI关卡、审计通过),但所有者文档不可替代的作用在于:当局部完成条件与长期结构方向冲突时,提供裁决依据。CI可以判定某次导入是否通过;所有者文档则决定为什么flux-react不能反向依赖渲染包。前者是控制门,后者是方向层。
这就是方向层与控制层的区别:并非机制不同,而是控制之上是否有一个独立的、持久的目标结构为所有控制提供最终因。
三者的本体论位置
三者的关系并非层次关系(项目级吸引子 ⊃ 运行级吸引子),而是本体论上的差异:
方向层(Attractor)——AGE: owner-doc 定义的长期收敛结构
↑ 为控制提供最终因
│
控制层(Control Target)——NLAHs/OpenProse: specification + runtime 执行
↑ 控制机制的实现
│
机制层(Mechanism)——IHR/reactor/CI: 具体的检测、执行、恢复
AGE文章的核心论点正是:方向层先于控制层。 没有定义“朝哪里收敛”,控制机制就没有统一意义。NLAHs与OpenProse都在控制层进行创新——NLAHs用自然语言提高了策略的可审计性和可移植性,OpenProse用确定性运行时提升了执行的精确性和成本效率。但它们都无法回答方向层的问题:系统应该向什么结构长期收敛? 一个可证伪的表述是:如果移除AGE的所有者文档优先级链、日志和bug蒸馏后,系统仍能在长期重构中保持同等架构方向,那么AGE的方向层主张就是多余的。
三个体系的前提假设
OpenProse:会话终将结束,责任不应随之消失
OpenProse的核心隐喻源自React。它将AI智能体的每一次执行建模为一次渲染。
三个关键假设:
- AI的价值在于有限渲染——有限、可审计的单次推理
- 持续性的来源不是会话,而是世界模型的持久状态和收据链
- 成本与“意外”成正比,与时间无关——如果没有变化,渲染不执行
这是运行时优先的世界观:先定义好“什么在运行时保持为真”,再考虑工程过程。
NLAHs:策略不应埋在代码里
NLAHs的核心隐喻来自可编辑的策略文档。NLAH+IHR体系将智能体捆绑拆分为四层栈。
三个关键假设:
- 捆绑策略可以从混乱的控制代码中分离出来,用可编辑的自然语言表达
- 自然语言携带策略,代码携带机制——精确操作留在代码里,可检查的策略留在自然语言里
- 共享运行时可以为不同的NLAH提供统一的执行基底
这是表示媒介优先的世界观:策略的表示媒介决定了它的可审查性、可移植性和可分析性。
AGE:先定义系统要回到哪里,再讨论怎么回去
AGE的核心隐喻来自动力系统理论。
三个关键假设:
- AI是结构上不同于人类的扰动源——高频、高振幅、无持续方向感
- 吸引子必须先于捆绑存在——“朝哪里纠正”先于“如何纠正”
- 文档是吸引子的载体,代码是吸引子的瞬时投影——两者都不是吸引子本身
这是过程优先的世界观:先定义好“系统应该向什么结构收敛”,再设计运行时的行为。
分歧一览
| 维度 | OpenProse | NLAHs | AGE |
|---|---|---|---|
| 核心问题 | 如何让AI持续维护一个为真的目标? | 如何将捆绑策略外化为可审查的自然语言? | 如何让系统在AI高频扰动下持续向稳定结构收敛? |
| 问题域 | 单个责任的生命周期 | 单次任务运行的捆绑策略 | 整个仓库的演化轨迹 |
| 时间尺度 | 单次渲染(分钟)到持续服务(天) | 单次任务运行(分钟到小时) | 单次提交(分钟)到项目演化(月/年) |
| 不变量性质 | 控制目标(规范 + 不动点) | 控制目标(规范 + 软约束) | 工程化方向场(工程化吸引子样结构) |
| 稳定性概念 | 不动点——指纹相等即不动 | 策略遵循——符合策略即正确 | 吸引子——在吸引域内即收敛 |
| “对了”的含义 | 输出与期望精确匹配(二值) | 执行路径符合NLAH规定的策略 | 系统在收敛方向上(方向性) |
| 控制机制 | 确定性指纹比对(零大语言模型) | IHR解释自然语言策略(依赖大语言模型) | 扰动-恢复动力学(测试→审计→修复) |
| 策略执行 | 运行时强制 | 运行时 + 自然语言指导 | 制度化流程诱导,而非运行时强制 |
核心抽象对比
最小原语
OpenProse的Responsibility是一个自包含的计算单元,具有明确的输入边界(Requires)、输出边界(Maintains)、目标(Goal)和连续性约束(Continuity)。执行产生一个收据——内容寻址、链式可验证的决策证明。
NLAHs的NLAH文档是一个可编辑的策略描述,定义了任务运行的生命周期策略:合约、阶段、角色、状态规则、验证规则、恢复规则和停止条件。NLAH不是“告诉模型怎么回答”,而是“告诉运行时怎么组织一次多步执行”。
IHR的执行语义不是将NLAH编译成代码,也不是让一个智能体读完后自由发挥。它用固定的运行时策略提示将基础智能体变为父级编排者:父级读取NLAH,将合约、阶段、状态规则、验证规则、恢复规则和停止条件落实为子智能体任务包、交接、状态文件、工件关卡和完成检查。阶段内部仍由子智能体智能执行;测试、解析器、验证器、基准适配器这类精确操作由脚本/适配器承担。
AGE的吸引子不是一个对象,而是一种结构性质,由三层组成:
- 结构层:少量高层不变量(如包依赖方向
flux-core → … → flux-renderers、七种原语闭集、编译优先管道) - 载体层:承载这些不变量的可审计文档(
docs/architecture/) - 实现层:当前代码中体现这些不变量的部分
Responsibility和NLAH都是实例——你可以数出“这个项目有23个responsibility”或“这个基准有1个NLAH”。吸引子是一个性质——你不能数出“这个项目有5个吸引子”,它更像是“这个系统的吸引子是一个低维流形”。
三个体系都有将AI行动收束成可关闭单元的机制:OpenProse的渲染、NLAHs的任务运行、AGE的计划。渲染的闭包由输入指纹、后置条件和收据决定;任务运行的闭包由NLAH的任务合约、验证规则、工件合约和停止条件决定;计划的闭包由Plan Status、Current Baseline、Goals、Non-Goals、执行/验证清单、Closure Gates和独立闭包审计决定。
计划并非待办列表,而是一次重大变更能否关闭的证据结构:先核对当前基线,限定目标与非目标,执行中逐项证明,最后由独立审计确认范围内的事项已经完成或被诚实地移出。它与所有者文档的关系也不是每次修改文档,而是用所有者文档判断当前变更的边界和关闭条件;只有当变更改变了实时基线、公共合约或所有者行为时,闭包才要求同步文档。
NLAH与AGE计划在机制形态上接近:都使用自然语言定义合约、阶段、证据和停止条件,都反对只靠智能体自述来完成。但两者关闭的对象不同:NLAH关闭的是一次运行,证明执行轨迹满足捆绑策略;计划关闭的是一次变更,证明当前范围的结果、证据和文本状态都足以被独立审计接受。
| NLAH | AGE计划 | |
|---|---|---|
| 对象 | 一次智能体运行的捆绑策略 | 一次重大变更的闭包合约 |
| 执行结构 | IHR父级编排者 + 子智能体 | 实现智能体/人类按计划执行,独立审查者或全新子智能体进行闭包审计 |
| 证据载体 | STATE_ROOT、工件、运行日志 | 计划清单、证明、验证输出、每日日志 |
| 停止条件 | 任务合约、工件合约、停止条件 | 闭包关卡、范围内清单、延期裁决、闭包审计 |
| 失败后处理 | 运行内重试/恢复/诚实停止 | 不关闭、补充证明、更改状态、拆分出非阻塞后续任务或新计划 |
状态模型
| OpenProse | NLAHs | AGE | |
|---|---|---|---|
| 状态表示 | 内容寻址的世界模型(形式化) | 文件系统状态(STATE_ROOT + 工件) | 代码 + 文档 + 日志(非形式化) |
| 判定机制 | 确定性指纹函数(规范器) | 验证关卡 + 工件合约 | CI命令 + 人工审查 |
| 历史记录 | 收据账本(链式可验证) | 工件文件 + 日志(单次运行内) | 日志 + Bug笔记 + Git历史 |
| 稳定性语义 | 不动点检测(hash == hash) | 策略遵循(符合策略) | 吸引子收敛(在吸引域内且方向正确) |
| 跨会话记忆 | 收据链(链式可验证) | 无(单次运行内的文件状态) | 有(日志、bug、讨论、计划) |
技术实现对比
OpenProse是严格的两阶段架构:编译期使用大语言模型生成确定性工件(Forme DAG、规范器、后置条件验证器),运行期从不调用大语言模型,所有决策都是确定性的。AGE没有“编译一次然后运行”的分离,验证持续嵌入在每次变更中——类型检查 → 构建 → 代码检查 → 测试 → 审计 → 日志,永远在验证方向。NLAHs处于两者之间:自然语言策略与确定性钩子分离,但IHR运行时依赖大语言模型解释策略。
AGE明确识别了自验证陷阱:AI从同一上下文生成代码和所有评判材料(类型、测试、文档、完成总结),如果理解有偏差,所有“验证证据”会朝同一个方向偏离。对策是强制生成和评判分离——闭包审计必须由新上下文执行。OpenProse通过编译期冻结确定性函数来绕过同一个问题。NLAHs在论文的评估场景中依靠基准自动评分器规避,但在生产部署中同样需要外部验证机制来避免自验证陷阱。
对“一致性”的理解——三种语义
这是三个体系最深层的分歧点。
OpenProse的不动点一致性:每个责任的渲染产出世界模型,通过规范器得到指纹。指纹与上次一致,系统即为“一致”。判定是二值的:相等或不相等,没有“差不多一致”。组合层面,每个责任都在其自身的不动点上,DAG拓扑正确,则整个系统一致。自底向上,每个局部不动点组合成全局不动点。
NLAHs的策略遵循一致性:智能体的执行路径是否遵循NLAH规定的策略。论文定义了模式保持、阶段覆盖、工件合约合规等指标来衡量。并非二值——NLAH允许灵活执行,但要求策略结构(阶段、角色、验证门、状态规则)被保留。论文的RQ2发现NLAH保留了可识别的工作流结构(工作流保持0.63-0.67,阶段覆盖0.57-0.82),但信息传递是主要弱点(交接召回率低至0.32)。
AGE的吸引子一致性:并非二值。一个系统可以“大部分在吸引子附近,但某个子系统偏离了”——这不是“不一致”,而是“在吸引域内但偏离中心”。判定标准是方向性的:系统是在向吸引子收敛,还是在远离?一次提交可以通过所有测试(在吸引域内),但如果引入了架构偏移(比如逆转包依赖方向),系统的轨迹就不再向吸引子收敛了。自顶向下——即使每个模块的测试都通过(每个局部都在不动点),整体仍然可以偏离吸引子。
AGE的原始论断:“所有状态级别的检查都能通过,但系统整体在漂移”。nop-chaos-flux的Plan 76是一个实例:移除array-editor局部状态镜像的尝试产生了11个测试失败——不是因为单个bug,而是因为测试本身已经漂移到了与旧实现的时序耦合状态。每个累积的变更都通过了审查和CI,但从吸引子视角看,测试套件已经漂离了能支持结构性演化的位置。这恰恰是吸引子概念存在的原因。
这个区分不是术语偏好:
- 不动点方法只能检测“是否精确到达”——对“在收敛方向上但还没到达”和“已经偏离”的区分能力很弱
- 吸引子方法天然关注轨迹方向——不需要系统精确到达,只需要系统在收敛,而收敛本身就是可持续的
- 不动点在离散状态空间(如世界模型的指纹)中工作良好;吸引子在连续状态空间(如架构的演化)中更有表达力
- 这直接解释了为什么OpenProse用
hash == hash(离散等式),AGE用“CI通过 + 文档一致 + 架构边界完整”(多维收敛信号)
三个维度
对AI的定位。 OpenProse将AI建模为有界的渲染函数,角色是执行器。NLAHs将AI建模为被捆绑策略组织的执行系统:父级编排者按运行时策略解释NLAH,子智能体执行具体任务,角色分化为编排者 + 执行者。AGE将AI建模为高频、高振幅、无持续方向感的扰动,角色是扰动源 + 执行器——同时被约束和被使用。
对文档的理解。 OpenProse:*.prose.md就是程序,如果任何内容与Markdown不一致,Markdown是对的。NLAHs:NLAH文档是策略——规定“怎么做”但不直接“执行”,最可审查的部分从实现细节中分离出来。AGE:文档是吸引子的载体层,代码是吸引子的瞬时投影,载体层定义了它应该回到哪里。
失败处理。 OpenProse:失败产生failed收据,即时的、个体的,每个渲染独立记录。NLAHs:NLAH定义恢复规则(重试、回退、证据),失败的工件保留供分析,但不跨运行蒸馏。AGE:失败产生结构化Bug笔记,反复出现的失败模式被蒸馏为护栏,按渐进自动化阶梯升级(笔记 → 检查清单 → 启发式脚本 → 代码检查规则 → CI门控)。
渐进式自动化的实证:nop-chaos-flux的工具链
AGE方法论有一个核心论断:能落实为确定性检查的,会逐步从轨迹数据中抽取为确定性脚本。
nop-chaos-flux的工具链为这条论断提供了完整的实证。实际发生的5级渐进自动化阶梯:
第1级: 轨迹捕获(Bug笔记 + 日志)——62+ bug修复笔记,72条每日开发日志
第2级: 模式蒸馏(架构护栏 + 审计规则)——从bug中蒸馏出8条护栏,19条专用审计规则
第3级: 编码化的审查模式(技能/提示)——24个可复用的审计/审查提示模板
第4级: 启发性嫌疑扫描器(启发式扫描器,exit 0)——12个聚焦的审计扫描器,信息性输出
第5级: 硬门控自动化(硬门控,CI阻断,失败时exit 1)——14个硬门控脚本,30+条ESLint规则,dependency-cruiser,Semgrep,Husky预提交
实例A:构建产物污染源码目录
第1级 — Bug #23:packages/*/src/中残留的.js文件在Vitest运行时暗中覆盖了.ts源码,导致测试失败但根因不在测试代码。共发现102个过期文件。
第2级 — 护栏 #6 “No Build Artifacts In Source Directories”被蒸馏进docs/references/architecture-guardrails-from-bugs.md,附有bug证据链接。
第5级 — scripts/verify-no-src-artifacts.mjs成为硬门控(CI阻断),同时scripts/clean-src-artifacts.mjs提供清理能力。pnpm lint链在ESLint之前先运行清理加验证。
从bug到CI门控,完整走完了5级。
一个思想实验:如果用OpenProse或NLAHs管理nop-chaos-flux
如果把nop-chaos-flux的架构不变量建模为OpenProse responsibilities,会得到运行时精确的变化检测,但无法回答为什么这些不变量应该这样组织、如何演化。如果把计划执行建模为NLAHs,会得到结构化的执行流程,但无法回答100次计划之后系统是否仍在收敛。两者都是控制层工具;都不覆盖方向层。
AGE的所有者文档系统处理这些问题。OpenProse的responsibility合约不覆盖方向层。NLAHs的策略文档不覆盖跨会话的轨迹演化。两者都是优秀的控制层工具,但吸引子(方向层)不在它们的问题域内。
结论
OpenProse回答的是:“给定一个需要持续为真的目标,如何用AI高效、安全、可审计地维护它?”——微观运行时问题。
NLAHs回答的是:“给定一个混乱的控制代码,如何把可复用的捆绑策略外化为可审查、可移植、可消融分析的自然语言文档?”——表示媒介问题。
AGE回答的是:“给定一个在AI扰动下持续演化的系统,如何保证它不会偏离稳定结构?”——宏观过程问题。
三者守护的是不同形式化/工程化稳定性语义,甚至不同本体论层次。OpenProse信任算法(确定性函数、内容寻址、链式验证)来维持不动点;NLAHs信任可审查的自然语言策略(IHR解释执行、模块可消融)来维持策略遵循;AGE信任的不是泛泛流程,而是可审计、可累积、可对抗复核、能把失败沉淀为未来约束的过程。OpenProse与NLAHs在控制层进行创新;AGE在方向层做出贡献。
真正的分歧在于失败会在哪里累积:OpenProse将失败局部化到responsibility,NLAHs将失败局部化到任务运行,AGE则将失败视为跨会话轨迹的信号。
在nop-chaos-flux的实践中,AGE的渐进自动化阶梯已经跑通:62+条bug笔记 → 8条护栏 → 14个硬门控 + 12个启发性扫描器 + 30+条ESLint规则。Bug #23(构建产物污染)完整走完了从bug笔记到CI阻断硬门控的5级蒸馏。72个日志文件记录了系统的轨迹,46个执行计划是局部收敛机制,58个架构文档的优先级链是吸引子的载体层。
OpenProse可以把AGE已经明确的局部不变量变成精确的变化检测。NLAHs可以把捆绑变成可消融对象。两者都是优秀的控制层工具;但吸引子(方向层)不在它们的问题域内。它们可以成为控制层执行器,不能替代方向层裁判。
可以这么说:如果一个项目连续通过CI、审查和捆绑合约,却在50次AI辅助更改后出现包边界逆转、测试语义耦合和所有者文档冲突,那么OpenProse/NLAHs的控制层成功了,而AGE要处理的问题才刚刚显现。这就是三者的分界线:不是谁更全面,而是谁能看见长期漂移。
控制层能告诉AI怎么纠错;方向层决定了什么才叫错。
