跳到主要内容
Router One

把 Flowise 的 OpenAI Custom Model 节点接到 Router One

Flowise 是开源的低代码 LLM 应用搭建工具:在画布上把节点连成 Chatflow、Agentflow V2 流程和 Assistants,而它们每一个都要挂一个聊天模型节点。它的 OpenAI 节点封装的是 LangChain JS 的 ChatOpenAI 类,底层是官方 openai Node SDK,所以带有可手填的 Model Name 和 Base Path 字段的 OpenAI Custom Model 节点,可以向任何 OpenAI 兼容端点发送 Chat Completions 请求。把它指向 Router One,一份凭证就能让流程用上目录里的任意聊天模型(GPT、Claude、Gemini、Grok、DeepSeek 系列),每次请求在 Dashboard → Logs 都有成本 Trace。本指南讲清 Flowise 的两个 OpenAI 节点该用哪个、为什么,各字段的准确取值,这个节点在 Chatflow、Agentflow V2 和 Assistants 里分别接在哪里,以及 Document Store 背后的 Embeddings 节点为什么要留在其他供应商。字段名称按 Flowise 3.1.4 核对;3.0.x 和官方文档里这两个节点仍叫 ChatOpenAI Custom 和 ChatOpenAI,BasePath、BaseOptions 也还是连写。

安装 Flowise 并创建专用 Key

Flowise 可以用 npm 或 Docker 运行。README 的快速开始是先 npm install -g flowise,再 npx flowise start,然后在浏览器打开 http://localhost:3000。Node.js 版本方面,README 要求 20.0.0 及以上,而已发布的 flowise 3.1.4 包在 engines 字段里声明的是 node ^24,官方 Dockerfile 也基于 Node 24 构建,所以用 Node 24 两边都满足。Docker 方面,README 给的做法是进入仓库的 docker 目录:把 .env.example 复制为 .env,再运行 docker compose up -d;compose 文件拉取 flowiseai/flowise 镜像并发布 PORT 端口,.env.example 里它的值是 3000。在 Router One 的 Dashboard → API Keys 为这个 Flowise 实例单独创建一把 Key 并设置 maxSpend 消费上限;下一步把它存成 Flowise 凭证。

terminal
# Node.js:README 要求 >= 20.0.0;flowise 3.1.4 的 engines 声明为 node ^24
npm install -g flowise
npx flowise start
# 然后打开 http://localhost:3000

# 或者用 Docker Compose,在 Flowise 仓库的 docker 目录下执行
cp .env.example .env
docker compose up -d

把 Key 存成 OpenAI API 凭证

在左侧菜单打开 Credentials,点 Add Credential,选择 OpenAI API,Credential Name 起个名字(例如 router-one),把 Router One Key 填进 OpenAI Api Key。在节点上点 Connect Credential → Create New 打开的是同一个对话框。Flowise 会把第三方 Key 加密后保存为凭证:默认在首次启动时随机生成一把加密密钥,存放在 SECRETKEY_PATH 指向的路径下。如果这把密钥被重新生成或路径变了(例如重建容器时没有带上数据卷),官方文档提醒,已保存的凭证会报 Credentials could not be decrypted。设置 FLOWISE_SECRETKEY_OVERWRITE 可以固定加密密钥,重启后凭证依然可用;官方 compose 文件也把 ~/.flowise 挂载进了容器。OpenAI API 凭证可以建多份,给另一个流程再配一把 Router One Key,只是多加一份凭证。Flowise 自己的 API Keys 页面与此无关:那里的 Key 保护的是 Flowise 的接口,不是模型调用。

docker/.env
PORT=3000
# 固定用于加密凭证的密钥,重建容器后仍能解密已保存的凭证
FLOWISE_SECRETKEY_OVERWRITE=<a-long-random-string-you-keep>
# SECRETKEY_PATH=/your_secret_path/.flowise

