控制层与方向层对比:OpenProse、NL Agent与AGE评测
摘要
探讨控制层与方向层的分野。OpenProse与NLAHs聚焦控制层,分别通过确定性运行时和自然语言
起点
AI代理的输出始终不可靠,如何应对?OpenProse、Natural-Language Agent Harnesses(NLAHs)与Attractor-Guided Engineering(AGE)各自从不同角度切入这一难题。

前两者的答案落在控制层:OpenProse通过确定性runtime精准维护目标;NLAHs借助自然语言文档使harness策略可审计。而AGE则追问一个更根本的问题——在控制之前,我们应当维护什么样的结构?
若方向层缺失,即便runtime再优秀、harness再清晰,也只会让整个结构漂移得更顺畅。
OpenProse从运行时抽象入手——设计合约语言与运行引擎,使AI代理能够长期维持“持续为真”的目标。
NLAHs从表示媒介切入——将agent harness策略从混乱的controller code中剥离,外化为可编辑的自然语言文档,由共享运行时IHR解释执行。
AGE从工程过程出发——设计文档-流程体系,让人类与AI协作时,系统持续向稳定结构收敛。
几个问题便能看出差异:OpenProse追问——如何让一个目标保持不变;NLAHs追问——如何让一次agent run按可审查策略执行;AGE追问——系统被推偏后,为何还能回到正确方向?
Fixed Point ≠ Attractor
OpenProse与AGE的核心抽象对应不同的数学对象,需稍作拆解。
不动点(Fixed Point):f(x) = x。系统置于该点即静止。判定条件是严格的等式。不动点可以是稳定的(邻近点向它收敛),也可以是不稳定的(邻近点远离它)。不动点不蕴含吸引域(basin of attraction)的概念。
吸引子(Attractor):一个集合(点、极限环、奇怪吸引子),使周围区域(吸引域,basin of attraction)内的所有初始状态随时间演化向其收敛。关键性质不是“搁置不动”,而是“从附近出发会被拉回”。吸引子不必是一个点,可以是流形。系统无需精确到达——只要在basin内,轨迹便正向收敛。
OpenProse的指纹比对 fingerprint == fingerprint 是典型的不动点检测:输出与之前一致即认为不动。
AGE所言“系统向稳定结构收敛”,应理解为吸引子判据:系统无需精确达到理想状态,只要控制机制持续将其拉回稳定结构附近即可。
一是状态判定——“到了没有”;二是过程判定——“方向对不对”。
Control Target ≠ Attractor:本体论区别
除收敛机制(不动点 vs 吸引子)外,还存在更深的本体论差异:控制目标 vs 吸引子。
控制目标(Control Target)
控制框架建立后,定义“控制应朝向哪里”。它假设控制框架已存在,执行者按指令行动,偏离时通过重新执行指令来纠正。控制目标是外部强加的specification,驱动执行者符合它。
数学吸引子(Attractor)
吸引子由系统自身动力学产生——周围区域内所有初始状态随时间演化向其收敛。关键性质:它是涌现的——由系统动力学定义,非外部强加指令;扰动-恢复——推离后动力学会拉回;系统无需“知晓”它——水无需知道洛伦兹吸引子,自然按它运动;它是方程定义的流形——不枚举每个正确状态,只定义约束关系。吸引子为控制提供最终因(final cause)。它在控制之前,不在控制之内。
打个比方
操作手册告诉工人如何组装零件。工人按手册操作,偏离时对照手册纠正。手册是控制目标——需要工人“知晓”并主动执行。
重力井是吸引子——无论怎样推物体,物体的动力学自然将其拉回。物体无需“知晓”重力井的存在。
OpenProse 和 NLAHs 的不变量都是控制目标
OpenProse的Responsibility(Goal/Maintains/Continuity)是外部定义的specification。运行时通过指纹比对检测偏离,偏离即重新render。这是控制目标 + 确定性执行。收敛靠runtime强制重新执行specification。
NLAHs的harness pattern(contract + stages + state / validation / recovery / stopping rules)告诉IHR应如何组织一次task run。IHR非硬编码控制器,而是用runtime policy解释NLAH,将条款落实为child-agent calls、state updates、validation gates和artifact contracts。若agent偏离,起作用的是validation / recovery / stopping rules等控制目标,而非系统动力学自然收敛。“behavior is flexible but still policy-guided”非吸引子语义,而是运行时语义约束下的弹性执行。
AGE 的 owner-doc 体系在类比意义上具备吸引子性质
- 扰动-恢复动态:AI改代码(扰动)→ test/audit发现偏离 → 修正 → 系统回到结构附近。跨会话的扰动-检测-纠正循环构成收敛动力学。
- 隐式定义的流形:
docs/architecture/非枚举每个正确状态,而是定义约束方程。满足约束的状态构成流形,局部实现多样,整体被拉向同一类结构。 - 跨会话涌现:上百次commit、几十个plan、多次审计叠加后的长期收敛——这是“系统行为”,非“某次执行”。
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均为自包含的specification——它们定义了自己的完成条件(指纹相等 / contract满足),无需外部引用“系统应向什么结构收敛”。AGE也有完成条件(CI gates、audit通过),但owner docs的不可替代作用是:当局部完成条件与长期结构方向冲突时,提供裁决依据。CI可判定某次import是否通过;owner-doc决定为何flux-react不能反向依赖renderer包。前者是控制门,后者是方向层。
这就是方向层 vs 控制层的区别:非机制不同,而是控制之上是否有独立、持久的目标结构为所有控制提供最终因。
三者的本体论位置
三者的关系非层次关系(project-level attractor ⊃ run-level attractor),而是本体论差异:
方向层(Attractor)——AGE: owner-doc 定义的长期收敛结构
↑ 为控制提供最终因
│
控制层(Control Target)——NLAHs/OpenProse: specification + runtime 执行
↑ 控制机制的实现
│
机制层(Mechanism)——IHR/reactor/CI: 具体的检测、执行、恢复
AGE文章的核心论点正是:方向层先于控制层。 未定义“朝哪里收敛”,控制机制便无统一意义。NLAHs和OpenProse均在控制层创新——NLAHs用NL提高策略可审计性和可移植性,OpenProse用确定性runtime提高执行精确性和成本效率。但它们均无法回答方向层问题:系统应向什么结构长期收敛? 一个可证伪的表述是:若移除AGE的owner-doc优先级链、日志和bug蒸馏后,系统仍能在长期重构中保持同等架构方向,则AGE的方向层主张多余。
三个体系的前提假设
OpenProse:会话终将结束,责任不应随之消失
OpenProse的核心隐喻源自React。它将AI代理的每次执行建模为一次render。
三个关键假设:
- AI的价值在于bounded render——有限、可审计的单次推理
- 持续性的来源非会话,而是world-model的持久状态和receipt链
- 成本与“意外”成正比,与时间无关——若无变化,render不执行
这是runtime-first的世界观:先定义“什么在运行时保持为真”,再考虑工程过程。
NLAHs:策略不应埋在代码里
NLAHs(Natural-Language Agent Harnesses)的核心隐喻来自可编辑的策略文档。NLAH+IHR体系将agent harness拆成四层栈。
三个关键假设:
- Harness策略可从tangled controller code中分离,用可编辑的自然语言表达
- NL携带策略,code携带机制——精确操作留在代码里,可检查的策略留在NL里
- 共享runtime(IHR)可为不同NLAH提供统一执行基底
这是representation-first的世界观:策略的表示媒介决定了可审查性、可移植性和可分析性。
AGE:先定义系统要回到哪里,再讨论怎么回去
AGE的核心隐喻来自动力系统理论。
三个关键假设:
- AI是结构上不同于人类的扰动源——高频、高振幅、无持续方向感
- Attractor必须先于harness存在——“朝哪里纠正”先于“如何纠正”
- 文档是attractor的载体,代码是attractor的瞬时投影——两者均非attractor本身
这是process-first的世界观:先定义“系统应向什么结构收敛”,再设计运行时行为。
分歧一览
| 维度 | OpenProse | NLAHs | AGE |
|---|---|---|---|
| 核心问题 | 如何让AI持续维护一个为真的目标? | 如何将harness策略外化为可审查的NL? | 如何让系统在AI高频扰动下持续向稳定结构收敛? |
| 问题域 | 单个responsibility的生命周期 | 单次task run的harness策略 | 整个仓库的演化轨迹 |
| 时间尺度 | 单次render(分钟)到持续serve(天) | 单次task run(分钟到小时) | 单次commit(分钟)到项目演化(月/年) |
| 不变量性质 | 控制目标(specification + fixed point) | 控制目标(specification + 软约束) | 工程化方向场(engineered attractor-like structure) |
| 稳定性概念 | Fixed point——指纹相等即不动 | Policy conformance——符合策略即正确 | Attractor——在basin内即收敛 |
| “对了”的含义 | 输出与期望精确匹配(二值) | 执行路径符合NLAH规定的策略 | 系统在收敛方向上(方向性) |
| 控制机制 | 确定性指纹比对(零LLM) | IHR解释NL policy(依赖LLM) | 扰动-恢复动力学(test→audit→fix) |
| 策略执行 | Runtime强制 | Runtime + NL指导 | 制度化流程诱导,而非runtime强制 |
核心抽象对比
最小原语
OpenProse的Responsibility是一个自包含的计算单元,有明确的输入边界(Requires)、输出边界(Maintains)、目标(Goal)和连续性约束(Continuity)。执行产生一个receipt——内容寻址、链式可验证的决策证明。
NLAHs的NLAH文档是一个可编辑的策略描述,定义了task run的lifecycle policy:contract、stages、roles、state rules、verification rules、recovery rules和stopping conditions。NLAH并非“告诉模型怎么回答”,而是“告诉runtime如何组织一次多步执行”。
IHR的执行语义不是将NLAH编译成代码,也不是让agent读完文档后自由发挥。它用固定runtime-policy prompt将base agent变成parent orchestrator:parent读取NLAH,将contract、stages、state rules、validation rules、recovery rules和stopping conditions落实为child-agent task packets、handoff、状态文件、artifact gates和completion checks。阶段内部仍由child agent智能执行;测试、parser、validator、benchmark adapter等精确操作由scripts/adapters承担。
AGE的Attractor不是一个对象,而是一个结构性质,由三层组成:
- 结构层:少量高层不变量(如包依赖方向
flux-core → … → flux-renderers、七种原语闭集、编译优先管道) - 载体层:承载这些不变量的可审计文档(
docs/architecture/) - 实现层:当前代码中体现这些不变量的部分
Responsibility和NLAH都是实例——你可以数出“这个项目有23个responsibility”或“这个benchmark有1个NLAH”。Attractor是一个性质——你不能数出“这个项目有5个attractor”,它更像“这个系统的吸引子是一个低维流形”。
三个体系都有将AI行动收束成可关闭单元的机制:OpenProse的render、NLAHs的task run、AGE的plan。Render的闭包由输入指纹、postcondition和receipt决定;task run的闭包由NLAH的task contract、validation rules、artifact contracts和stopping conditions决定;plan的闭包由Plan Status、Current Baseline、Goals、Non-Goals、execution/proof checklist、Closure Gates和独立closure audit决定。
Plan并非待办列表,而是一次重大变更能否关闭的证据结构:先核对当前基线,限定目标与非目标,执行中逐项证明,最后由独立审计确认scope内事项已完成或被诚实移出。它与owner-doc的关系也非每次修改文档,而是用owner-doc判断当前变更的边界和关闭条件;只有当变更改变live baseline、public contract或owner behavior时,closure才要求同步文档。
NLAH和AGE plan在机制形态上接近:都用自然语言定义contract、阶段、证据和停止条件,都反对仅靠agent自述完成。但两者关闭的对象不同:NLAH关闭的是一次run,证明执行轨迹满足harness policy;plan关闭的是一次变更,证明当前scope的结果、证据和文本状态都足以被独立审计接受。
| NLAH | AGE plan | |
|---|---|---|
| 对象 | 一次agent run的harness policy | 一次重大变更的closure contract |
| 执行结构 | IHR parent orchestrator + child agents | 实现agent / 人类按plan执行,独立reviewer或fresh subagent关闭审计 |
| 证据载体 | STATE_ROOT、artifacts、run logs | plan checklist、proof、verification output、daily log |
| 停止条件 | task contract、artifact contract、stopping conditions | Closure Gates、scope内checklist、deferred adjudication、closure audit |
| 失败后处理 | run内retry / recovery / honest stop | 不关闭、补proof、改状态、拆出non-blocking follow-up或新plan |
状态模型
| OpenProse | NLAHs | AGE | |
|---|---|---|---|
| 状态表示 | 内容寻址的world-model(形式化) | 文件系统状态(STATE_ROOT + artifacts) | 代码 + 文档 + 日志(非形式化) |
| 判定机制 | 确定性指纹函数(canonicalizer) | validation gates + artifact contracts | CI命令 + 人工审查 |
| 历史记录 | Receipt ledger(链式可验证) | Artifact文件 + 日志(单次run内) | 日志 + Bug Notes + Git history |
| 稳定性语义 | Fixed point检测(hash == hash) | Policy conformance(符合策略) | Attractor收敛(在basin内且方向正确) |
| 跨会话记忆 | Receipt chain(链式可验证) | 无(单次run内的文件状态) | 有(logs、bugs、discussions、plans) |
技术实现对比
OpenProse是严格的两阶段架构:编译期用LLM产生确定性工件(Forme DAG、canonicalizer、postcondition validators),运行期从不调用LLM,所有决策均为确定性。AGE没有“编译一次然后运行”的分离,验证持续嵌入在每次变更中——typecheck → build → lint → test → 审计 → 日志,永远在验证方向。NLAHs处于两者之间:NL policy与确定性hooks分离,但IHR运行时依赖LLM解释策略。
AGE明确识别了自验证陷阱:AI从同一上下文生成代码和所有评判材料(类型、测试、文档、完成总结),若理解偏差,所有“验证证据”会朝同一方向偏离。对策是强制生成和评判分离——闭包审计必须由新上下文执行。OpenProse通过编译期冻结确定性函数绕过同一问题。NLAHs在论文评估场景中靠benchmark autograder规避,但在生产部署中同样需要外部验证机制避免自验证陷阱。
对“一致性”的理解——三种语义
这是三个体系最深层的分歧点。
OpenProse的fixed-point一致性:每个responsibility的render产出world-model,通过canonicalizer得到指纹。指纹与上次一致,系统“一致”。判定是二值的:相等或不相等,无“差不多一致”。组合层面,每个responsibility均在其不动点上,DAG拓扑正确,则整个系统一致。自底向上,每个局部不动点组合成全局不动点。
NLAHs的policy-conformance一致性:agent的执行路径是否遵循NLAH规定的策略。Paper定义了pattern-preservation、stage-coverage、artifact-contract compliance等指标度量。非二值——NLAH允许灵活执行,但要求策略结构(阶段、角色、验证门、状态规则)被保留。Paper的RQ2发现NLAH保留了可识别的工作流结构(workflow preservation 0.63-0.67, stage coverage 0.57-0.82),但信息传递是主要弱点(handoff recall低至0.32)。
AGE的attractor一致性:非二值。一个系统可以“大部分在attractor附近,但某个子系统偏离”——这并非“不一致”,而是“在basin内但偏离中心”。判定标准是方向性的:系统是在向attractor收敛,还是远离?一次commit可通过所有测试(在basin内),但若引入架构偏移(如逆转包依赖方向),系统轨迹便不再向attractor收敛。自顶向下——即使每个模块的测试都通过(每个局部在不动点),整体仍可偏离attractor。
AGE的原始论断:“所有state-level checks都能通过,但系统整体在漂移”。nop-chaos-flux的Plan 76是一个实例:尝试移除array-editor局部状态镜像,产生11个测试失败——非因单个bug,而是因测试本身已漂移至与旧实现的时序耦合状态。每个累积的变更都通过了review和CI,但从attractor视角看,测试套件已漂离能支持结构性演化的位置。这恰是attractor概念存在的原因。
这个区分并非术语偏好:
- Fixed point方法只能检测“是否精确到达”——对“在收敛方向上但未到达”和“已偏离”的区分能力弱
- Attractor方法天然关注轨迹方向——无需系统精确到达,只需系统在收敛,而收敛本身就是可持续的
- Fixed point在离散状态空间(如world-model的指纹)中工作良好;Attractor在连续状态空间(如架构演化)中更有表达力
- 这直接解释了为何OpenProse用
hash == hash(离散等式),AGE用“CI通过 + 文档一致 + 架构边界完整”(多维收敛信号)
三个维度
对AI的定位。 OpenProse将AI建模为有界的render函数,角色是执行器。NLAHs将AI建模为被harness policy组织的执行系统:parent orchestrator按runtime policy解释NLAH,child agents执行具体任务,角色分化为编排者 + 执行者。AGE将AI建模为高频、高振幅、无持续方向感的扰动,角色是扰动源 + 执行器——同时被约束和被使用。
对文档的理解。 OpenProse:*.prose.md就是程序,若任何内容与Markdown不一致,Markdown正确。NLAHs:NLAH文档是策略——规定“怎么做”但不直接“执行”,最可审查的部分从实现细节中分离。AGE:文档是attractor的载体层,代码是attractor的瞬时投影,载体层定义它应回到哪里。
失败处理。 OpenProse:失败产生failed receipt,即时的、个体的,每个render独立记录。NLAHs:NLAH定义Recovery Rules(重试、回退、证据),失败的artifact保留供分析,但不跨run蒸馏。AGE:失败产生结构化Bug Note,反复出现的失败模式蒸馏为guardrails,按渐进自动化阶梯升级(笔记 → 检查清单 → 启发式脚本 → lint规则 → CI门控)。
渐进式自动化的实证:nop-chaos-flux 的工具链
AGE方法论有一个核心论断:能落实为确定性检查的,会逐步从轨迹数据中抽取为确定性脚本。
nop-chaos-flux的工具链为此论断提供了完整实证。实际发生的5级渐进自动化阶梯:
Tier 1: 轨迹捕获(Bug Notes + Logs)——62+ bug fix notes, 72 daily dev logs
Tier 2: 模式蒸馏(Architecture Guardrails + Audit Rules)——8 guardrails distilled from bugs, 19 dedicated audit rules
Tier 3: 编码化的审查模式(Skills/Prompts)——24 reusable audit/review prompt templates
Tier 4: 启发性嫌疑扫描器(Heuristic Scanners, exit 0)——12 focused audit scanners, informational output
Tier 5: 硬门控自动化(Hard Gates, CI-blocking, exit 1 on failure)——14 hard gate scripts, 30+ ESLint rules, dependency-cruiser, Semgrep, Husky pre-commit
实例 A:构建产物污染源码目录
Tier 1 — Bug #23:packages/*/src/中残留的.js文件在Vitest运行时暗中覆盖.ts源码,导致测试失败但根因不在测试代码。共发现102个过期文件。
Tier 2 — Guardrail #6 “No Build Artifacts In Source Directories”被蒸馏进docs/references/architecture-guardrails-from-bugs.md,附有bug证据链接。
Tier 5 — scripts/verify-no-src-artifacts.mjs成为硬门控(CI-blocking),同时scripts/clean-src-artifacts.mjs提供清理能力。pnpm lint链在ESLint之前先跑clean + verify。
从bug到CI门控,完整走完了5级。
一个思想实验:如果用 OpenProse 或 NLAHs 管理 nop-chaos-flux
若将nop-chaos-flux的架构不变量建模为OpenProse responsibilities,会得到运行时精确的变化检测,但无法回答为何这些不变量应如此组织、如何演化。若将plan执行建模为NLAHs,会得到结构化的执行流程,但无法回答100次plan后系统是否仍在收敛。两者均为控制层工具;均不覆盖方向层。
AGE的owner-doc系统处理这些问题。OpenProse的responsibility合约不覆盖方向层。NLAHs的策略文档不覆盖跨会话的轨迹演化。两者均为优秀的控制层工具,但吸引子(方向层)不在它们的问题域内。
结论
OpenProse回答的是:“给定一个需要持续为真的目标,如何用AI高效、安全、可审计地维护它?”——微观运行时问题。
NLAHs回答的是:“给定一个tangled的controller code,如何把可复用的harness策略外化为可审查、可移植、可消融分析的NL文档?”——表示媒介问题。
AGE回答的是:“给定一个在AI扰动下持续演化的系统,如何保证它不会偏离稳定结构?”——宏观过程问题。
三者守护的是不同形式化/工程化稳定性语义,甚至不同本体论层次。OpenProse信任算法(确定性函数、内容寻址、链式验证)维持不动点;NLAHs信任可审查的NL策略(IHR解释执行、模块可消融)维持策略遵循;AGE信任的不是泛泛流程,而是可审计、可累积、可对抗复核、能将失败沉淀为未来约束的过程。OpenProse和NLAHs在控制层创新;AGE在方向层贡献。
真正的分歧在于失败会在哪里累积:OpenProse将失败局部化到responsibility,NLAHs将失败局部化到task run,AGE将失败视作跨会话轨迹的信号。
在nop-chaos-flux的实践中,AGE的渐进自动化阶梯已经跑通:62+ bug notes → 8 guardrails → 14硬门控 + 12启发性扫描器 + 30+ ESLint规则。Bug #23(构建产物污染)完整走完了从bug note到CI-blocking硬门控的5级蒸馏。72个日志文件记录了系统轨迹,46个执行计划是局部收敛机制,58个架构文档的优先级链是attractor的载体层。
OpenProse可将AGE已明确的局部不变量变成精确的变化检测。NLAHs可将harness变成可消融对象。两者均为优秀的控制层工具;但吸引子(方向层)不在它们的问题域内。它们可以作为控制层执行器,但不能替代方向层裁判。
可以这样说:若一个项目连续通过CI、review和harness contract,却在50次AI-assisted change后出现包边界逆转、测试语义耦合和owner-doc冲突,那么OpenProse/NLAHs的控制层成功了,而AGE要处理的问题才刚刚显现。这就是三者的分界线:非谁更全面,而是谁能看见长期漂移。
控制层能告诉AI如何纠错;方向层决定了什么才叫错。
来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。