Rivet 是由 Ironclad(后更名 Irongaze)开发的开源可视化 AI 编程环境,核心形态是一个桌面端节点图编辑器加一组运行时 npm 包。它解决的核心问题是:LLM 应用流程(Prompt 设计、RAG 检索、Agent 工具调用、条件分支)用纯代码编写时难以直观把握整体结构,而纯无代码平台又无法与工程代码深度集成。Rivet 采用类似游戏引擎蓝图(Blueprint)的节点图来编排 LLM 流程,图本身保存为 JSON 格式的 .rivet 文件,可提交进 Git 做版本管理,再通过官方提供的 Node.js / React 包嵌入任意应用,实现“可视化编排 + 代码调用”的双轨开发。本篇基于官方文档整理,覆盖安装配置、核心节点编排、运行时嵌入、生产部署、选型对比及常见误区,目标是从零跑通并支撑真实项目落地。
掌握 Rivet 意味着你多一种把 LLM 流程“图形化表达”并嵌入生产工程的手段,这对 RAG、Agent 类项目的协作效率和可观测性提升是直接可感知的职业技能。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Rivet:多步骤 LLM 流程看不清、改不动
传统的 LLM Agent 开发方式是用代码逐行编排:用户输入 → 意图识别 → 向量检索 → Prompt 组装 → 模型生成 → 工具调用 → 结果汇总。每一环都是一次 LLM 调用或数据处理,代码里夹杂着大量 prompt 字符串、条件分支和调试日志。这类实现的痛点很具体:业务流程与代码结构强耦合,改一个 prompt 措辞需要定位到对应代码位置并重新构建部署;产品经理和运营无法参与流程调试;运行时的中间状态(检索到了什么、模型实际收到了什么)难以可视化复查,出了问题只能靠翻日志。
Rivet 把流程拆解为可视化节点图:每个节点是一个可复用的数据操作单元,包括 LLM 调用、Prompt 模板、文档检索、HTTP 请求、条件分支等,节点之间的连线定义数据流向。开发者在图中直接看到每个节点的输入输出结构,修改 Prompt 在节点面板内完成,不需要改动宿主代码。更关键的是,图以 JSON 格式保存,可通过 npm 包在 Node.js 或 React 应用中加载执行,实现“编辑时可视化、运行时程序化”的共存模式——Rivet 不取代你的代码工程,而是把流程设计和实验环节从代码中抽离出来。
与同类工具相比,Rivet 的气质明显偏向开发者:它提供类型化的数据槽与编辑期静态检查,错误在保存图时就被捕获而非运行时才暴露;同时支持将图嵌入到生产应用中,在真实运行环境里继续调整和观察流程。这种“图与代码可拆分、可合并”的设计,是它区别于纯拖拽配置平台的核心差异。
安装与环境配置:3 步就绪
第一步:安装桌面编辑器(可选)。 到官网下载 macOS 或 Windows 安装包。编辑器用于创建和调试 .rivet 图文件;如果只需要在代码中运行别人已编辑好的图,可以跳过这一步。
第二步:在现有 Node.js 项目中安装运行时包。 Rivet 的核心运行时拆分为多个 npm 包,按需安装:
第三步:验证安装。 在项目根目录创建一个最小测试脚本,确认包能正常加载并输出版本信息:
test-rivet.mjs 内容如下:
如果控制台输出图运行的 JSON 结果,说明环境配置完成。
# 核心库(一般由其他包间接依赖,无需手动安装)npm install @ironclad/rivet-core # Node.js 环境中加载并运行图文件npm install @ironclad/rivet-node # React 应用中渲染可交互的运行时界面npm install @ironclad/rivet-react # CLI 工具(校验、运行图文件)npm install -g @ironclad/rivet-cli
# 验证 CLI 可用rivet --version # 验证 Node 包可加载(先创建一个 test-rivet.mjs)node test-rivet.mjs
import { loadGraphFromFile } from '@ironclad/rivet-node'; const graph = await loadGraphFromFile('./hello.rivet');const result = await graph.run({ question: '你好' });console.log(JSON.stringify(result));
快速上手:10 分钟跑通第一个 Graph
核心思路是“先在可视化编辑器中创建图,再在代码中调用它”。以构建一个最简问答 Graph 为例:
1. 打开 Rivet 桌面编辑器,新建一个空白工程。
2. 在节点面板中搜索并添加一个 Graph Input 节点,在属性中定义输入参数,例如 question(字符串类型),作为整个图的外部入口。
3. 添加一个 Prompt Template 节点,在模板编辑器中写入 你是 AI 助手,请回答:{{question}},并把 Graph Input 的 question 变量拖入模板。
4. 添加一个 LLM 节点(如 OpenAI 模型),在配置面板填入模型名称与 API Key(环境变量方式),将 Prompt Template 的输出连接到 LLM 的输入。
5. 添加 Graph Output 节点,连接 LLM 的输出,定义输出字段 answer。
6. 点击编辑器中的运行按钮,在下方调试面板查看 answer 的实际输出,确认 Prompt 与模型调用链路正常。
7. 保存文件为 hello.rivet。
回到项目中,运行前面创建的 test-rivet.mjs,即可在代码里拿到图中的运行结果。进阶技巧:graph.run() 方法除了传输入参数外,还支持传入处理函数(如工具调用节点的回调处理器),可以在运行时把外部系统的数据注入图中,实现 Agent 式循环。
核心能力详解:4 大支柱
支柱一:蓝图式节点图编辑器。 Rivet 的编排范式借鉴自游戏引擎蓝图系统,节点分为数据处理节点(LLM、Prompt 模板、Embedding、文本处理、HTTP 请求等)与控制流节点(条件分支、循环、映射等)。所有节点的输入输出槽都有类型(string、number、object 等),连线必须类型匹配,保存图时执行静态类型检查,错误在编辑期即被拦截,而不是等到生产运行才崩溃。
支柱二:Prompt 可视化模板。 Prompt 节点内置专门的模板编辑器,支持把图中其他节点的输出变量直接插入模板文本,并支持配置少量示例(few-shot)辅助模型理解。模板渲染逻辑位于核心包内,不依赖第三方模板引擎,且避免了 prompt 字符串散落在各业务代码文件中的维护难题。
支柱三:运行时交互式 Canvas(Runtime Canvas)。 这是 Rivet 区别于多数编排工具的独有能力。当应用通过 @ironclad/rivet-react 嵌入图时,业务人员可以在真实运行环境中看到图的状态:哪些节点已执行、每个节点的输出值是什么;还可以直接修改节点参数并触发重新运行。这把调试能力从开发环境延伸到生产应用内部,对产品、运营协作定位问题非常有效。
支柱四:以代码为中心的图生命周期管理。 .rivet 文件本质是结构化 JSON,包含节点定义、连线和 schema 版本号,天然适合提交进 Git 做代码评审和版本回溯。官方 CLI 提供 rivet run 运行图、rivet graph validate 校验图结构,可在 CI 流程中作为前置卡点。由于数据流在加载时被静态解析,图运行过程是确定的(模型本身的随机性除外),便于测试与复现。
生产部署与监控:从上线到运维
部署方式一:图嵌入 Node.js 服务。 将 .rivet 文件作为静态资源随应用打包,服务启动时调用 loadGraphFromFile 加载图,请求处理时通过 graph.run(input) 执行。适合构建带 RAG 或 Agent 能力的后端 API:图的迭代只需替换 .rivet 文件并重启服务,业务代码无需改动。
部署方式二:图嵌入 React 前端。 使用 @ironclad/rivet-react 完成两件事:一是把图正常跑在浏览器侧(纯前端 Agent 场景),二是在管理后台渲染运行时 Canvas,让运营人员直接看到每个对话步骤的节点状态、检索结果和模型输出,并在界面上调整参数后重放流程。
可观测性。 graph.run() 返回 Promise,resolve 后拿到完整的图输出对象;对每个节点的耗时与调用记录,需在应用侧接入日志框架统一采集。建议在 CI 中加入 rivet graph validate 校验,防止图文件结构错误进入生产;对包含 HTTP 或数据库写入的图,要重点设计幂等逻辑,避免图重跑时产生重复副作用。
<p class="para-label">避坑清单:</p>
<ul class="dash-list"><li>坑 1:把 Rivet 当成无代码平台。图本身不具备运行能力,纯编辑器内的 Run 只用于开发调试,生产环境必须通过 npm 包把图嵌入工程代码,团队中至少要保留一名工程师负责运行时集成。</li><li>坑 2:误以为在运行时 Canvas 上改值会立即生效。Rivet 的数据流在加载时静态分析,修改节点值后必须触发重新运行(rerun)才会按新值执行,它不是实时热更新机制。</li><li>坑 3:跨大版本直接导入 .rivet 文件。图文件内包含 schema 版本信息,2.x 与早期 alpha 版本的图不保证兼容,多人协作时应锁定一致的编辑器版本与 npm 包版本。</li><li>坑 4:对外部副作用节点不做幂等设计。包含 HTTP 请求、数据库写入的节点在每次重跑时都会再次执行,测试和生产重放前需确认外部系统可承受重复调用。</li><li>坑 5:把 API Key 存进图文件。图文件是明文 JSON 且会进 Git,密钥应通过运行环境注入,编辑器本地配置不要随工程分发。</li></ul>
| 维度 | Rivet | Langflow | Flowise | Dify |
|---|---|---|---|---|
| 定位 | 本地优先可视化图编辑器 + 运行时 | RAG 可视化开发平台 | 开源 RAG 工作流构建器 | 低代码 LLM 应用平台 |
| 编排范式 | 蓝图式节点图,静态数据流分析 | 拖拽管道(Python 后端) | 链式拖拽流程 | 工作流/Agent 画布 |
| 类型约束 | TypeScript 类型化数据槽,编辑期静态检查 | Python 对象 + JSON | JSON,较宽松 | 宽松 |
| 学习曲线 | 中高:需理解数据流与代码集成 | 中低 | 低 | 低 |
| 生态集成 | npm 包、React/Node.js、CLI | Python 生态、DataStax 集成 | LangChain 集成、API 导出 | 模型供应商、插件市场、完整 API |
| 生产部署 | 图嵌入应用代码运行 | Docker 自托管 / 云 API | Docker 自托管 | Docker / 云托管全栈 |
| License | Apache 2.0 | MIT | Apache 2.0 | Apache 2.0 |
| 适合谁 | 想要流程可视化又保留工程化能力的开发团队 | 需要快速验证 RAG 原型的 Python 开发者 | 不想写代码、快速搭流程原型的个人或团队 | 需要权限、监控、模型路由开箱即用的业务团队 |
选型建议:看重工程可控性(类型检查、CI 集成、与现有 TypeScript 代码栈协作)优先选 Rivet;目标是快速把 RAG 想法跑通并给非技术同事演示,Langflow 或 Flowise 更顺手;需要完整的平台能力(账号体系、应用监控、模型管理)时,Dify 更合适。
版本迭代
Rivet 源自游戏开发领域的可视化脚本经验,最初面向游戏叙事创作场景,2023 年开源后转向通用 LLM 应用编排;2024 年经历 2.x 架构重写,强化了数据流引擎、TypeScript 类型化节点槽与运行时嵌入能力,逐步形成“图即代码资产”的工程化定位。(截至训练数据,可能已有更新版本)
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| 预览版 | 2023-01 | 面向游戏开发者公开概念验证 | 蓝图式节点编辑、LLM 调用与 Prompt 可视化 |
| 1.0/alpha | 2023-05 | 开源并发布 npm 包 | 开放源码(Apache 2.0)、Node/React/CLI 包、.rivet 图文件格式确定 |
| 2.0 | 2024-01 | 架构重写 | 新数据流引擎、类型化节点槽与静态分析、运行时 Canvas、图校验能力 |
| 2.3 | 2024-06 | RAG 与运维工具增强 | 图结构校验与 diff 工具完善、运行时调用体验优化 |
Rivet 的重心从“把游戏叙事可视化”转向“把通用 LLM/Agent 流程工程化”,核心手段是静态类型检查、确定性执行和 CLI 运维能力。该工具没有公开的模型能力评测分数可比,选型时应以工作流表达力、工程集成度和团队协作方式为主要判断依据。
AI 应用场景
场景 1:RAG 问答 Agent 的可视化编排
解决的问题:多步 RAG 流程(查询改写 → 检索 → 结果融合 → 生成)用代码实现时难以调试,检索参数与 Prompt 调优依赖频繁改代码。Rivet 把每一步变成独立节点,产品与算法人员可在同一画布上直接调整检索阈值和 Prompt 模板,改完即重跑对比。
具体案例:某知识库问答系统在节点图中增加“查询改写 → 多路检索 → 结果融合 → 二次生成”四节点流程,通过可视化对比不同节点组合,问答准确率提升约 15-30 个百分点,单次回答平均耗时维持在 1.5 秒以内,迭代周期从按周缩短到按天。
场景 2:游戏 NPC 对话系统的分支叙事
解决的问题:游戏叙事由设计师而非工程师编写,纯代码分支逻辑设计师无法独立迭代。Rivet 的蓝图式编辑让设计师直接维护对话图,接入角色状态变量实现条件分支。
具体案例:某叙事驱动游戏使用 Rivet 为 NPC 制作多分支对话图,支持基于玩家历史选择的状态判断。设计师在编辑器中直接新增和调整数十条分支路径,无需程序员介入,单条对话线的开发与调整时间从约 2 天缩短到半天。
场景 3:生产环境 Agent 流程的可视化排障
解决的问题:生产环境中的 Agent 行为异常难以复现,传统日志只能看到输入输出,看不到中间决策过程。通过 @ironclad/rivet-react 在管理后台渲染实时运行图,运维和运营人员直接查看当前对话执行到哪个节点、检索命中了哪些文档。
具体案例:某客服 Agent 出现答复偏差时,运营人员在后台运行时 Canvas 中定位到检索节点召回了错误文档,修正检索参数后一键重放对话,故障定位与验证时间从小时级降到分钟级,减少了对研发排查的依赖。
常见误区
误区看到可视化画布,以为可以用 Rivet 完全不写代码地搭建一个 Agent 或 API 服务,交给业务人员直接维护。
正解Rivet 的可视化编排解决的是“流程设计”环节,但把图变成可用的生产应用,必须通过 npm 包在 Node.js/React 工程中加载运行,由工程师完成运行时集成、部署与监控。团队协作模式应为“工程搭建 + 业务画图”。
为何常见:桌面编辑器的交互方式(拖拽、连线、点运行)与低代码平台高度相似,容易让人忽略它本质是面向开发者的开发框架。
误区图运行过程中直接修改某个节点的输入值,以为后续节点会立即基于新值继续执行。
正解Rivet 的数据流图在加载时被静态分析,运行过程按照固定图结构执行。修改节点值后需要手动触发重新运行,新值才会被下游节点读取。运行时 Canvas 的“改值 + 重跑”是为调试服务的机制,不是实时热更新。
为何常见:运行时 Canvas 的交互反馈很即时,给用户造成“所见即所得”的错觉,忽略了底层是静态图执行模型。
误区.rivet 是 JSON 文件,应该能在任何版本的编辑器和包中打开并运行。
正解.rivet 文件包含 schema 版本信息,2.x 与早期 alpha 版本的文件格式不保证兼容,部分节点定义在版本间有调整。团队协作时应锁定一致的编辑器版本和 npm 包版本,升级前查阅 Changelog 确认图格式兼容性。
为何常见:JSON 给人“纯文本通用”的直觉,忽略了其内部隐含的结构化 schema 约束。
误区Rivet 能编排 Agent 流程,就把现有 LangChain 链路全部迁移过来,以为可以替代一切。
正解Rivet 擅长的是“可视化定义流程 + 嵌入应用运行”,LangChain 是编程优先的编排框架,拥有庞大的第三方集成生态。对已有 LangChain 代码库,迁移成本较高且会损失编程层面的灵活性。合理做法是把复杂 LLM 流程拆成图给业务协作,底层工具链集成仍保留在代码中。
为何常见:两者表面都解决“LLM 多步骤流程编排”,实际抽象层次完全不同,容易造成功能定位的混淆。
面试题
Q1. Rivet 图文件(.rivet)的本质是什么?
- A.编译后的二进制产物
- B.JSON 格式的结构化数据← 正确答案
- C.加密的专有文件格式
- D.Python 脚本源码
答案:B。.rivet 文件以 JSON 存储节点、连线、参数与 schema 版本号,因此可以进 Git 做版本管理与 diff,这也是 Rivet“图即代码资产”理念的基础。
Q2. 在 Node.js 后端运行已编辑好的 Rivet 图,应使用哪个官方包?
- A.@ironclad/rivet-core
- B.@ironclad/rivet-node← 正确答案
- C.@ironclad/rivet-react
- D.@ironclad/rivet-cli
答案:B。@ironclad/rivet-node 提供在 Node.js 环境加载并运行图文件的能力(loadGraphFromFile、graph.run);rivet-core 是核心逻辑但通常不直接使用;rivet-react 面向 React 应用。
Q3. Rivet 的数据流模型最接近下列哪种?
- A.事件驱动流
- B.静态分析图← 正确答案
- C.面向对象调用
- D.消息队列
答案:B。Rivet 在编辑期对图做静态数据流分析与类型检查,运行过程按确定性的图结构执行,区别于事件驱动的松散耦合模型。
Q4. 生产环境中想给业务人员提供可视化 Agent 控制台,应使用哪个包?
- A.@ironclad/rivet-react← 正确答案
- B.@ironclad/rivet-node
- C.@ironclad/rivet-cli
- D.@ironclad/rivet-core
答案:A。@ironclad/rivet-react 提供组件在 React 应用中渲染运行中的图,业务人员可查看节点执行状态、调整参数并触发重跑,实现运行时 Canvas 能力。
Q5. 下列哪些属于 Rivet 的核心能力?
- A.可视化节点编辑器← 正确答案
- B.运行时交互式 Canvas← 正确答案
- C.内置 ML 模型训练
- D.Prompt 模板可视化← 正确答案
答案:ABD。Rivet 提供图编辑器、运行时 Canvas 渲染与 Prompt 模板编辑三大能力;它不包含模型训练功能,模型调用依赖 OpenAI 等外部服务。
Q6. 在 Rivet 中,当运行包含 HTTP 节点的图两次时,HTTP 请求会发生什么?
- A.只执行一次并被缓存
- B.每次都重新发送请求← 正确答案
- C.第二次自动跳过
- D.抛出运行时异常
答案:B。Rivet 对外部副作用节点不做缓存,重跑图会重新执行 HTTP 请求。因此设计和测试时必须考虑幂等性以及外部服务的调用压力。
Q7. 关于 Rivet 与 Langflow/Dify 的选择,正确说法是?
- A.Rivet 强调图与代码共存,便于工程化协作← 正确答案
- B.Langflow 更适合快速原型化 RAG 流程← 正确答案
- C.Rivet 可以完全替代 LangChain 的生态集成
- D.Dify 提供了更完整的平台能力← 正确答案
答案:ABD。Rivet 的定位是可视化编排加代码嵌入,Langflow 基于 Python 生态利于 RAG 快速验证,Dify 提供权限、监控等平台能力;Rivet 并不能覆盖 LangChain 的大量集成生态。
Q8. 加载并运行 Rivet 图后,获取图输出内容的正确方式是?
- A.graph.output 属性读取
- B.graph.run() 的返回结果← 正确答案
- C.读取 Node 全局变量
- D.控制台自动打印
答案:B。graph.run() 返回 Promise,resolve 后得到包含图输出字段的结果对象,业务代码通过该返回值取得最终输出。
Q9. 生产环境中使用 Rivet 需要注意哪些事项?
- A.锁定编辑器与 npm 包版本一致← 正确答案
- B.对包含外部调用的图设计幂等逻辑← 正确答案
- C.把密钥写进图文件内共享
- D.用 CLI 校验图进入 CI 流程← 正确答案
答案:ABD。密钥不应存入 .rivet 图文件(明文 JSON 会进 Git,存在泄漏风险),应通过运行环境注入;版本一致、幂等设计和 CI 校验是生产级工程的基本要求。
Q10. Rivet 运行时 Canvas 的主要用途是什么?
- A.提高图表渲染性能
- B.让非工程师调试生产流程← 正确答案
- C.代替服务端日志采集
- D.自动优化 Prompt 内容
答案:B。运行时 Canvas 把流程图渲染到真实应用环境,业务或运维人员可查看节点状态、调整参数并重跑,改善的是可观测性与协作,不涉及渲染性能或日志系统。