通过 OpenAI Compatible 供应商把 Langflow 接到 Router One
Langflow 是开源的可视化 LLM 流程与 Agent 搭建工具:在画布上连接 Chat Input、Prompt Template、Language Model、Agent 和各类工具组件,然后在编辑器里运行,或通过 Langflow 自己的 API 调用。从 Langflow 1.11 起,模型接入统一在 Settings → Model Providers 里全局配置一次,列表里有一个 OpenAI Compatible 供应商:填 base URL 和 Key,它就从该端点的 /v1/models 发现模型。把它指向 Router One,所有 Language Model 和 Agent 字段都能用一把 Key 调 GPT、Claude、Gemini、Grok 和 DeepSeek 系列,每次请求在控制台 → 日志都有成本 Trace。本指南按 Langflow 1.12.5(2026 年 10 月 6 日发布)编写,讲清供应商该填什么、内置 OpenAI 组件这条备选路径、一次 Agent 运行会产生多少请求,以及 embeddings 为什么必须留在别的供应商。
安装 Langflow 1.12,并为 这个 实例 单独建 Key
OSS Python 包要求 Python 3.10 到 3.14 和 uv:用 uv pip install langflow 安装,uv run langflow run 启动,打开 http://127.0.0.1:7860。其他官方方式是 Langflow Desktop(macOS 13 及以上,或 Windows 安装包)和 langflowai/langflow Docker 镜像,镜像同样监听 7860。OpenAI Compatible 供应商随 langflow 包一起安装,不需要额外装东西;它最早出现在 1.11.0,而「base URL 缺 /v1 时自动补上」是 1.12.0 才有的,所以在 1.11.x 上要自己写 /v1。然后到控制台 → API 密钥为这个 Langflow 实例单独创建一把设了 maxSpend 的 Router One Key。容器或无界面服务器上,供应商可以从环境变量读取同样两个值,Key 不必经过界面。来自服务器环境变量的 Key 从 Langflow 1.12.3 起受到保护:按 1.12.5 文档,只有目标主机列在 LANGFLOW_PROVIDER_CREDENTIAL_ALLOWED_HOSTS 里时,它才能发往自定义端点,内置 OpenAI 组件会执行这条检查,所以下面的容器写上了 api.router.one:
docker run -p 7860:7860 \ -e LANGFLOW_AUTO_LOGIN=false \ -e LANGFLOW_SUPERUSER_PASSWORD=<strong-password> \ -e OPENAI_COMPATIBLE_BASE_URL=https://api.router.one/v1 \ -e OPENAI_COMPATIBLE_API_KEY=sk-your-router-one-key \ -e LANGFLOW_PROVIDER_CREDENTIAL_ALLOWED_HOSTS=api.router.one \ langflowai/langflow:latest
把 Langflow 配置到 Router One base URL
点头像 → Settings → Model Providers,选 OpenAI Compatible。Base URL 填 https://api.router.one/v1:供应商用这个值作为 base_url 构造 LangChain 的 ChatOpenAI 客户端,客户端把请求发到 base URL 加 /chat/completions,所以 /v1 要写在这个字段里。API Key 填 Router One Key;Langflow 把它标为可选,只是因为本地服务可能不需要鉴权。点 Save:Langflow 会带着 Key(Bearer)请求 /v1/models 来验证这一对值,然后把发现的模型列在 Language Models 和 Embedding Models 下。在 Language Models 里启用要用的聊天模型,Embedding Models 下的全部保持关闭。在流程里添加 Language Model 组件(或 Agent),打开它的 Language Model 字段,选 OpenAI Compatible 和一个已发现的模型;显示的名称就是精确的目录模型 ID,含厂商前缀。这个供应商同一时间只能存一个端点,第二个网关或本地服务要用别的供应商条目:
- Base URL
- https://api.router.one/v1
# Langflow 1.12 → profile icon → Settings → Model Providers → OpenAI Compatible Base URL: https://api.router.one/v1 API Key: sk-your-router-one-key # Save → Langflow probes /v1/models and lists the catalog # Language Models: enable the chat model IDs you use # Embedding Models: leave off (no /v1/embeddings on the gateway) # In a flow: Language Model (or Agent) → Language Model field Provider: OpenAI Compatible Model: <exact-model-id-from-/models> # Alternative: Bundles → OpenAI → OpenAI component (advanced controls) OpenAI API Base: https://api.router.one/v1 OpenAI API Key: sk-your-router-one-key (Credential-type global variable) Model Name: type the exact ID, e.g. anthropic/claude-sonnet-5
Langflow 的哪个 字段 发出哪种 请求
到达网关的路径有两条。全局的 OpenAI Compatible 供应商是主路径;内置的 OpenAI 组件是备选,适合想手动输入模型 ID、或要在同一实例里保留第二个端点的情况。两条路径发的都是 Chat Completions:
| Langflow 字段 | 填什么 | 发出什么请求 / 怎么验证 |
|---|---|---|
| Model Providers → OpenAI Compatible → Base URL | https://api.router.one/v1 | 保存时探测 GET /v1/models;对话请求发到 POST /v1/chat/completions。1.12 会自动补上缺少的 /v1,1.11.x 不会 |
| Model Providers → OpenAI Compatible → API Key | 为这个实例单独创建、设了 maxSpend 的 Router One Key | 以 Authorization: Bearer 发送;探测返回 401 或 403 时保存失败并提示认证错误 |
| Language Models 开关 | 只开你要用的聊天模型 ID | /v1/models 列出整个目录,生图和视频 ID 也会被发现;不要为 Language Model 字段启用它们 |
| Embedding Models 开关 | 这个供应商下全部保持关闭 | Langflow 会把每个发现的 ID 同时标成 embedding 模型;Router One 没有 /v1/embeddings |
| Language Model 组件 → Model Name Override(高级) | 精确的目录模型 ID,或存着 ID 的全局变量 | 运行时覆盖所选模型;要求字段里是内置的模型选择,而不是连进来的模型对象 |
| Agent → Language Model | OpenAI Compatible + 模型详情页列出工具调用的模型 | 该字段只列标记为支持工具调用的模型,而 Langflow 把发现的语言模型一律标成支持,所以要自己核对模型详情页 |
| Agent → Max Iterations(高级) | 默认 15 | 一次 Agent 运行最多可发起的模型调用次数;每次调用都是独立的请求和 Trace |
| OpenAI 组件 → OpenAI API Base(高级) | https://api.router.one/v1 | 备选路径:Model Name 是可输入文字的下拉框,可以直接填 anthropic/claude-sonnet-5 这样的 ID;从 1.12.3 起,来自服务器环境变量的 Key 需要把 api.router.one 列进 LANGFLOW_PROVIDER_CREDENTIAL_ALLOWED_HOSTS |
备选 路径:内置的 OpenAI 组件
Bundles → OpenAI → OpenAI 是一个独立的语言模型组件,自带连接字段,与全局供应商无关。打开它的高级设置,把 OpenAI API Base 填成 https://api.router.one/v1;OpenAI API Key 填 Router One Key,最好存成 Credential 类型的全局变量(Settings → Global Variables),这样值在编辑器里是打码的。Model Name 是下拉框:列表是固定的一组 OpenAI 名称,不会从网关拉取,但可以直接输入文字,所以把精确的目录 ID 粘进去即可。从 Langflow 1.12.3 起,这个组件会检查 Key 发往哪里:如果 Key 的值同时存在于服务器环境变量里——该字段默认读取变量 OPENAI_API_KEY,上面的 docker run 也把 Router One Key 放进了 OPENAI_COMPATIBLE_API_KEY——那么除 api.openai.com 以外的主机都会被拒绝,报错 Refusing to send a server-provisioned API credential to the non-default endpoint 'api.router.one',除非该主机列在 LANGFLOW_PROVIDER_CREDENTIAL_ALLOWED_HOSTS 里;你手动填写、或存成自己的全局变量且服务器环境里没有同值副本的 Key,照常发送(按 1.12.5 源码,2026-10-09 核对)。有三处默认值和全局路径不同,第一次运行前最好知道。Max Retries 默认 5,Timeout 默认 700 秒。Temperature 0.1 和 Seed 1 会随每次请求发送,因为组件只对自己推理模型列表里的名称去掉这两个参数,而且是对 gpt-5 这类不带前缀的名称做完全匹配;带厂商前缀的目录 ID 永远匹配不上。如果 400 错误点名了 temperature 或 seed,那是模型拒绝了这个参数:先看 Langflow 显示的完整报错和 request_id(控制台 → 日志里也有这一行,流式请求在输出任何内容之前就失败的除外),改参数值,不要去改 base URL。要用这个组件驱动 Agent,把它的输出从 Model Response 切换成 Language Model,再连到 Agent 的 Language Model 端口。
给一个 Langflow 实例定 预算,embeddings 留在 别处
一次流程运行不等于一次请求。路径上的每个 Language Model 组件算一次请求,Agent 每拿到一次工具结果就再调一次模型,直到 Max Iterations 为止,失败的调用还会被底层的 OpenAI 客户端重试:全局供应商不传重试次数,用的是客户端默认的 2 次,而内置 OpenAI 组件要求 5 次。客户端每一次经网关发往模型的尝试,都是控制台 → 日志里独立的一行,带模型、tokens、费用、延迟、状态和 request_id。给每个 Langflow 实例单独一把设了 maxSpend 的 Router One Key,循环的 Agent 或定时调用方会在上限处停下并返回 HTTP 402,花费不会超过这个上限,你的其他 Key 也照常可用。检索类流程还需要 embedding 模型,这部分不能走网关:Router One 在 /v1/chat/completions 上提供聊天模型,没有 embeddings 和 rerank 端点,所以 Embedding Model 组件要留在别的供应商或本地 embedding 模型上,只把语言模型指向 Router One。Langflow 自己的 API 又是另一回事:你 Langflow 服务器上的 POST /api/v1/run/<flow-id> 用来运行流程,用 x-api-key 头里的 Langflow API Key 鉴权。那把 Key 也以 sk- 开头,所以两把 Key 要标清楚;Langflow 的 Key 不会发给网关,Router One 的 Key 也不要填进 x-api-key。Langflow 的 MCP server 同理,它把流程暴露成工具,与网关的 /v1 路由无关。
Langflow 该填 哪个 模型 ID?
从 /models 页复制精确的模型 ID,保留大小写、连字符和版本后缀,不要用展示名称代替。打开该模型的详情页,核对支持的 API 端点、上下文窗口和工具调用等能力,再与 Langflow 当前选择的 provider 和功能对应。模型出现在目录里,不等于当前客户端能调用它的所有功能。建议为每个客户端或应用单独建 API Key,并设置 maxSpend 消费上限。
Langflow 用的是哪种 API 协议?
OpenAI 兼容描述的是接口格式,不能据此推断 Chat Completions(/v1/chat/completions)、Responses(/v1/responses)和 Anthropic Messages(/v1/messages)可以互换。先核对工具当前版本、provider 配置和实际请求路径,再查模型详情与 API 兼容性事实页。一次普通对话成功,也不能证明服务端工具、历史状态或文件编辑功能都受支持。
在请求日志里 核对 Langflow 的调用
先在 Langflow 发出一次简单文本请求,再到控制台 → 日志按时间、模型和 request_id 找到这条记录,核对 Token、花费、总耗时和状态码。成功后再分别验证流式输出、工具调用和多轮历史。失败时保留实际请求路径、完整错误消息及 request_id;没有对应日志时,要么请求没到达网关(客户端配置或网络问题),要么网关在调用模型之前就拒绝了它——Key 问题的 401、余额不足或 Key 达到 maxSpend 上限的 402、Key 或账户自身限额触发的 429,或模型 ID、端点不对的 400 / 404;在输出任何内容之前就失败的流式请求也可能没有日志。看客户端收到的状态码和错误消息就能区分是哪一种;先确认这一点,再判断是不是网关或上游故障。
常见 问题
保存 OpenAI Compatible 供应商时 失败,这些 报错 分别是 什么 意思?
Langflow 通过请求 /v1/models 来验证供应商,报错是几条固定消息之一。'Authentication failed for the OpenAI-compatible endpoint. Check OPENAI_COMPATIBLE_API_KEY.' 表示探测拿到 401 或 403:Key 填错、已被删除,或多了空格;网关侧无效 Key 对应 401 AUTH_INVALID_API_KEY。'The OpenAI-compatible endpoint at … returned HTTP 404 for …/models. Check that the base URL points to an OpenAI-compatible API.' 表示路径不对,常见的是写成了 /v1/v1 或末尾多了一段路径;消息里会打印它实际请求的 URL,和 https://api.router.one/v1/models 对比即可。'Could not connect to the OpenAI-compatible endpoint at …' 和 '… timed out.' 是运行 Langflow 的那台机器或容器的网络错误;探测只等 5 秒且不跟随重定向,检查那台主机的出站 HTTPS 和代理设置。如果保存成功但模型列表是空的,说明验证通过后模型发现静默失败:重新打开供应商再保存一次,然后查看 Langflow 服务端日志。
我要的 模型 不在 Language Model 下拉里,怎么用 它的 精确 ID?
先看开关:下拉只显示在 Settings → Model Providers → OpenAI Compatible → Language Models 里启用的模型,而 Langflow 只把发现的前五个 ID 标为默认。只要 ID 在目录里,它就在那个列表里,启用即可。如果想在运行时再指定模型,打开 Language Model 组件的高级设置,把 Model Name Override 填成精确的目录 ID,例如 anthropic/claude-sonnet-5,或绑定到一个全局变量。另一条路是内置的 OpenAI 组件,它的 Model Name 下拉框可以输入任意 ID。无论哪种方式,ID 都从 /models 页逐字复制,含前缀。
Embedding Model 组件或 知识库 能不能也用 Router One?
不能。/v1/models 不带能力信息,所以 Langflow 会把发现的每个 ID 都放进 Embedding Model 的选择列表,Router One 的聊天模型也会出现在那里;但选中后 Langflow 会去调 /v1/embeddings,而网关不提供这个端点。embeddings 留在别的供应商或本地模型上,Embedding Models 下的 OpenAI Compatible 条目保持关闭。一把 Router One Key 仍然覆盖这个实例里所有的 Language Model 和 Agent 组件。
Langflow 能通过 网关用 哪些 模型?
选用当前目录中同时支持 Langflow 所用端点和所需功能的模型。精确 ID、当前单价与能力以 /models 及模型详情为准;不要仅按 GPT、Claude 等系列名判断兼容性。客户端能列出模型,只说明它从自身配置或 GET /v1/models 读到了这个 ID,仍需验证实际调用。
能列出 模型,但调用报 400 或 404,怎么办?
先记录实际请求路径和错误消息,再核对精确模型 ID。400 可能是参数、工具类型或模型与端点不匹配;404 可能是请求路径或资源不存在,不能直接判定模型下线。若错误提示 must be called via,按它指明的端点调整客户端 provider,或换用支持当前端点的模型。不要在所有工具里统一增删 /v1 或 /chat/completions。
中国 大陆能 直连吗?
能。网关在大陆可直连、无需 VPN,配置与全球环境完全一致。
报 401/402/403/429 怎么 排查?
先看客户端收到的响应:状态码、错误消息和 X-Request-ID 响应头。401(Key 缺失、不存在、已吊销或已过期)、402(钱包余额不足,或这把 Key 达到 maxSpend 上限)以及 Key 或账户自身限额触发的 429,都在调用任何模型之前被拒绝,不会出现在控制台 → 日志里;模型 ID 或端点写错导致的 400 / 404 也一样。401 查 Key 是否完整传入、在控制台 → API 密钥里是否仍有效;402 充值或调高这把 Key 的 maxSpend;403 请保留完整错误消息。429 请退避后重试;日志里能查到的 429 是网关重试之后上游仍返回的。保留 request_id,再按错误码速查页逐项排查。