工作流 📋 6 个步骤 第 587 / 587 篇

用 RocketRide 在 IDE 里搭 AI 流水线:.pipe 即代码、Agent 节点编排与 CLI 校验实操

把 LLM、向量库、OCR 与工具串成一条能进代码评审的流水线,难的不是连线,而是它能不能被验证、被 diff、被复用。RocketRide 是一个 MIT 的开源 AI 流水线引擎:可视化画布在 VS Code 里,产物是可读可比对可评审的 JSON,配一套命令行做校验与语义 diff,还能把流水线直接暴露成 MCP 工具。本教程六步落地。

2026-11-01· 10 分钟上手· 约 3258 字· 🛰️ RocketRide / 🧾 .pipe 流水线即代码

把大模型、向量库、OCR、命名实体识别与一堆外部工具串起来,最现实的问题从来不是「能不能连上」,而是这条链路能不能被别人看懂、被评审、被复用、被回滚。图形化编排工具通常卡在这一步:画布上的连线很难进 Git,改动了什么说不清。RocketRide 的做法是把 IDE 变成 AI 开发环境——你在 VS Code 的画布上拖节点、连线、配置,产物是一份 .pipe 文件,本质是可读的 JSON,能 diff、能评审、能在任何环境跑;执行它的是一个多线程 C++ 运行时,官方把它定位成「应用底下那整套东西的承载层,不只是 Agent」。仓库收录一百多个节点,覆盖十几个大模型提供方、九个向量数据库、OCR、NER、PII 脱敏、分块与嵌入等,节点全部可以用 Python 扩展。本教程六步落地:装扩展并把引擎跑起来、读懂 .pipe 的结构、搭一条带子 Agent 的流水线、运行并看追踪、用命令行批量跑与管理任务、最后把校验与评审接进 CI。

🛰️ 本教程适合:想把检索增强、文档处理或多步 Agent 流程做成可复用产物,并且希望它能进代码评审的开发者。前置条件很轻:装 VS Code 扩展后选本地模式即可,不注册、不填密钥也能跑通不含大模型的流水线;要用大模型时再在节点里填一个 API key。整个引擎是 MIT 许可,没有企业版、没有付费墙。想跳过运维也可以用它的云服务,同一份 .pipe 不用改。

Step 1:装与起:扩展加本地模式,或一条 Docker 命令起引擎

1 三种运行环境,产物完全一样

入门路径是在 IDE 的扩展市场里装 RocketRide 扩展,点开后选择本地模式——它会把引擎直接拉进 IDE,不需要额外配置。想把引擎独立跑起来就用容器:拉镜像、建容器、映射端口。也可以什么都不装,直接用云服务,流水线文件一行不改。

# 路线 A:IDE 扩展(VS Code Marketplace / Open VSX 搜 RocketRide)
#   打开扩展 → 选 Local → 直接在画布上跑,无需注册

# 路线 B:容器起引擎(默认端口 5565)
docker pull ghcr.io/rocketride-org/rocketride-engine:latest
docker create --name rocketride-engine -p 5565:5565 ghcr.io/rocketride-org/rocketride-engine:latest

# 路线 C:托管云服务 —— 同一份 .pipe 直接跑,不用自己运维

如果从源码构建,仓库会帮你把 Python 环境、C++ 工具链、Java 与 Tika 以及各节点依赖都准备妥当,不需要你手工装一圈前置。这一点对想贡献节点的人尤其友好。

注意命令行的默认端点不一样:Python 版 CLI 默认连云端地址,TypeScript 版默认连本机 5565。两条工具链装在同一台机器上时,很容易在没意识到的情况下把本地文件发到了云端。跑任何命令前先确认连接端点,或用环境变量显式指定。

Step 2:读懂 .pipe:源节点、控制 lane 与 response 的分工

2 连线分两种,别混用

每条流水线从一个源节点开始:webhook、chat 或 dropper(文件投放),以一个 response 节点结束。中间的节点通过两种 lane 相连:input 是数据流向,control 是依赖关系——控制 lane 带 classType,标明这个节点是作为 llm、memory 还是 tool 被上游使用。理解这两种 lane,是看懂官方示例的关键。

