ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

RocketRide Gemini Vision 节点:在 LLM 流水线中实现图像分析、OCR 与视频帧理解

RocketRide Gemini Vision 节点:在 LLM 流水线中实现图像分析、OCR 与视频帧理解 【免费下载链接】rocketride-serverHigh-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.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载RocketRide 的llm_vision_gemini节点是一个连接 Google Gemini 多模态模型的 filter 型组件用于在 pipeline 中对流入的图片执行描述、OCR、视觉理解与场景分析并以纯文本形式输出结果。读完本文你将理解该节点的双 lane 数据流设计、五个 Gemini 视觉模型 Profile 的选型依据、全部配置字段的语义以及其 30 秒硬超时、自动重试、双 lane 结果缓存等关键容错机制的源码级实现原理从而能在 RocketRide 中搭建可靠的批量图像/视频帧分析流水线。节点定位与整体职责llm_vision_gemini在 RocketRide 节点体系中注册为filter 节点register: filter协议前缀为image_vision_gemini节点类别为image由 Python 实现入口包路径为nodes.llm_vision_gemini。这些注册信息定义在 services.json 中{ title: Gemini Vision, protocol: image_vision_gemini://, classType: [image], capabilities: [invoke], register: filter, node: python, path: nodes.llm_vision_gemini, prefix: image_vision_gemini, lanes: { image: [text], documents: [documents] } }作为 filter 节点它的职责是“消费图片、产出文本”把图片交给 Gemini 视觉模型推理将模型的文字分析结果写回管道。它基于google-genaiSDK版本要求1.14.0见 requirements.txt实现每次推理调用都运行在独立的客户端与 worker 线程中并带有30 秒硬超时同时对瞬时错误超时、连接失败、5xx 响应执行一次指数退避的自动重试。若未配置分析提示词节点会退回默认提示词Describe this image in detail.。该节点典型用于高吞吐的场景例如接在帧抓取frame grabber之后对视频的每一帧做连续分析。得益于大多数 Profile 支持 100 万 token 的上下文窗口它可以顺序处理大量图片唯一例外是 Gemini 3.1 Flash Image Preview其上下文上限为 131,072 token。Lane 数据流设计节点提供两条输入 lane分别覆盖“单张流式图片”和“图片文档流”两种数据形态输入 Lane输出 Lane行为imagetext分析单张流式图片输出模型的文本响应documentsdocuments分析Image类型的文档输出携带原始元数据的文本分析imagelane走 RocketRide 的 AVI 图片协议BEGIN/WRITE/END分段写入适合上游是逐帧输出单张图片的来源。实现见 IInstance.py 的writeImage方法BEGIN时重置缓冲区与缓存WRITE阶段追加图像字节END阶段将累计的原始图片数据 base64 编码为data:mime;base64,...数据 URL构造Question后调用模型并把答案写到text输出。documentslane适合上游是文档流如视频抽帧得到的 frame 序列的场景。writeDocuments逐文档处理把Image文档的page_content当作 base64 编码的 PNG 数据交给模型分析后用一个Text文档替换原Image文档并通过rename_ext(doc.metadata, txt)保留原始元数据帧号、时间戳等。原始的Image文档不会向下游流动方法末尾调用preventDefault()类型不是Image或内容为空的文档会被跳过并记录警告。两条 lane 的关键细节是双 lane 缓存复用当同一帧同时触发了image和documents两条 lane 时节点只会调用一次 Gemini第二个 lane 直接复用缓存的答案避免同一张图片被计费两次。IInstance.py 中用_cached_answer与_cache_from_image两个字段区分缓存的写入来源防止多文档批次中上一帧的答案“串”到下一帧if self._cached_answer is not None and self._cache_from_image: # writeImage already called Gemini for this frame — reuse the result. answer_text self._cached_answer self._cached_answer None self._cache_from_image False模型 Profile 与选型节点通过image_vision_gemini.profile配置项选择模型默认值为Gemini 2.5 Flash - Fast Vision (1M tokens)gemini-2_5-flash。Profile 由 services.json 中的preconfig.profiles统一定义每个 Profile 会填充模型标识model与上下文上限modelTotalTokens两个字段Profile模型标识上下文 tokensgemini-2_5-flash默认models/gemini-2.5-flash1,048,576gemini-2_5-promodels/gemini-2.5-pro1,048,576gemini-2_5-flash-litemodels/gemini-2.5-flash-lite1,048,576gemini-3_1-pro-previewmodels/gemini-3.1-pro-preview1,048,576gemini-3_1-flash-image-previewmodels/gemini-3.1-flash-image-preview131,072选型建议源自节点 READMEFlash Lite最快、最便宜适合速度优先于细节的高吞吐帧处理流水线Flash速度与质量均衡大多数视觉任务的推荐默认Pro分析质量最高在精度关键、延迟可接受的场景使用3.1 Pro Preview / Flash Image Preview最新一代预览模型能力更强但预览阶段可能存在不稳定因素。services.json中还定义了tile展示规则Model: ${parameters.image_vision_gemini.profile}即节点在画布上的磁贴会直接显示当前所选 Profile便于在复杂管道中快速区分多个视觉节点。配置项与 Schema节点的用户可配置字段由nodes:docs-generate自动生成到 README 的 Schema 段如下字段类型说明默认值image_vision_gemini.apikeystringGoogle AI API key安全字段界面使用 ApiKeyWidget 控件空image_vision_gemini.profilestringVision Model选择要使用的 Gemini 视觉模型gemini-2_5-flashmodelstringGemini Vision 模型标识由 Profile 自动填充空modelTotalTokensnumber最大上下文长度tokens由 Profile 自动填充空vision.promptstringAnalysis Prompt描述希望从图片中分析或提取的内容空vision.systemPromptstringSystem Instructions定义模型在图像分析中的角色与行为空两个提示词字段的分工值得注意System Instructionsvision.systemPrompt定义模型的角色节点会把它作为 Gemini 请求的system_instruction随每次请求发送。源码中对应 gemini_vision.py 的逻辑仅当该值非空时才会写入generate_config[system_instruction]Analysis Promptvision.prompt每张图片要执行的具体任务。为空时节点使用默认值Describe this image in detail.。从 gemini_vision.py 的Chat.__init__可以看到两者的读取还带有向后兼容的回退链config.get(vision.systemPrompt) or config.get(systemPrompt)和config.get(vision.prompt) or config.get(prompt)旧配置里的通用字段也能被识别。源码级实现剖析推理调用链与 30 秒硬超时节点的核心推理类是 gemini_vision.py 中的Chat它继承自 packages/ai/src/ai/common/chat.py 体系下的ChatBase。一次chat()调用的处理顺序为提取图像数据从question.context中找到以data:image/或data:application/开头的 data URL若问题文本非空则优先使用question.questions[0].text作为提示词解析 data URL在重试循环之外一次性完成header/b64_data拆分、MIME 提取与 base64 解码格式错误会直接抛出Malformed image data URL异常避免重试浪费构造请求用Part.from_bytes(dataimage_bytes, mime_typemime_type)与Part.from_text(textprompt_text)组成一条roleuser的Content请求体在重试间完全一致带超时的执行每次尝试都在一个 daemon 线程_invoke中执行generate_content主线程t.join(timeout30)等待超时即抛出TimeoutError重试决策仅对_shouldRetry判定为可重试的异常重试一次退避时间delay 1.0 * 2**attempt首次重试前等待 1 秒连续两次超时不再重试即一次挂死的请求最多消耗两次 30 秒等待。每次尝试都新建一个genai.Client源码注释给出了原因# Fresh client per call — isolates the httpx session so concurrent # calls from multiple threads dont share a non-thread-safe connection client genai.Client(api_keyself._api_key)也就是说隔离 httpx 会话是为了让多线程并发调用之间不共享非线程安全的连接池这是该节点能够安全支撑高并发帧处理的前提。错误映射把原始异常翻译成可读信息Chat._format_user_error将 Gemini API 的原始错误按关键词映射为用户友好的中文排查线索英文文案覆盖以下类别错误类别匹配关键词映射后的提示认证失败unauthorized、invalid api key、authentication、api_key提示检查 Google AI API key限流rate limit、too many requests、429、quota提示稍后再试计费/额度billing、insufficient、credits提示检查账户额度与计费状态非法输入invalid input、bad request、400提示检查图片格式与提示词模型不可用model not found、unavailable、not supported提示换用其他模型超时timeout、timed out提示重试安全过滤content policy、safety、blocked提示图片被安全过滤器拦截服务端错误internal server error、500/502/503/504提示服务暂时不可用可重试的异常集合_shouldRetry为timeout、timed out、connection、500、502、503、504、internal server error、service unavailable。这与 README 中“超时、连接失败、5xx 响应自动重试一次”的描述一致。帧级容错单帧失败不中断管道两条 lane 的处理逻辑都遵循“失败即跳过”原则imagelane 上推理失败时仅记录Gemini Vision: inference failed for image frame: ...警告documentslane 上则以文档的metadata.chunkId定位失败帧无元数据时记为unknown警告后continue处理下一份文档。空帧/空内容文档同样只产生警告如skipping empty image frame、skipping document with unexpected type一帧坏图不会让整个流水线停摆——这是把它放进批量视频帧分析场景时最重要的可靠性保证。全局初始化与保存时的 API 探测节点的IGlobal层IGlobal.py承担两件事运行时初始化beginGlobal在非 CONFIG 模式下加载依赖、实例化Chat并读取maxConcurrent配置默认 5控制并发endGlobal负责清理。保存时配置校验validateConfig用固定探针提示词Hi对选中的模型发起一次最小化generate_content调用。如果 key 为空则直接跳过交给 UI 提示填写若抛出Unauthorized、NotFound、TooManyRequests、ServiceUnavailable等异常则解析错误体中的 status/message/code 并以warning形式暴露给用户无效 key、模型不存在、配额超限等。值得注意的是一个特判若返回INVALID_ARGUMENT且消息包含response modalities探测直接放行不报警——这类错误与视觉探测场景无关。认证与 API Key 校验在 Google AI Studio 的 API key 页面见 README 认证一节获取的 key 可用于开发用途并覆盖上文全部模型。节点对 key 做两层防御启动期格式校验Chat.__init__中以sk-开头的 key 会被立即拒绝错误信息明确指出“这看起来是一个 OpenAI key”避免用户把 OpenAI 凭据误填到 Gemini 节点key 缺失时同样报错并指向申请地址保存期真实探测如上文validateConfig所述用一次最小 API 调用把 key 无效、模型缺失、配额耗尽等问题在保存配置时提前暴露为警告而不是等到流水线运行时才失败。适用场景与限制结合源码与文档该节点的能力边界可以归纳为输入形态documentslane 上的图片文档内容按 base64 PNG 处理imagelane 支持任意mimeType来自 AVI 协议头输出形态始终是模型文本——图片描述、OCR 文本、视觉理解结论或场景说明documentslane 输出保留帧号、时间戳等元数据并发与成本每次推理独立客户端 独立线程 30 秒硬超时双 lane 场景下同一帧只计费一次maxConcurrent默认 5限制预览模型gemini-3_1-*能力更强但处于 preview 阶段稳定性不保证gemini-3_1-flash-image-preview的上下文窗口仅 131,072 token批量长视频帧分析时应优先选择 1M 窗口的 Profile重复超时不做第三次尝试极端情况下一次失败最多占用 60 秒2 × 30s等待。相关文件索引文件作用nodes/src/nodes/llm_vision_gemini/README.md节点官方文档本文主体来源nodes/src/nodes/llm_vision_gemini/services.json节点注册、lane、Profile 与字段 Schema 定义nodes/src/nodes/llm_vision_gemini/gemini_vision.pyChat推理类请求构造、超时、重试、错误映射nodes/src/nodes/llm_vision_gemini/IInstance.py双 lane 数据处理、AVI 协议、缓存复用、帧级容错nodes/src/nodes/llm_vision_gemini/IGlobal.py全局初始化、maxConcurrent、保存时 API 探测nodes/src/nodes/llm_vision_gemini/requirements.txt依赖声明google-genai1.14.0packages/ai/src/ai/common/llm_base.py该节点继承的LLMBase公共基类赞分享【免费下载链接】rocketride-serverHigh-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.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载相关推荐ModelsGenesis与nnU-Net集成指南肝脏肿瘤分割排名第一的秘密ModelsGenesis与nnU Net集成指南肝脏肿瘤分割排名第一的秘密 ModelsGenesis是医学影像分析领域最早的基础模型之一荣获MICCRocketRide llm_perplexity 节点深度解析把 Perplexity Sonar 搜索增强大模型接入 AI 流水线RocketRide llm_perplexity 节点深度解析把 Perplexity Sonar 搜索增强大模型接入 AI 流水线 本文基于 RocketRocketRide llm_openai_api 节点实战把任意 OpenAI 兼容端点接入 AI 流水线附源码级配置与容错解析RocketRide llm_openai_api 节点实战把任意 OpenAI 兼容端点接入 AI 流水线附源码级配置与容错解析 本篇以 RocketRi上一篇MMPose 3D Body Keypoint 数据集实战指南Human3.6M、CMU Panoptic 与 Campus/Shelf 的准备与使用下一篇DeviceUtil社区贡献指南如何为设备列表添加新设备支持创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表