把 Flowise 配置到 Router One base URL

在画布上点 Add Nodes,展开 Chat Models,拖入 OpenAI Custom Model(3.1 之前叫 ChatOpenAI Custom)。要用这个节点,而不是默认的 OpenAI 节点:默认节点的 Model Name 是一个不能手填的下拉框,选项来自 Flowise 的 models.json,里面是不带前缀的 OpenAI 模型名,默认值是 gpt-4o-mini;Custom 节点的 Model Name 则是文本框,可以直接填 anthropic/claude-sonnet-5 这样的精确目录 ID,前缀也要保留。Connect Credential 选上一步建好的 OpenAI API 凭证。Temperature 默认 0.9,每次请求都会带上。其余字段在 Additional Parameters 里。Streaming 默认开启。Max Tokens 和 Timeout 可选;Timeout 会以毫秒为单位交给 openai SDK,SDK 自身的默认值是 10 分钟。Base Path 填带 /v1 的 https://api.router.one/v1:节点把它作为 configuration.baseURL 交给 LangChain,openai SDK 再在后面拼接 /chat/completions,所以每次调用都是 POST /v1/chat/completions。Base Options 留空;它是一个 JSON 对象,用来追加默认请求头,而 Key 已经通过 Authorization 头发送。把节点连到链或 Agent 上,保存流程,在聊天面板里发一条消息:

flowise-openai-custom-model
# Flowise 3.1.x canvas → Add Nodes → Chat Models → OpenAI Custom Model
# (3.0.x and the official docs: ChatOpenAI Custom, with BasePath / BaseOptions)
Connect Credential:  OpenAI API credential holding sk-your-router-one-key
Model Name:          <exact-model-id-from-/models>
Temperature:         0.9
# Additional Parameters
Streaming:           on
Max Tokens:          (optional)
Timeout:             (optional, milliseconds)
Base Path:           https://api.router.one/v1
Base Options:        (leave empty)

这个节点接在哪里,各处实际发出什么请求

Flowise 里凡是需要语言模型的地方,接的都是 Chat Models 节点,所以同一份 OpenAI Custom Model 配置在各个搭建器里通用。第五到第八行标出的,是会失败、或根本不会到达网关 Chat Completions 端点的几种情况:

Flowise 里的位置实际发出的请求需要核对什么
Chatflow:OpenAI Custom Model → LLM Chain、Conversation ChainPOST https://api.router.one/v1/chat/completions,每条消息一次请求目录里的任意聊天模型;每条消息在 Dashboard → Logs 对应一行
Chatflow:Tool Agent → Tool Calling Chat Model每轮迭代一次带 tools 的 Chat Completions 请求;Max Iterations 默认留空,即 15 轮模型详情页标明支持工具调用;在 Additional Parameters 里调小 Max Iterations
Agentflow V2:Agent、LLM、Condition Agent 节点 → ModelModel 下拉列出所有 Chat Models 节点,包括 OpenAI Custom Model,选中后它的字段就地展开;每一步或每轮工具调用一次请求Agent 节点没有 Max Iterations 字段,Key 上的 maxSpend 才是硬性止损
Assistants → Custom Assistant选用一个 Chat Models 节点,发出的同样是 Chat Completions 请求OpenAI Assistant 类型调用的是 OpenAI 的 Assistants API,Router One 不提供;Flowise 也已把该类型标为即将弃用
默认 OpenAI 节点 + Base Path路径相同,但 Model Name 只能选 models.json 里的名字,默认 gpt-4o-mini这些名字不是目录 ID;改用 Custom 节点,或通过 MODEL_LIST_CONFIG_JSON 提供你自己的 models.json
默认 OpenAI 节点的 Reasoning Summary;Agent 节点的 OpenAI Built-in ToolsLangChain 会把这次调用改发到 POST /v1/responsesRouter One 的 /v1/responses 只服务当前在售的 GPT 系列与 DeepSeek ID;Custom 节点上这两个选项都不会出现
Document Stores 与向量库 upsert → Embeddings 节点发往该节点自己的供应商或 Base Path 的 embeddings 请求Router One 没有 /v1/embeddings:OpenAI Embedding 留在其他供应商,或在本地跑 Ollama Embedding
Prediction API:POST /api/v1/prediction/:idFlowise 自己的接口,在 3000 端口上,由 Flowise 的 API Key 保护不是网关路径:其中的 /v1 属于 Flowise,sk- Key 不会用在这里