// 官方示例 examples/agent-workflow.pipe(节选,已省略画布坐标)
{
  "components": [
    { "id": "chat_1", "provider": "chat",
      "config": { "mode": "Source", "type": "chat" } },

    { "id": "agent_rocketride_1", "provider": "agent_rocketride",
      "config": { "instructions": ["You are an orchestrator agent. …"], "max_waves": 15 },
      "input":  [{ "lane": "questions", "from": "chat_1" }] },

    { "id": "llm_openai_1", "provider": "llm_openai",
      "config": { "profile": "openai-4o",
                  "openai-4o": { "apikey": "${ROCKETRIDE_OPENAI_KEY}" } },
      "control": [{ "classType": "llm", "from": "agent_rocketride_1" }] },

    { "id": "memory_internal_1", "provider": "memory_internal",
      "control": [{ "classType": "memory", "from": "agent_rocketride_1" }] },

    { "id": "tool_http_request_1", "provider": "tool_http_request",
      "control": [{ "classType": "tool", "from": "agent_rocketride_1" }] },

    { "id": "response_answers_1", "provider": "response_answers",
      "config": { "laneName": "answers" },
      "input":  [{ "lane": "answers", "from": "agent_rocketride_1" }] }
  ],
  "version": 1
}

密钥不写死在文件里,而是用环境变量占位符引用,运行时注入。这个约定让 .pipe 可以放心进 Git——前提是环境变量本身管好了。

💡 官方给了几个现成示例可对照:rag-pipeline.pipe 是标准的「对着我的文档提问」形态,agent-workflow.pipe 是本文的多 Agent 形态,还有 Slack Agent、带共享记忆的 Agent 等。从改示例开始比从空白画布开始快得多。

Step 3:搭 Agent 流水线:把子 Agent 当成父 Agent 的一个工具

3 用 control lane 表达「谁能用谁」

Agent 节点本质是一个可以反复调用其它节点、直到任务完成才停下的大模型。它的可用能力不是写在提示词里,而是靠控制 lane 挂上去:挂 llm 决定它用哪个模型,挂 memory 决定它有没有记忆,挂 tool 决定它能调什么工具。同一个机制也用来做层级编排——把另一个 Agent 节点以 tool 类型挂到编排者身上,它就变成了父 Agent 手里的一个「子 Agent 工具」。

编排关系(示例中的两块)

agent_rocketride_1  编排者,max_waves = 15
  ├─ control llm     → llm_openai_1        用 OpenAI 的某个 profile
  ├─ control memory  → memory_internal_1   带内部记忆
  ├─ control tool    → tool_http_request_1 能发 HTTP 请求
  ├─ control tool    → tool_python_1       能跑 Python
  └─ control tool    → agent_rocketride_2  子 Agent,也被当成工具

agent_rocketride_2  研究子 Agent,max_waves = 10
  ├─ control llm     → llm_anthropic_1     换用 Anthropic 的 profile
  ├─ control memory  → memory_internal_2   自己的记忆
  └─ control tool    → tool_http_request_2 自己的取数工具

两个 Agent 用不同厂商的模型,各自有记忆与工具 —— 混搭是它的常规用法

每个 Agent 节点都有 max_waves,也就是它最多循环多少轮。这是防止跑飞的闸门:研究类任务可以给到十轮以上,简单抽取任务两三轮就够。官方 README 也提到它内置对 CrewAI 与 LangChain 的支持,并能在多次运行之间共享记忆。

max_waves 不是越大越好:轮数上限直接决定最坏情况下的调用成本与耗时。先按任务复杂度给一个保守值,跑几轮真实数据看它实际用掉多少,再往上调。把它当成本控制旋钮,而不是性能开关。

Step 4:跑与看:画布上一键启动,追踪里看 token 与调用树

4 先本地跑通,再谈部署

在画布上点源节点上的运行按钮就能启动,也可以从连接管理器里启动。运行中选中一条流水线,可以看到深入的运行时分析:调用树、token 用量、内存占用与延迟等。这些读数的价值在于让你在扩容与部署之前就找到瓶颈,判断哪个模型、哪个 Agent 或哪个工具更适合当前任务。

运行与观测
1) 画布:点源节点上的 ▶ 按钮
2) 或:从 Connection Manager 直接启动
3) 选中运行中的流水线,查看
   - 调用树(trace call tree)
   - token 用量
   - 内存占用
   - 执行延迟
4) 用读数决定:换模型 / 减轮数 / 拆节点

想让链路跑在本地而不出网,本地模式与自建容器都能满足;选择云服务就要接受数据出境。这一点在涉及内部文档时尤其要提前确认。

💡 观测还有一条命令行出路:Python 版 CLI 有 otel 子命令,可以把运行中的追踪与指标通过 OTLP 推给你自己的可观测后端(Jaeger、Grafana Tempo、Datadog、Langfuse、LangSmith 等)。它订阅的是引擎的监控事件流,一直跑到你按 Ctrl+C 为止。

Step 5:命令行:批量跑文件、查任务、随时叫停

5 装任何一个 SDK 就带上 CLI

无论装 Python 还是 TypeScript 客户端,都会同时得到 rocketride 命令。启动一条流水线后命令会打印任务令牌并退出,任务继续在引擎上跑;之后可以用同一个令牌往里推文件,也可以列出所有在跑的任务、按令牌停掉某一个。连接相关的选项都能用环境变量预先设好,免得每次敲一长串。

