02 · 既有工作与空白
目标:说清楚"别人做到哪、我们借什么、我们不重复什么"。 结论先行:交互网运行时已经很成熟(HVM2/Inpla/Vine),多 Agent 编排也很成熟(Temporal/LangGraph/Ray),但"以交互网为语义核心的 Agent 基础设施"是空白。
2.1 交互网实现谱系
| 项目 | 模型 | 实现/语言 | 并行/分布 | Effects | 对我们的价值 |
|---|---|---|---|---|---|
| BOHM 1.1(Asperti 等,1996) | 最优 λ / sharing graph | OCaml | 顺序 | 无 | 最优归约的工程基线;读回/括号处理 |
| PECLR | 并行最优 λ | — | 多机 | 无 | 并行归约的实验 |
| Optiscope(etiamz) | Lévy-optimal λ | Rust/C | 顺序 | C 后门 | 现代最优归约器;可视化/教学参考 |
| Inpla(Sato,至 2026 v0.13.4) | 交互网作为编程语言 | C + pthreads | 多线程共享内存 | 内置算术/IO 有限 | 规则语法、内置构造子、复用注解、基准 |
| HVM1 | 交互组合子 | Rust | 多线程 | 有限 | 早期工程经验 |
| HVM2(2024) | 扩展交互组合子 | Rust + CUDA | 多核/GPU | 通过 Bend 编译 | 内存布局、原子链接、work stealing、MIPS 基准 |
| HVM3 | Interaction Calculus | Haskell + C | 单机 | 原生数/IO 接口 | IC 语义、CALL 交互、编译器 |
| HVM4 | Interaction Calculus | 单文件 C | 单机 | 原生数/字符串/IO | 极简可嵌入运行时;最新交互表 |
| Bend | 高层语言 → HVM | Rust/TS | 继承 HVM | 有 | 语言设计、编译到网、2026 的 proof/laws 方向 |
| Vine / Ivy / IVM | 高层 IN 语言 + 低层 IC 语言 + 运行时 | Rust | 单机 | 有限 | 分层语言设计(Vine → Ivy → IVM) |
| ingpu | GPU 交互网求值器 | CUDA | GPU | 无 | GPU 后端可行性 |
| Linr | 并行 IN 服务器 | — | 服务器 | 有限 | 服务化 |
| GoI Visualizer / hvmvis / netties | 教学/可视化 | Web | — | — | 交互设计参考;我们要做得更完整 |
从 HVM2 借什么
HVM2 论文(Taelin 2024)的几个关键工程决策,直接适用于我们的纯核:
- 64-bit term 编码:
tag | label | value,一个 word 表示一个节点/变量/数字;缓存友好。 - 线即原子变量:每个端口是一个原子 word;连接用 CAS,实现 lock-free 的"原子链接"。
- redex bag + work stealing:每个 worker 有本地 bag;空闲时偷取;减少全局锁。
- 交互即小函数:annihilate/commute/erase 是极轻的 C 过程;没有解释器开销。
- 原生数字/全局定义:避免 Church 编码的性能灾难。
- GPU 内核:同一套规则可以映射到 CUDA;我们 v1 不做 GPU,但 IR 要保留可能性。
论文报告的数字(用于建立量级预期,不是我们的目标):Apple M3 Max 单线程 400 MIPS、16 线程 5,200 MIPS;RTX 4090 32,768 线程 74,000 MIPS。
从 Inpla 借什么
- "交互网作为编程语言"的规则语法:
agent、rule、net的写法;内置算术/比较;列表/树编码。 - 复用注解(reuse annotations):在规则里显式标注哪些 cell 可以被复用,减少分配;这是工程上很实用的优化。
- 多线程调度:每个 core 一个线程 + 共享堆;对我们的单机运行时是直接参考。
- 基准方法:n-queens、Ackermann、排序;我们应建立可比的纯网基准。
从 Vine/Ivy/IVM 借什么
- 分层:Vine(高层,函数/命令式混合)→ Ivy(低层 IC 语言)→ IVM(运行时)。这正是我们
Ainet Flow → Ainet Core → AIN IR → aind的思路。 - 低层语言的可读性:Ivy 的语法比裸组合子友好,适合作为调试/手写 IR 的目标。
- 运行时独立:IVM 可以单独 benchmark,不被高层语言绑死。
从 Bend 借什么
- "语言 → 网"的编译管线:函数、ADT、模式匹配、递归如何降级到交互组合子。
- 2026 的 proof/laws 方向:Bend 现在强调用
LAWS.bend+ 证明来约束 AI 生成的代码。这与我们的"Agent 协议/预算/能力"约束是同一类问题:把意图变成可机器检查的约束。我们不做定理证明器,但会借鉴"law/contract 作为一等公民"的产品思路。 - GPU 优先:Bend 的目标是 CPU 如 C、GPU 如 CUDA;我们的 Agent 层是 I/O 密集,不跟它拼纯算力。
2.2 理论与并发扩展谱系
| 工作 | 贡献 | 对 AIN 的影响 |
|---|---|---|
| Lafont 1989 | 交互网、强合流、通用性 | 纯核 |
| Lafont 1997 | 交互组合子(γ/δ/ε)、通用性 | 最小指令集 |
| Lamping 1989 | 最优 λ 归约 | 共享/复制语义 |
| Gonthier–Abadi–Lévy 1992 | geometry of optimality | 读回/括号的理论 |
| Asperti–Guerrini 1998 | 最优实现的系统化 | 工程取舍 |
| Asperti–Laneve 1994/1996 | interaction systems | 规则/类型的抽象 |
| Mackie 1995/1998 | GoI machine、YALE | 抽象机设计 |
| Fernández–Mackie 1998 | 交互网与项重写 | 编码/等价 |
| Mazza 2006 | multiport IN、π 演算编码、并发语义 | 同步扩展的理论基础 |
| Alexiev 1999 / Khalil 2003 | 多 principal port、amb | 早期 multiport 探索 |
| Dal Lago–Tanaka–Yoshimizu 2017 | 并发交互的 geometry | 多 token 语义 |
| Aschieri–Genco 2019 | MLL proofs as concurrent programs | 并发类型 |
| Gimenez–Moser 2016 | 交互的复杂度 | 代价模型 |
| Huber–Yi 2025 | OCaml 中的 IN 编码 | 工程参考 |
| Borner 2025 | 最优交互与真实世界 I/O | effects + optimality 的结合 |
结论:标准交互网适合"纯计算 + 并行";要做 Agent,必须引入 同步(multiport)、效果(effects)、位置(locations)、失败(supervision)。这些在理论上都有先例,但还没有人把它们打包成一个 Agent 运行时。
2.3 多 Agent 基础设施现状
| 类别 | 代表 | 核心抽象 | 缺什么 |
|---|---|---|---|
| 持久化执行 | Temporal、DBOS、Restate、Inngest、AWS Step Functions | workflow/activity、事件重放、重试 | 没有并发图语义;共享/复制靠代码;能力边界弱 |
| Actor/监督 | Erlang/OTP、Akka、Orleans | actor、mailbox、supervision tree | 动态拓扑强,但缺少"图重写"的结构化共享与形式化并发 |
| 分布式任务 | Ray、Dask、Beam | task/actor、数据流 | 面向数据/计算,不面向有状态 Agent 协议 |
| Agent 编排 | LangGraph、AutoGen、CrewAI、OpenAI Agents SDK | graph state、conversation、handoff | 语义是框架约定;重放/权限/成本不统一 |
| 工具协议 | MCP | tool/resource/prompt | 只解决"怎么调工具",不解决"谁可以调、何时调、成本多少" |
| Agent 互操作 | A2A | agent card、task/message | 跨组织协议;本地执行语义仍由框架决定 |
| 可观测 | OpenTelemetry、LangSmith/Langfuse | span/trace | 时间线,不是因果图;难以做结构 diff |
它们各自做对了什么
- Temporal:把"确定性工作流 + 副作用 activity + 事件历史重放"做成了产品。Ainet 的 durability 直接借鉴:交互日志 = 事件历史,effect = activity。
- Erlang/OTP:supervision tree、let-it-crash、mailbox 隔离。Ainet 的 Supervisor/Error cell 借鉴其语义。
- Ray:分布式任务调度、对象存储、actor。Ainet 的 remote wire/placement 借鉴其工程。
- LangGraph:显式图状态 + checkpoint;证明了"图"是 Agent 开发者能理解的抽象。Ainet 把图从"控制流图"下沉到"数据流/重写图"。
- MCP/A2A:工具与 Agent 的接口标准化。Ainet 把它们作为 effect adapter,而不是核心语义。
它们共同缺什么
- 语义级并发:DAG 只是依赖;没有"哪些步骤可以并行、为什么、代价多少"的形式化。
- 确定性重放:Temporal 有,但 Agent 框架大多没有;且 effect 的因果结构没有被类型约束。
- 能力安全:工具注册表是全局的;prompt injection 可以越权。
- 结构化共享:相同子结果/上下文没有一等公民;缓存是字符串键。
- 可解释轨迹:日志/span 不是图;无法回答"这个输出由哪些消息/工具/共享节点推出"。
- 成本感知调度:多数框架没有预算类型,也没有跨 Agent 的成本优化。
2.4 可视化与教学现状
| 项目 | 形态 | 优点 | 不足 |
|---|---|---|---|
| GoI Visualizer | 动态 GoI 抽象机模拟 | 理论准确 | 面向研究者;交互有限 |
| hvmvis | HVM 交互组合子 live | 实时、可编辑 | 偏工具;缺少课程/讲解 |
| netties | 交互网 playground | 轻量、直观 | 功能少;无 λ/最优/Agent |
| Interaction Combinator Live | 网页 live | 低门槛 | 同上 |
| Bend/HVM playground | 语言级 | 能跑真实程序 | 不解释图重写过程 |
| Optiscope | 最优 λ 可视化 | 深度 | 桌面/研究者向 |
空白:没有一个"从零到 Agent"的完整课程,把图重写 → 组合子 → λ → 最优 → 类型 → 并发 → Agent串起来,并且用同一个运行时驱动动画与生产。
2.5 定位:我们做什么不同的事
一句话定位
Interaction nets are the assembly language of agent orchestration. 交互网是 Agent 编排的汇编语言;Ainet 是它的语言、运行时与调度网络。
三个差异化
语义下沉,而不是再包一层
- 别人:DAG/消息队列 + 约定。
- 我们:图重写 + 强合流 + 线性能力 + 显式 effect。并发/共享/权限都是语义的一部分。
确定性 + 可视化是同一件事
- trace 就是网的变化;调试器就是教材的渲染器;重放就是重新点火。
- 这让"可解释性"不是事后拼日志,而是运行时原生输出。
成本是一等公民
- 每个规则/effect 有成本向量;预算可以随端口传递;调度器在预算下优化。
- 对 LLM Agent,这是从"能跑"到"可运营"的关键。
我们明确不做的
- 不与 HVM/Bend 拼纯数值性能;需要时把纯子网编译到它们。
- 不做通用 BPMN/工作流产品;只做 Agent 的计算底座。
- 不做"全自动 Agent 社会"的叙事;先解决单团队、可审计、可重放的编排。
- 不做跨公网拜占庭共识;v1 是受信集群。
2.6 竞争与风险
| 风险 | 说明 | 缓解 |
|---|---|---|
| HVM 生态下沉 | HVM/Bend 可能自己长出 Agent 层 | 我们做他们不擅长的:effects、分布、类型、成本;保持 IR 兼容 |
| Temporal/LangGraph 足够好 | 大多数团队不需要新模型 | 从"高保证/高成本/强审计"场景切入(金融、医疗、合规、研究) |
| 学习曲线 | 开发者不愿学新语言 | Flow DSL + TS/Python SDK + 可视化编辑器;Core 只给需要的人 |
| 理论不完整 | 同步/effect 的合流证明困难 | 先实现子集,明确假设;用属性测试 + golden trace 兜底 |
| 性能不达标 | Agent 是 I/O 密集,网开销可能显著 | 纯核零开销;Agent cell 批量处理;effect 异步;基准驱动 |
2.7 可复用的资产清单
| 资产 | 用途 | 许可注意 |
|---|---|---|
| HVM2/HVM4 论文与代码 | 内存布局、原子链接、规则表 | 检查仓库 LICENSE(HVM 为 MIT/Apache 双许可,需确认版本) |
| Inpla | 规则语法、复用注解、基准 | 检查 LICENSE(BSD 类) |
| Vine/Ivy/IVM | 分层语言设计 | 检查 LICENSE |
| interaction-net-resources | 文献索引 | BSD-3-Clause(仅 README) |
| Lamping/Asperti 论文 | 算法与理论 | 论文版权;只引用,不复制大段 |
| Temporal/LangGraph 文档 | durability/checkpoint 设计 | 只借鉴概念 |
实现前由负责人做一次 license audit,记录在
docs/08-decisions.md的 ADR 中。