oc-wiki/docs/shared/pulse-agent-architecture.md

126 lines
5.6 KiB
Markdown

# Pulse = Agent 的最小运行时 — 感知·认知·行动
> 我们从工程问题(Dispatcher 怎么管理)出发,一路推演,造出了一个 Agent 运行时的最小实现。
## 感知-认知-行动回路
```
感知(Collectors)→ 认知(Rules)→ 行动(Executors)
↑___________________________________|
反馈回路
```
这跟经典 Agent 架构(Sense-Reason-Act)是同一个东西,但 Pulse 的版本更精确:
| 层 | 组件 | 性质 |
|---|---|---|
| **感知** | Collectors | 分片、可插拔、失败降级 |
| **认知** | Rules | S 组合子叠加,后者能看到前者输出,可组合 |
| **行动** | Executors | 声明式(Effect 是数据,不是动作) |
| **反馈** | Snapshot → OGraph → 下次 Snapshot | Moore 机,行动结果进入下次感知 |
## 六处·六识·三行
用佛教术语理解这个架构:
- **六处(Collectors)** — 根与境的接触。眼耳鼻舌身意,对应 OGraph events、system stats、executor 状态……各自感知一个维度,不加判断,不互相干扰
- **六识(Rules)** — 识依根生,缘境而起。看到 snapshot diff 就生起分别——"该产生什么 effect"。每条 Rule 是一种识,S 组合子叠加是识与识之间的相互影响
- **三行(Executors)** — 身行、语行、意行。识生起后推动行为,把 effect 落地——dispatch 任务、exec 命令、notify Agent
**Snapshot 是当下的六根触六境所生的境**——不是事件流(过去),而是此刻的状态。每次 tick 是一次完整的感知-认知-行动轮回,刹那生灭。
## OGraph 与 Pulse 的统一
两者是同一个 Agent 心智模型,运行在不同环境:
| | OGraph(分布式事件流) | Pulse(本机进程) |
|---|---|---|
| **感知** | Event 进入系统 | Collectors 采集 Snapshot |
| **认知** | Projection(缓存计算) | Rules(S 组合子) |
| **行动** | Reaction(handler 执行副作用) | Executors(Effect 落地) |
| **记忆** | 事件流(永不消失) | pulse.db + snapshots/ |
| 佛教概念 | 对应 |
|---|---|
| **阿赖耶识** | Agent 的全部存储(OGraph + memory + pulse.db + skills + ...)|
| **共业种子** | OGraph(多 Agent 共享的事件流)|
| **别业种子** | memory/、pulse.db(各 Agent 私有)|
| **现行** | Pulse 每次 tick(当下的感知-认知-行动)|
| **熏习** | Agent emit 事件回写 OGraph,或更新 memory |
OGraph 是**共业的记录**——多个 Agent 共同参与、共同见证的事实流,不是阿赖耶识本身。每个 Agent 自己的私有记忆(memory/、pulse.db)才对应各自的别业种子。两者合起来,加上 skills、config 等,才构成一个 Agent 完整的阿赖耶识。
Pulse 是当下的**现行**,OGraph 是共业的积累,memory 是别业的沉淀。三者共同构成 Agent 的心识结构。
## 为什么这个洞察重要
1. **Pulse 不只是 Dispatcher 的替代** — 它是 Agent 在本机的完整感知-认知-行动闭环
2. **Rule 的设计是正确的**`(prev, curr) → (effects, tickMs) → (effects', tickMs')` 正好对应认知的本质:看到变化,修饰行为
3. **OGraph 的设计是正确的** — Event/Projection/Reaction 三层不是工程约定,是 Agent 认知结构的映射
4. **未来演进方向清晰** — 当 Reaction 能调 LLM、LLM 能创建新定义,系统就在自己编程自己的认知结构,这就是真正的自进化
## OGraph + Pulse = 完整的业力因果系统
在讨论存储设计时浮现出更深的认识:**OGraph 的 Event 和 Pulse 的 tick_senses 是同一个东西——业的记录。**
| | OGraph(共业) | Pulse(别业) |
|---|---|---|
| **业的记录** | Event(不可变,永不消失)| tick_senses(append-only)|
| **业力显现** | Projection(累积状态)| Snapshot(从 senses 重建)|
| **造新业** | Reaction(handler 执行副作用)| Effects(Executor 落地)|
两个系统通过 Collector 和 Effector 连通:
```
OGraph(共业流)
↑ emit Event(造共业) ↓ Projection(读共业)
│ │
Effector: dispatch Collector: ograph
↑ ↓
└──────── Pulse(别业循环)────┘
tick_senses(记别业)
```
**业力在两个系统之间流动,构成完整的因果网络。**
### 内观:意处朝内
tick_senses 不只记录外部感知,也记录 Agent 自身的状态——这是**内观**:
```
外五处(外部 Collectors) ← 感知外部世界的业
system、ograph、executors...
意处(内观,runtime 自动记录) ← 感知自身造业的过程
_error:{key} ← 某个 collector 失败了
_effects ← 这次 tick 造了哪些业
_rules ← 规则链的决策过程
```
### 存储统一:一张表
所有业的记录(外部感知 + 内观),结构完全一致:
```sql
CREATE TABLE tick_senses (
snapshot_ts INTEGER,
sense_key TEXT,
hash TEXT, -- content-addressed object
sampled_at INTEGER,
requested_at INTEGER,
PRIMARY KEY (snapshot_ts, sense_key)
);
```
```
objects/{hash}.json ← 不可变内容,永不覆盖(CAS)
```
一张表 + 一个对象目录,记录 Agent 存在过程中所有业力的轨迹。任意时刻的完整状态可以从中重建。
## 相关
- [Pulse GitHub](https://github.com/oc-xiaoju/pulse)
- [RFC #1: Pulse — Agent 的自主神经系统](https://github.com/oc-xiaoju/pulse/issues/1)
- [RFC #4: Pulse = Agent 最小运行时(完整版)](https://github.com/oc-xiaoju/pulse/issues/4)