【免费下载链接】rocketride-server
High-performance AI pipeline engine with a C++ core and 50+ Python-extensible nodes. Build, debug, and scale LLM workflows with 13+ model providers, 8+ vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.
RocketRide 是一个以 C++ 引擎为核心、支持 50+ Python 可扩展节点的高性能 AI Pipeline 系统。llm_gemini是其中负责接入 Google Gemini 模型的 LLM 节点,它把 Gemini 的文本生成与图像生成能力封装成标准的llm调用接口,供 Agent 及其他节点以invoke能力消费,也可以直接通过questions/answers两条数据通道(Lanes)在管道里即插即用。读完本文,你将掌握该节点的完整配置方法、全部可用模型 Profile、API Key 认证机制与常见坑点,并能理解其基于 google-genai 库的底层实现与无密钥测试方法。
节点定位:标准的 LLM invoke 连接
在 RocketRide 的节点体系中,llm_gemini的注册信息定义于 services.json:
protocol:llm_gemini://,是管道端点协议;classType:["llm"],即它是标准的 LLM 类型节点;capabilities:["invoke"],表明它可以被 Agent 或其他节点作为 LLM 调用连接使用;register:filter,node:python,path:nodes.llm_gemini,引擎会实例化nodes.llm_gemini包中的 Python 实现;lanes:{"questions": ["answers"]},定义了数据通道映射。
从源码结构看,节点由 IGlobal.py(全局生命周期管理与配置校验)和 gemini.py(核心 Chat 实现)两部分组成,后者继承packages/ai/src/ai/common/chat.py中的ChatBase抽象基类,因此天然获得 RocketRide 统一的 token 管理、网络重试、prompt 校验与流式回调能力。
数据通道(Lanes)
节点暴露一对数据通道:
| Lane in | Lane out | 说明 |
|---|---|---|
questions | answers | 直接发送问题,接收模型生成的答案 |
文本到达questions通道后,会被发送给配置的模型,生成的文本从answers通道发出。这使得即使不经过 Agent 编排,也可以把该节点作为管道中的普通节点直接串联使用。
模型 Profile 一览
节点通过预置的 Profile(配置模板)来固化模型标识、上下文窗口与输出上限。默认 Profile 为Gemini 3.1 Pro(gemini-3_1-pro-preview),其完整配置见 services.json。
常用 Profile
| Profile | Model | Context tokens | Output tokens |
|---|---|---|---|
| Gemini 3.1 Pro(默认) | models/gemini-3.1-pro-preview | 1,048,576 | 65,536 |
| Google: Gemini 3.6 Flash | models/gemini-3.6-flash | 1,048,576 | 65,536 |
| Google: Gemini 3.5 Flash | models/gemini-3.5-flash | 1,048,576 | 65,536 |
| Google: Gemini 3.5 Flash Lite | models/gemini-3.5-flash-lite | 1,048,576 | 65,536 |
更多模型(折叠查看)
| Profile | Model | Context tokens | Output tokens |
|---|---|---|---|
custom | (用户指定) | 可编辑 | 可编辑 |
| Gemini 3.1 Flash Image Preview | models/gemini-3.1-flash-image-preview | 131,072 | 58,982 |
| Gemini 3.1 Flash Lite | models/gemini-3.1-flash-lite-preview | 1,048,576 | 65,536 |
| Gemini 3 Flash Preview | models/gemini-3-flash-preview | 1,048,576 | 65,536 |
| Gemini 3 Pro Image Preview | models/gemini-3-pro-image-preview | 65,536 | 32,768 |
| Gemini 2.5 Pro | models/gemini-2.5-pro | 1,048,576 | 65,536 |
| Gemini 2.5 Flash | models/gemini-2.5-flash | 1,048,576 | 65,535 |
| Gemini 2.5 Flash Lite | models/gemini-2.5-flash-lite | 1,048,576 | 65,535 |
| Gemini 2.5 Flash Image | models/gemini-2.5-flash-image | 32,768 | 8,192 |
| Gemini 3 Pro Preview | models/gemini-3-pro-preview | 1,048,576 | 65,536 |
| Gemini 3 Pro Image | models/gemini-3-pro-image | 131,072 | 32,768 |
| Gemini 2.0 Flash | models/gemini-2.0-flash | 1,048,576 | 65,535 |
| Gemini 2.0 Flash Lite | models/gemini-2.0-flash-lite | — | 65,536 |
| Google: Gemini 2.5 Flash Lite Preview 09-2025 | models/gemini-2.5-flash-lite-preview-09-2025 | 1,048,576 | 65,535 |
| Google: Gemini 2.5 Pro Preview 06-05 | models/gemini-2.5-pro-preview | 1,048,576 | 65,536 |
| Google: Gemini 2.5 Pro Preview 05-06 | models/gemini-2.5-pro-preview-05-06 | 1,048,576 | 65,535 |
| Google: Gemini 3.1 Pro Preview Custom Tools | models/gemini-3.1-pro-preview-customtools | 1,048,576 | 65,536 |
| Google Gemini Flash Latest | models/gemini-flash-latest | 1,048,576 | 65,536 |
| Google Gemini Pro Latest | models/gemini-pro-latest | 1,048,576 | 65,536 |
| Google: Nano Banana 2 (Gemini 3.1 Flash Image) | models/gemini-3.1-flash-image | 131,072 | 32,768 |
| Google: Gemini 3.1 Flash Lite | models/gemini-3.1-flash-lite | 1,048,576 | 65,536 |
| Google: Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image) | models/gemini-3.1-flash-lite-image | 65,536 | 58,982 |
models-gemini-2-5-flash-batch | models/gemini-2.5-flash:batch | 1,048,576 | 65,535 |
models-gemini-2-5-flash-lite-batch | models/gemini-2.5-flash-lite:batch | 1,048,576 | 65,535 |
models-gemini-2-5-pro-batch | models/gemini-2.5-pro:batch | 1,048,576 | 65,536 |
models-gemini-3-1-flash-lite-batch | models/gemini-3.1-flash-lite:batch | 1,048,576 | 65,536 |
models-gemini-3-1-pro-preview-batch | models/gemini-3.1-pro-preview:batch | 1,048,576 | 65,536 |
models-gemini-3-5-flash-batch | models/gemini-3.5-flash:batch | 1,048,576 | 65,536 |
models-gemini-3-5-flash-lite-batch | models/gemini-3.5-flash-lite:batch | 1,048,576 | 65,536 |
models-gemini-3-6-flash-batch | models/gemini-3.6-flash:batch | 1,048,576 | 65,536 |
models-gemini-3-7-flash | models/gemini-3.7-flash | 1,048,576 | 65,536 |
models-gemini-3-7-flash-batch | models/gemini-3.7-flash:batch | 1,048,576 | 65,536 |
models-gemini-3-8-flash | models/gemini-3.8-flash | 1,048,576 | 65,536 |
models-gemini-3-8-flash-batch | models/gemini-3.8-flash:batch | 1,048,576 | 65,536 |
models-gemini-3-flash-preview-batch | models/gemini-3-flash-preview:batch | 1,048,576 | 65,536 |
Profile 标题中包含Image的模型支持图像生成输出(如 Gemini 3.1 Flash Image Preview、Gemini 2.5 Flash Image 等)。值得注意的还有一批以:batch结尾的批量推理模型(Gemini 2.5/3.x 系列 Batch),它们通过相同的 Developer API 标识调用,适合批量离线任务。
在 services.json 的preconfig.profiles中可以看到每个 Profile 的完整字段:title(UI 显示名)、model(模型标识)、modelSource(数据来源,注释标明了manual/openrouter/sync_models.config.json)、modelTotalTokens(上下文总 tokens)、modelOutputTokens(输出上限)、apikey以及可选的deprecated/migration迁移提示。
已废弃的 Profile
以下 Profile 仍可在旧管道中选择,但已标记为废弃,建议迁移:
- Gemini 3 Pro Preview → 使用
gemini-3_1-pro-preview - Gemini 3 Pro Image → 使用
gemini-3-pro-image-preview - Gemini 2.0 Flash → 使用
gemini-2_5-flash - Gemini 2.0 Flash Lite → 使用
gemini-2_5-flash-lite
在 services.json 中还可以看到这些废弃 Profile 的migration提示字段,例如 Gemini 2.5 Pro 的迁移提示为 "Please use 'gemini-3.1-pro-preview' instead",引擎会在 UI 中据此引导用户更换模型。
配置节点
配置的核心是:选择一个模型 Profile,并提供一个 API Key。命名 Profile 已固化模型、上下文窗口和输出上限,因此大多数管道无需额外设置。
自定义模型
选择customProfile 后,需要手动填写:
- 模型标识:Gemini 模型 ID,例如
models/gemini-2.5-pro; - 总 Token 上限(输入 + 输出):custom 默认值为1,114,112;
- 输出 Token 上限:custom 默认值为65,536。
请将这两个值设置为所选择模型的真实限额。custom Profile 的默认值定义于 services.json,且 custom 是唯一开放gemini.model、gemini.modelTotalTokens、gemini.outputTokens三个编辑字段的 Profile(见fields中gemini.custom的properties列表)。
配置字段 Schema
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
gemini.apikey | string | API Key:Google AI Developer API key | |
gemini.model | string | Model:Gemini 模型 | |
gemini.modelTotalTokens | number | Total Tokens:输入 + 输出的最大 token 数 | |
gemini.outputTokens | number | Output Tokens:最大输出 token 数 | |
gemini.profile | string | Model:Gemini LLM 模型 | "gemini-3_1-pro-preview" |
该 Schema 由nodes:docs-generate脚本自动生成于 README.md,字段定义与 UI 行为(如gemini.profile的enum下拉、各 Profile 的conditional联动展示、gemini.apikey的ApiKeyWidget安全输入控件)均可在 services.json 中查到。
认证方式
在所选 Profile 的apikey字段中提供 Google AI Developer API Key(可在 Google AI Studio 中创建):
- Key 以安全字段(secure field)存储,UI 使用
ApiKeyWidget渲染,不会明文回显; - Key 格式校验委托给 google-genai 库完成;若缺失 Key,管道启动时会以
Please enter your Gemini API key.报错——该异常在 gemini.py 中显式抛出。
已知坑点:Profile 子键回退
引擎在存储配置时,会从 Profile 名称第一个下划线之后的片段派生子键(例如gemini-2_5-pro被存储在5-pro下)。节点读取 API Key 时会透明回退到该子键(见 gemini.py),因此Key 保存在两种布局下都能正常工作。这意味着无论 Key 是通过 UI 保存到标准位置,还是历史配置中被存到了子键位置,节点都能正确读取。
关于 Vertex AI
该节点仅面向 Gemini Developer API,不使用 Vertex AI。不过 google-genai 客户端本身通过genai.Client(vertexai=True, project=..., location=...)也支持 Vertex AI——源码注释中表明,未来重构可能将独立的 Vertex 节点与当前节点统一为一个实现(见 gemini.py)。
底层实现原理
节点的核心实现是 gemini.py 中的Chat类,它继承自ChatBase(packages/ai/src/ai/common/chat.py),但绕过了默认的 LangChain 适配器,直接使用 google-genai 库调用 Gemini API。
调用链路
- 客户端初始化:
genai.Client(api_key=api_key)(gemini.py); - 文本生成:
client.models.generate_content(model=self._model, contents=prompt)(gemini.py),self._model由父类ChatBase通过validate_model_name校验后注入; - 响应读取:取
response.text返回纯文本答案。
由于节点重写了_chat且不设置_llm,它不会进入LangChainAdapter,因此 token 计量需要自行上报——这正是_report_gemini_usage函数存在的原因。
Token 计量:从 usage_metadata 精确上报
_report_gemini_usage(gemini.py)从响应的usage_metadata中读取四个计数:
prompt_token_count包含缓存前缀,因此先扣除cached_content_token_count得到"新鲜输入"token;- 输出 =
candidates_token_count+thoughts_token_count(thoughts_token_count是推理 token,Google 按输出费率计费,需计入输出); - 通过
report_llm_tokens(packages/ai/src/ai/common/llm_adapter.py)分别写入llm_input_tokens、llm_output_tokens、llm_cache_read_tokens等互不相交的计数器中,供 metrics 单例按client_id累计计费。
该函数的注释特别强调"best-effort":它运行在用户已付费的响应上,任何计量失败都只记录调试日志(debug_usage_failure),绝不因计费问题吞掉答案。
Token 估算:0.75 tokens/word
父类默认的getTokens依赖self._llm.get_num_tokens,而本节点没有 LangChain LLM 对象,因此重写了估算逻辑(gemini.py):按每个英文单词约 0.75 token 估算,即int(word_count / 0.75)。这是一个本地近似值,并非模型原生 tokenizer 的精确结果,主要用于 prompt 预算校验与截断预警;若追求精确计数,源码注释建议使用模型的原生计数方式。另外该方法对None输入返回 0——因为无文本部分的响应.text是None而非空字符串,token 记账不应成为发现该问题的场所。
无文本响应:GeminiNoTextError 与重试策略
当响应携带空文本时,.text为None,可能的原因包括:安全拦截、token 预算耗尽(思考模型可能在输出可见文本前耗尽预算)、或只有非文本部分。此时_chat会构造GeminiNoTextError异常([gemini.py](https://link.gitcode.com/i/772e476f4119087f1583b04190e36c1c#L59-L64, L196-L216)),并携带finish_reason与block_reason详情。
关键在于is_retryable_error的重写(gemini.py):GeminiNoTextError被视为不可重试。原因很直接——API 已经给出判定,重发相同 prompt 只会得到相同判定,而每次重试都会被计费。默认的ChatBase.is_retryable_error对未识别错误采取"保守可重试"策略,若无此重写,一次安全拦截会被重发并重复扣费最多CONST_CHAT_MAX_RETRIES次(相关重试循环见 packages/ai/src/ai/common/chat.py)。
管道启动校验
beginGlobal中会加载 requirements.txt 声明的依赖并实例化Chat;当引擎处于OPEN_MODE.CONFIG配置模式时则跳过加载(见 IGlobal.py)。
保存时配置校验:最小实时探针
保存节点配置时,IGlobal.validateConfig(IGlobal.py)会执行一次最小化实时探测:向配置的模型发送单字 promptHi(VALIDATION_PROMPT)。其行为要点:
- 无 API Key 时跳过探测:安全字段在校验时不会被解密,因此没有 Key 就直接返回,不触发探针;
- Provider 错误以警告呈现:捕获
BadRequest、Unauthorized、Forbidden、NotFound、TooManyRequests、ServiceUnavailable、InternalServerError、DeadlineExceeded、InvalidArgument等 google-api-core 异常,通过_extract_status_message_code解析异常字符串中的 JSON 负载或正则匹配,提取HTTP 状态、状态码(如INVALID_ARGUMENT)与完整消息,再经_format_error组装成Error <code>: <STATUS> - <message>形式写入 UI 警告,且不截断消息; - 图像模型特例:仅支持图像输出、拒绝纯文本探测并报
INVALID_ARGUMENT"response modalities" 错误的模型,会被视为探测产物而非配置问题而静默放行; - 解析失败时有兜底正则(
message字段提取、<code> <STATUS>头匹配)与最终 fallback 警告文案Gemini validation setup error. Please check your configuration.。
无密钥测试:Mock google.genai
节点在 services.json 中内置了test块,可针对本地测试服务器运行,无需真实 API Key:
"test": { "profiles": ["gemini-2_5-flash"], "outputs": ["answers"], "cases": [ { "name": "LLM returns mock response", "text": "What is 2+2?", "expect": { "answers": { "contains": "Mock LLM response" } } } ] }运行前提是将环境变量ROCKETRIDE_MOCK指向nodes/test/mocks。此时测试框架通过 nodes/test/mocks/google/genai/init.py 提供的假genai.Client替换真实库:它接受与真实 Client 相同的构造参数(api_key、vertexai、project、location),client.models.generate_content()无视任何入参、固定返回文本Mock LLM response. This stub is used when ROCKETRIDE_MOCK is set so tests run without API keys or external services.。测试向questions通道发送What is 2+2?(Profile 为gemini-2_5-flash),并断言answers通道包含该 Mock 响应。该 mock 同时服务于accessibility_describe节点,是仓库级共享测试设施。
依赖清单
节点运行所需的 Python 依赖声明在 requirements.txt,核心为google-genai,配套 Google 生态依赖:
google-genaigoogle-api-coregoogle-authgoogleapis-common-protosproto-plusprotobuf
小结
llm_gemini节点展示了 RocketRide LLM 节点的典型设计:services.json声明协议、能力与 Profile,IGlobal.py负责生命周期与保存时探针校验,gemini.py直接基于 google-genai 实现生成调用并自行接管 token 计量与错误语义。使用时的关键要点可归纳为:选对 Profile(注意 Image / batch / deprecated 标记)、配置 Developer API Key、理解gemini-2_5-pro这类带下划线 Profile 的子键回退机制,以及利用ROCKETRIDE_MOCK在无 Key 环境下跑通管道测试。对于以 LLM 为核心的 Agent 管道,这个节点提供了把 Gemini 全系模型(从 1M 上下文窗口的 Pro 旗舰到 Flash 轻量级与图像生成模型)接入 RocketRide 的最短路径。
【免费下载链接】rocketride-server
High-performance AI pipeline engine with a C++ core and 50+ Python-extensible nodes. Build, debug, and scale LLM workflows with 13+ model providers, 8+ vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.
相关推荐
RocketRide llm_mistral 节点完全指南:将 Mistral AI 模型接入 AI Pipeline 的配置、调用与容错原理
RocketRide llm_mistral 节点完全指南:将 Mistral AI 模型接入 AI Pipeline 的配置、调用与容错原理 本篇指南围绕 R
RocketRide llm_xai 节点详解:用 LangChain ChatXAI 将 xAI Grok 模型接入 AI 流水线
RocketRide llm_xai 节点详解:用 LangChain ChatXAI 将 xAI Grok 模型接入 AI 流水线 本文基于仓库中的节点文档
RocketRide 中的 Qwen LLM 节点:基于 DashScope OpenAI 兼容端点的多区域模型接入实战
RocketRide 中的 Qwen LLM 节点:基于 DashScope OpenAI 兼容端点的多区域模型接入实战 本文以 RocketRide 仓库中的
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考