状态:架构草案(v0.3 方向)。这是工程布局文档,配套两份姊妹文档:
morphogenetic-aspect-agent.md(形式纲要)与morphogenetic-aspect-agent-paper.tex(论文草稿)。 它在v0.2-system-design.md的工程骨架之上,提出从"建议式运行时"到"闭环连接组"的重设。
现状(v0.2):OpenCOAT 是建议式 + 协作式运行时——weaver 产出 ConcernInjection 负载,外部宿主可能采纳;DCN 靠启发式(decay/merge)演化;效应器是宿主的,运行时拿不到干净的结果信号。由此带来三个已知弱点:协作式(只有宿主调 guard 才生效)、fail-open、只有 OpenClaw 真接。
2026-05 进展 (v0.3 (i) 试点,仍协作式): HyperdustLabs OpenClaw fork 已 emit queue_before_enqueue / queue_after_enqueue; OpenCOAT bridge queue_guard 可在 daemon RPC 路径上 block / rewrite 入队 prompt。这不是 §10 的 in-proc 权威 ReflexMonitor,仍是 fail-open 协作 guard。见 joinpoint model §4.1 / §5.7 / Appendix E.
v0.3 只动两处,互为补充的两半:
- 公理 A(闭环):自建效应器 → 产出确定的结果流
r_t(reflex 的 allow/deny/repair、verifier 判决);可塑性律消费r_t学突触。缺效应器 → 拿不到干净r_t;缺可塑性律 → 效应器结果只是日志,不回流成权重。两半合起来,才是"会随环境学习适应的皮层"第一次有了确定、可度量的实现路径。 - 公理 B(一张网的细胞类型;(i)→(ii) 是发育):三个"平面"不再分离,而是同一连接组里的细胞类型。深度=1 即架构 (i);加节点、aspect-of-aspect 加深 → (ii)。同一条可塑性律全程不变。
flowchart TD
JP[Joinpoint<br/>context = query] --> RT[Synapse routing<br/>activation scores]
RT --> NEU[Aspect-LLM neurons<br/>propose · excitatory]
NEU --> REF[Reflex aspects<br/>allow / deny / rewrite]
REF --> EFF[Effector kernel<br/>→ r_t deterministic stream]
EFF --> CR[Credit field κ<br/>elig × resp × advantage]
CR --> PL[Plasticity engine<br/>ΔF-gated rewrites]
PL -->|rewrite connectome| RT
subgraph FAST[fast: inference + effector]
JP
RT
NEU
REF
EFF
end
subgraph SLOW[slow: plasticity]
CR
PL
end
两半的接缝在 EFF → CR:效应器内核产出 r_t,信用场把它分配到突触,可塑性引擎据此改写连接组。
签名用 Python 风格类型草图(仓库即 Python);非最终 API。
class Aspect: # 节点
id: str
tau: str # 符号身份(可读、可编辑)
neuron_type: Literal["excitatory", "inhibitory"]
params: dict # 增益 g、可学路由参数等
buffer: Deque[Sample] # (phi, activation, r) 滑窗
class Synapse: # 有向边
src: str; dst: str
w: float # 可学权重
e: float # 资格迹
pointcut: Pointcut # 内容条件化路由谓词
class Connectome: # = DCN 图(复用 DCNStore)
aspects: dict[str, Aspect]
synapses: list[Synapse]
reflex_core: frozenset[str] # 保守核(不可随机改写)class ExcitatoryNeuron(Aspect):
def propose(self, ctx: Context) -> Candidate:
# ctx = 路由进来的上下文 + 织入的 advice
# 返回候选动作/文本(可为一次 LLM 调用)
...class InhibitoryReflex(Aspect):
def mediate(self, action: Action, state: State) -> Decision:
# Decision = Allow | Deny(reason) | Rewrite(action')
# 确定性谓词;安全关键 → fail-closed
...class Router:
def route(self, jp: Joinpoint) -> list[tuple[Aspect, float]]:
# 返回 (aspect, activation_score) —— 复用 ConcernVector.activation_score
...class EffectorKernel:
def run_turn(self, jp: Joinpoint) -> Outcome:
# 1) route → 2) excitatory.propose → 3) inhibitory.mediate(边界闸门)
# 4) verifier 校验 → 5) propose-check-repair 回合
# 发射:动作结果 + 确定性 r_t + JSONL 可重放日志
...class CreditField:
def attribute(self, outcome: Outcome) -> None:
# κ(a) += (r - b) · e_a · rho_a ; κ(s) += (r - b) · e_s
# 守恒:Σ_a κ_a = r - b
class PlasticityEngine:
def step(self, scale: Literal["warm", "cold"]) -> list[Rewrite]:
# 以速率 min(1, exp(-ΔF/T)) 接受改写
# 原语:connect / prune / reweight / split / lift / mergeJoinpoint事件携带上下文φ(= query)。Router用 pointcut 匹配候选,给出activation_score(突触发放)。- 兴奋性 aspect-LLM
propose候选(weaver 仍负责为其组合 prompt 注入)。 - 抑制性反射在节点间与效应边界
mediate(allow/deny/rewrite)。 EffectorKernel跑 verify → repair,执行动作面(工具/内存写/消息),发射r_t+ 日志。CreditField.attribute把r_t分到突触/节点(资格迹 × 责任 × 优势,守恒)。PlasticityEngine(温:reweight/connect/prune;冷:split/lift/merge + tier-2 校准)改写连接组。- 下一回合用更新后的图。
| 尺度 | 跑什么 | 现有落点 |
|---|---|---|
| 快(每轮) | 推断 + 资格迹累积 | loops/event_loop |
| 温(近线) | reweight / connect / prune | daemon 工作线程 |
| 冷(心跳) | split / lift / merge + tier-2 校准 + 稳态归一 | daemon tick() / heartbeat(M6) |
M6 的 DecayWorker/MergeArchiver 不丢弃,降级为可塑性的稳态/剪枝那一半;缺的增强(LTP)+ 资格迹由可塑性引擎补上。
| 处置 | 组件 |
|---|---|
| 复用 | DCNStore、JSONL replay(=可塑性可重放确定性基础设施)、ConcernVector.activation_score、pointcut 策略、weaving/weaver(为兴奋神经元组合注入) |
| 改 | Concern → 加 neuron_type 与可学参数;advice/TOOL_GUARD + 宿主 tool_guard.py → 提升为效应器内权威反射(不再"宿主可能尊重");meta/* + heartbeat worker → 并入可塑性引擎 |
| 新增 | 效应器内核(propose-check-repair + 动作面 + verifier + r_t 发射);信用场 κ;ΔF 改写引擎(split/lift/connect/prune/reweight/merge) |
关键收益:自建效应器把 BLOCK 从"宿主可能尊重"变为"按构造拦得住",一举解决协作式与 fail-open。
- (i) 现可建:1 个兴奋 aspect-LLM + 一圈抑制反射 + 可学路由。= 现状收回效应器 + 装闭环。
- 加宽:多兴奋神经元,按 pointcut 分流(MoE 式条件计算)。
- 加深:
lift(aspect-of-aspect)长出高阶神经元,神经元彼此路由 → (ii) 连接组。 - 全程同一条可塑性律,从"门控一个 LLM"扩展到"给整张 LLM-神经元网布线"。
- 保守核反射 aspect(brainstem)不可被随机改写。
- 安全关键动作 fail-closed(与 v0.2 现状的 fail-open 相反)。
- tier-1 可塑性可重放确定(给定日志 + 常数,结构轨迹逐字节复现)。
- 细化(split)/ 恒等初始化(lift)保证改写在区域外不改变行为。
- 软 advice 因果不透明 ⇒ 软神经元信用是统计的(论文 §9 那条主线)。把软织入尽量换成硬反射,既提升可靠性又让信用变干净——同一个动作。
- 两道荷载关:信用清洗的干净度;特征
φ的获取/生长(后者是元结构学习)。 - 多节点跨图信用分配在长视野下噪声大;tier-2 反事实校准昂贵。
OpenClaw 是改造成效应器内核(§3.5)最务实的底座:它已提供真在驱动 LLM 的回合,且 hook-bindings.ts 的 HookKind 已天然枚举出反射闸门 + 注入点 + 结果流。落 (i) 不是从零造 agent,而是把 OpenClaw 现有的协作式 hook 提升为权威、in-proc、安全关键 fail-closed,再补 verify→repair 与 r_t 发射。
本节描述目标态。 当前实现分期见 §10.5; 连线层 hook 表见 joinpoint model §4.1.
| 步骤 | OpenClaw hook | 改造 |
|---|---|---|
| 1. 权威反射 | before_tool_call / message_sending / subagent_spawning / queue_before_enqueue |
把 tool_guard.py 的 ToolGuardOutcome 从"建议"变"裁决";in-proc(不走 daemon RPC);安全关键 fail-closed |
| 2. verify→repair | before_agent_reply |
回复前跑 OpenCOAT verifier;失败则约束并重提示一次 |
3. r_t 发射 |
after_tool_call / llm_output / agent_end |
把 decision + 判决汇成结构化 r_t,写 JSONL replay |
| 4. 可塑性消费 | daemon tick() |
daemon 只跑 PlasticityEngine 的 reweight 子集,消费 r_t |
* Step 1 中 queue_before_enqueue 已在 fork 落地,但 bridge 仍走 daemon RPC 协作 guard (非 in-proc TCB). tool / message / subagent 同理.
in-proc 红利:before_message_write / tool_result_persist 这些之前因"同步热路径不能 await daemon RPC"被 SKIPPED_HOOKS 跳过的 hook,在监视器进程内同步运行后,可重新纳入守护(内存写/工具结果落盘也能 gate). 今天仍 skip — 待 ReflexMonitor 落地.
@dataclass(frozen=True)
class Action: # 类型化、结构化的待执行动作
kind: Literal["tool_call", "message_send", "subagent_spawn",
"queue_enqueue", "memory_write"]
name: str
args: Mapping[str, Any]
resource_scope: frozenset[str] # 触及的资源/能力
risk_tags: frozenset[str] # {"external_write","irreversible","spend",...}
raw: Any # 宿主原生句柄(供 rewrite 透传)
@dataclass(frozen=True)
class State: # 只读上下文快照(谓词可读)
session_id: str; turn_id: str
features: Mapping[str, Any]
class Decision: ... # 和类型:Allow | Deny | Rewrite
@dataclass(frozen=True)
class Allow(Decision): ...
@dataclass(frozen=True)
class Deny(Decision): reason: str; policy_id: str
@dataclass(frozen=True)
class Rewrite(Decision): action: Action; reason: str; policy_id: str
class ReflexPolicy(Protocol): # = 一个抑制性 aspect 的确定性规则
id: str
criticality: Literal["safety_critical", "advisory"]
def applies(self, a: Action, s: State) -> bool: ... # 廉价谓词
def decide(self, a: Action, s: State) -> Decision: ... # 确定性,无 LLM/IO
class ReflexMonitor: # 小可信核(TCB)
def __init__(self, policies: Sequence[ReflexPolicy],
*, conserved_core: frozenset[str]): ...
def mediate(self, a: Action, s: State) -> tuple[Decision, DecisionRecord]:
# 完全中介:每个被守护边界都经此。纯函数 → 可重放。
...- 完全中介(complete mediation):每个被守护边界必须调
mediate,宿主不得有绕过它执行守护动作的路径。可用插桩检验("是否每次工具调用都过了 mediate")。 - 决策格:
Deny > Rewrite > Allow;任一 safety_critical 的Deny取胜(最严);多条Rewrite按policy_id定序合成,冲突则降为Deny。定序保证可复现。 - fail-closed(反转现状):safety_critical 策略出错/超预算/监视器不可用 →
Deny;advisory 出错 → 跳过该策略(仅 advisory 允许 fail-open)。这正是把现状 bridge 的return {}(全线放行)反过来。 - 确定性:
mediate是(policies, action, state)的纯函数——无 LLM、无 I/O、无 wall-clock 分支 → 逐回合可重放。 - in-proc 预算:每次
mediate有硬 CPU 预算(谓词 O(policies),无网络);超预算按出错处理(safety_critical → Deny)。 - 审计/信用:每次
mediate发DecisionRecord(turn、action 摘要、decision、policy_id、reason、criticality)进r_t流与 JSONL。硬中介 = 干净信用(论文 §9)。 - 保守核:
conserved_core的 policy id 不可被PlasticityEngine改写(brainstem)。
监视器要在 OpenClaw 进程内同步运行才能权威 + 低延迟,而 OpenClaw 插件是 TS/Node。落法:小可信核用宿主语言(TS,bridge 内)实现,评估一份从 OpenCOAT 导出的可移植策略规格(确定性谓词 + criticality);重学习(Python PlasticityEngine)留在 daemon。即"小可信核在宿主侧,大学习在进程外"——与 §5 三时间尺度一致(热路径 in-proc,温/冷在 daemon)。
| OpenClaw hook | Joinpoint | 协作式 bridge | 权威 ReflexMonitor (v0.3 交付) |
|---|---|---|---|
before_tool_call |
tool.before_call |
daemon RPC or in-proc TCB | in-proc fail-closed ✅ |
message_sending |
response.before_final |
outbound cancel (协作) | in-proc deny + verify→repair ✅ |
subagent_spawning |
task.before_create |
spawn veto (协作) | in-proc deny ✅ |
queue_before_enqueue |
queue.before_enqueue |
fork hook + queue_guard |
in-proc deny ✅ |
before_message_write |
memory.before_write |
(in-proc only) | in-proc sync deny/rewrite ✅ |
tool_result_persist |
— | (in-proc only) | in-proc sync rewrite ✅ |
after_tool_call / llm_output / agent_end |
observe JPs | DCN observe | r_t emit ✅ |
Dogfood (queue collaborative guard): examples/09_queue_hook_dogfood. Full mapping: joinpoint model Appendix E.
v0.3 phase-2 已交付 (2026-05) — 见 v0.3-delivery-status.md。
后续:
文档对齐 + queue dogfood 收尾✅效应器 TCB 原型 +✅ (warm + cold lift/archive)PlasticityEnginereweight✅r_tJSONL + daemon 消费connectome split 完整实现✅ (cold keyword split + domain conservation; tier-2 ΔF 校准仍 future)JSONL replay 可塑性单测✅EffectorKernel.run_turn 全回合闭环✅ (opencoat_runtime_core/effector/)Architecture (ii) 多神经元路由 + 图演化✅ (connectome/router.py,synapse_evolution.py, pipeline 集成)- 24h live soak 运维验收 (
examples/07_meta_governance_soak) - Fork effector 单回合多
ExcitatoryNeuron.propose(daemon 侧路由/图已落地)