给一个 Flowise 实例定预算,并核对它的模型调用

向流程发一条消息,很少只对应一次模型请求。Tool Agent 每轮迭代调用一次模型,直到模型不再要求调用工具,上限是 Max Iterations(留空即 15)。Agentflow V2 的 Agent 节点只要模型还在返回工具调用就会继续请求,而且没有迭代次数字段。LLM 和 Condition Agent 节点各自再加一次请求,流程里的循环会把这些全部放大。LangChain 还会重试失败的调用,默认最多 6 次,每一次到达网关的尝试都是独立请求,各有自己的 Trace 和费用;但它不重试 400、401、402、403 和 404,所以 Key 触及 maxSpend 消费上限时,流程在第一个 402 就停下,不会继续循环。给每个 Flowise 实例单独一把设了 maxSpend 的 Router One Key,或者再细一层:凭证是按节点选择的,面向公众的流程可以用另一份 OpenAI API 凭证,里面放另一把 Key 和另一个上限。Dashboard → Logs 是计费依据,每次请求一行,含 request_id、模型、tokens、费用、延迟和状态。按时间和模型把这些行与某次运行对上;Agentflow 的运行还会列在 Flowise 的 Executions 页面里,便于两边对照。被 Flowise 中途断开的流式请求会记为 HTTP 499 client_cancelled。Router One 只看得到模型调用:工具、记忆、向量库和流程分支都在 Flowise 内部运行。

Flowise 该填哪个模型 ID?

从 /models 页复制精确的模型 ID,保留大小写、连字符和版本后缀,不要用展示名称代替。打开该模型的详情页,核对支持的 API 端点、上下文窗口和工具调用等能力,再与 Flowise 当前选择的 provider 和功能对应。模型出现在目录里,不等于当前客户端能调用它的所有功能。建议为每个工具单独建 API Key,并设置 maxSpend 消费上限。

Flowise 用的是哪种 API 协议?

OpenAI 兼容描述的是接口格式,不能据此推断 Chat Completions(/v1/chat/completions)、Responses(/v1/responses)和 Anthropic Messages(/v1/messages)可以互换。先核对工具当前版本、provider 配置和实际请求路径,再查模型详情与 API 兼容性事实页。一次普通对话成功,也不能证明服务端工具、历史状态或文件编辑功能都受支持。

在 trace 里验证 Flowise 的调用

先在 Flowise 发出一次简单文本请求,再到 Dashboard → Logs 按时间、模型和 request_id 核对 trace:tokens、花费、延迟和状态码。成功后再分别验证流式输出、工具调用和多轮历史。失败时保留实际请求路径、完整错误消息及 request_id;没有对应日志时,先查客户端配置和网络,不能仅凭客户端报错认定是网关或上游故障。

常见问题

第一次运行就报 404,还附了 MODEL_NOT_FOUND 的排查链接,是模型不存在吗?

