跳到主要内容

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、带类型的 DataValueNodeGraph / ProjectNodeRegistration 等地基名词
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 章专讲)。