pip install rocketride      # 或 npm install rocketride,两者都带 CLI

# 连接参数(也可用同名环境变量)
#   --uri      ROCKETRIDE_URI       Python 默认云端地址 / TS 默认 http://localhost:5565
#   --apikey   ROCKETRIDE_APIKEY
#   --pipeline ROCKETRIDE_PIPELINE
#   --token    ROCKETRIDE_TOKEN

rocketride start --pipeline ./rag.pipe --threads 8   # 启动,打印任务令牌
rocketride upload --pipeline ./extract.pipe ./invoice.pdf
rocketride upload --pipeline ./extract.pipe ./docs/*.pdf --max-concurrent 4
rocketride list                                      # 列出在跑的任务与其令牌
rocketride stop --token <task-token>                 # 干净停掉某个任务

启动时的线程数默认是 4,遇到计算密集的节点(OCR、解析、嵌入)可以适当上调。上传的并发默认是 5,一次性推几百个文件时调大它能明显缩短总耗时。

推给云端的数据要先想清楚:上传命令会把本地文件内容送进流水线。若你连的是云端端点,这些文件就离开了本机。涉及内部文档或含个人信息的材料,先确认合规口径,或直接走本地与自建容器路线。

Step 6:当代码管:validate 做门禁,diff 做评审

6 画布噪音与行为改动要分开看

两条命令撑起「流水线即代码」:validate 把 .pipe 交给引擎做结构检查而不执行,适合部署前自查或作为拉取请求的门禁;diff 则做语义比对,把改动归类为节点、连线与配置字段,并把每次挪动节点带来的坐标噪音折叠成一行。后者完全在本地跑,不连引擎、不需要鉴权,因此很适合放进 CI。

# 结构校验:不执行,只查结构与组件引用
rocketride validate ./rag.pipe
rocketride validate ./pipelines/*.pipe --json      # 机器可读报告,接 CI
# 退出码:0 全部通过 / 1 至少一个失败 / 2 用法或连接错误

# 语义 diff:忽略画布坐标噪音,只看节点·连线·配置
rocketride diff old.pipe new.pipe
rocketride diff --git main rag.pipe                # 与某个 git 引用比
rocketride diff old.pipe new.pipe --markdown       # 生成评审用报告

# 注意:diff 与 otel 两个子命令只随 Python 版 CLI 提供

官方还给了两个现成的 GitHub Action:一个起引擎容器跑 validate,一个在拉取请求里找出所有改动的 .pipe 并与基线做语义 diff,把结果写成一条持续更新的评论。评审者看到的会是「模型从 OpenAI 换到 Anthropic、分块大小 512 改成 1024、检索改走重排」,而不是一屏坐标变动。

validate 的检查范围有限:它只查结构与组件引用——重复 id、未知的 input 或 control lane、指向不存在的 from、没有源节点的 source。提供方是否可用、lane 之间是否兼容属于运行时问题,不会在这一步报出来。所以它应当与一次真实运行配套使用,不能互相替代。

💡 接入侧的几条路可以按需选:Python 与 TypeScript SDK 把流水线当一次函数调用;MCP 服务器把流水线暴露成工具,给 Claude、Cursor 这类客户端调用;仓库里也有与 n8n 互通的示例。生产落地前记得把密钥放进环境变量而不是命令行参数——后者会留在 shell 历史里。

常见问题速查

现象原因与处理
不填密钥能跑吗能,先跑通不含大模型的流水线;加大模型节点时再填一个 key
命令连到了意外的地方Python 版默认云端地址,TS 版默认本机 5565;用 --uri 或环境变量显式指定
界面没有出现视图类问题在 mcp-use 那边常见,这里先确认扩展已装且引擎在跑
流水线起不来先跑 validate 看结构与引用;它不查提供方与 lane 兼容性
diff 报命令不存在diff 与 otel 只随 Python 版 CLI 提供,改用 pip install rocketride
git diff 全是坐标变动用 rocketride diff 做语义比对,坐标噪音会被折叠成一行
Agent 跑太久调小 max_waves;它是循环轮数上限,也决定最坏成本
想换模型厂商改 Agent 节点 control lane 上挂的 llm 节点即可
子 Agent 怎么接把另一个 agent 节点以 classType 为 tool 的控制线挂到父 Agent 上
批量处理很多文件upload 配 --max-concurrent;start 配 --threads(默认 4)
想看 token 花了多少运行中点开该流水线的追踪视图,看调用树与用量
要把追踪接进自家监控Python 版 CLI 的 otel 子命令走 OTLP,可接 Jaeger、Langfuse 等
内部文档能上云吗自建容器或本地模式更稳妥;用云端前先过合规
开源许可与付费引擎整体 MIT,无企业版;云服务是可选的托管形态
← 返回教程中心