不一定。LangChain 会把所有 HTTP 404 都标成 MODEL_NOT_FOUND,并在消息末尾追加 Troubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/MODEL_NOT_FOUND/,不管真实原因是什么。要看链接前面那段文字:那是 openai SDK 的错误,即状态码加上网关自己的消息。Base Path 只填 https://api.router.one 时,SDK 会请求 /chat/completions,网关返回 404 not_found,消息里直接说明 base URL 需要以 /v1 结尾;写成 /v1/v1 也是同样的结果。路径没错的话,404 指向的是模型 ID:在默认 OpenAI 节点下拉框里选的名字(例如 gpt-4o-mini)不是目录 ID,请换成 OpenAI Custom Model 节点,并填入 /models 页的精确 ID。401 也会以同样方式被标成 MODEL_AUTHENTICATION;消息里出现 AUTH_INVALID_API_KEY,说明凭证里存的不是有效的 Router One Key。另外,如果 Base Path 留空,SDK 会回退到 https://api.openai.com/v1,Router One Key 在那边被拒绝,Dashboard → Logs 里不会有任何记录。

聊天正常,但 Document Store 的 upsert 失败。Embeddings 节点也能走 Router One 吗?

不能。Document Stores 和向量库节点调用的是单独的 Embeddings 节点(即 Document Store 里的 Select Embeddings 一步),而 Router One 没有 /v1/embeddings 端点。OpenAI Embedding 和 OpenAI Custom Embedding 各有自己的 Base Path 字段,不要把它指向 Router One。把 embeddings 留在提供该接口的供应商,或用 Ollama Embedding 在本地运行。Flowise 文档还有一条值得提前规划的约束:embedding 模型与向量库索引的维度必须一致,所以之后更换 embedding 模型就意味着重新 upsert。检索发生在 Flowise 内部,最终只有带着检索片段的提示词会以 Chat Completions 请求到达 Router One。

Flowise 什么时候会改用 Responses API,而不是 Chat Completions?

Flowise 3.1.4 锁定的是 @langchain/openai 1.2.5,它的 ChatOpenAI 类会在几种情况下自行把调用改发到 POST /v1/responses:在默认 OpenAI 节点上选了 Reasoning Summary,在 Agentflow V2 的 Agent 节点上勾选了 OpenAI Built-in Tools(Web Search、Code Interpreter、Image Generation),或者模型名里包含 codex 或 gpt-5.2-pro。OpenAI Custom Model 没有 reasoning 相关选项,Agent 节点也只有在模型选了默认 OpenAI 节点时才显示 OpenAI Built-in Tools,所以按本指南配置会一直走 Chat Completions。Router One 的 /v1/responses 只服务当前在售的 GPT 系列与 DeepSeek ID,模型发到了不对应的端点会收到 400,消息里写明 must be called via。如果确实需要默认节点,例如要用它的 Allow Image Uploads 开关(Custom 节点没有),可以通过 MODEL_LIST_CONFIG_JSON 变量让下拉框读取你自己的 models.json:把目录 ID 加到 chat → chatOpenAI → models 下,文件其余部分保持原样,因为其他节点的下拉框读的也是同一个文件。

Flowise 能通过网关用哪些模型?

选用当前目录中同时支持 Flowise 所用端点和所需功能的模型。精确 ID、当前单价与能力以 /models 及模型详情为准;不要仅按 GPT、Claude 等系列名判断兼容性。客户端能列出模型,只证明模型发现成功,仍需验证实际调用。

能列出模型,但调用报 400 或 404,怎么办?

先记录实际请求路径和错误消息,再核对精确模型 ID。400 可能是参数、工具类型或模型与端点不匹配;404 可能是请求路径或资源不存在,不能直接判定模型下线。若错误提示 must be called via,按它指明的端点调整客户端 provider,或换用支持当前端点的模型。不要在所有工具里统一增删 /v1 或 /chat/completions。

中国大陆能直连吗?

能。网关在大陆可直连、无需 VPN,配置与全球环境完全一致。

报 401/402/403/429 怎么排查?

先到 Dashboard → Logs 核对请求及错误消息。401 查 Key 是否传入和有效;402 查钱包余额与 maxSpend;403 查 Key 权限和访问限制;429 查请求频率、token 限额及上游限流,按错误来源处理。保留 request_id,再按错误码速查页逐项排查。