数据截至 (上游 commit 7cdd13a1beec)
Rivet — 可视化 AI Agent IDE 与可嵌入图执行引擎(顶层导航)
30 秒导读: Rivet 是 Ironclad 开源的「AI agent IDE」——你在一张画布上把节点连成线,搭出一个 prompt 链 / agent,而不是手写编排代码。搭好的图既能在 Tauri 桌面 App 里点「运行」单步看它执行,也能存成 JSON、用
@ironclad/rivet-core嵌进你自 己的后端跑。它最值得学的一点:整套分支 / 循环 / 竞速,不是靠if/for写死的,而是靠一个叫control-flow-excluded的特殊「数据值」在图里流动来实现。本文件是顶层导航,只回答「Rivet 是什么、该从哪读」。真正的全景总览(架构图、从文件到输出的主线走查、巧妙之处速览、全库代码地图)在 全景篇;逐层细节在下面五章。为避免你连读两遍同一份总览,这里刻意保持精简。
一分钟认识 Rivet
- 是什么。 一个可视化的 AI agent 搭建 IDE,外加一个可嵌入的图执行引擎(
@ironclad/rivet-core)。画布给人用,引擎给机器用——同一张图,App 里跑和后端里跑,用的都是同一台GraphProcessor。 - 解决什么。 复杂 LLM 编排(抽意图 → 命中不同分支 → 重试 → 并发跑几条路取最快 → 汇总)手写代码又长又难调。Rivet 让你把每一步画成一个节点、用线连起来,数据顺着线流,分支 / 循环 / 并发都在画布上看得见。
- 一句直觉。 把 Rivet 想成「AI 版的 Node-RED / 虚幻引擎蓝图」:节点是积木,连线是数据流,引擎按依赖关系把积木逐个点亮——只不过这里的积木很多是「调一次大模型」「跑一段代码」「查一次向量库」。
- 核心巧思。 引擎是**拉取式(pull-based)**的:不从起点往下推,而是从「不输出给任何人」的终端节点 往回拉依赖;而分支 / 循环 / 竞速全靠一个
control-flow-excluded数据值像信号一样沿边传播来实现,引擎主体几乎不含专门的控制流代码。
monorepo 布局(
packages/下app / app-executor / cli / community / core / docs / node / trivet八个包)、最小嵌入示例(runGraphInFile/createProcessor)、以及「一张图怎么被跑起来」的完整走查,都在 全景篇 里展开。
阅读地图(建议顺序)
由浅入深。想先建立架构全景,先读全景篇;想直接抓精华,跳到第 2、3 章;想动手嵌入,读第 1、5 章。
| 顺序 | 文档 | 一句话 |
|---|---|---|
| ★ | 全景图 · 阅读地图 · 巧妙之处 · 代码地图 | Rivet 是什么、整体怎么转、按什么顺序读源码(完整总览 + 全库代码地图) |
| 01 | 词汇表:节点、数据值与图模型 | NodeImpl、带类型的 DataValue、NodeGraph / Project、NodeRegistration 等地基名词 |
| 02 | 心脏:GraphProcessor 拉取式数据流引擎 | 为什么从终点反向拉取、#fetchNodeDataAndProcessNode 如何递归、p-queue 如何并发、结果如何缓存 |
| 03 | 最精妙处:control-flow-excluded | 一个特殊数据值如何撑起 if/ifElse、循环、竞速,引擎主体几乎不碰控制流 |
| 04 | 节点生态:LLM 调用与插件系统 | Chat 节点如何流式调 LLM、84 个节点文件 / 83 个注册节点分几类、RivetPlugin 如何扩展 |
| 05 | 从图到产品:运行时、调试器、序列化、测试 | @ironclad/rivet-node 如何把图嵌进后端、远程调试器、*.rivet-project 版本迁移、Trivet 测试 |
一句话记牢主线: 画布搭图 → 存成 JSON → 引擎从终点反向拉取着跑图。三个关键词——拉取、就绪、排除——第三个就是 Rivet 全部控制流的秘密(第 3 章专讲)。