LangChain 调用 OpenAI 兼容接口:先验证端点,再配置 ChatOpenAI

更新于 2026-10-27 · runapi.cfd

简答:LangChain 调用 OpenAI 兼容接口,先确认 API Key、Base URL、模型 ID 三个字段,再用非流式 Chat Completions 请求验证端点。验证通过后,用 Python 的 base_url 或 JavaScript 的 configuration.baseURL 初始化 ChatOpenAI;RunAPI 的公开页面没有提供可直接核对的完整 LangChain 固定配置,因此端点和模型名应以当前账户文档为准。

定义:OpenAI 兼容接口是采用部分 OpenAI 请求与响应格式的服务端点,但“兼容”不等于完整支持 Chat Completions、Responses API、工具调用、结构化输出和流式用量等全部能力。

先看三步速查:不要一开始就怀疑 LangChain

  1. 确认 API Key:确认密钥存在、未被截断,并使用服务端要求的认证方式。
  2. 确认 Base URL:从当前接口文档复制服务端要求的根地址;是否包含 /v1,不能凭经验判断。
  3. 确认模型 ID:使用账户或接口文档中实际可调用的模型标识,不要把展示名称当作模型 ID。

推荐先发一次非流式 Chat Completions 请求。如果这一步已经返回 401、404 或模型错误,先修正接口层配置,再接入 LangChain。LangChain 官方 Python 文档说明,ChatOpenAI 可以通过显式 base_url 或环境变量设置自定义端点;JavaScript 文档则使用 configuration.baseURL。可分别查看LangChain Python ChatOpenAI 文档和LangChain JavaScript ChatOpenAI 文档。

三类接口的接入判断
场景优先做法不要默认推断
标准 OpenAI 接口按 ChatOpenAI 官方示例配置 Key、模型和接口地址不要把其他平台的模型 ID 混用
OpenAI 兼容网关先用网关文档验证 Chat Completions,再填写 Base URL不要默认支持 Responses、工具调用或所有扩展字段
扩展型提供商接口优先查找该提供商的 LangChain 专用集成不要假设非标准 reasoning 字段会自动保留

RunAPI 配置:能核对的字段与不能直接复制的内容

本文不是 RunAPI 官方页面。检索到的 RunAPI 公开文档页面显示,页面存在域名启用提示,并在公告中列出部分分组可使用 v1/chat/completions、v1/responses 和 v1/messages 格式;但该公开页面没有提供本文可以逐字核验的“LangChain Base URL、账户模型 ID、密钥创建路径”完整配置闭环。相关信息应以RunAPI 当前公开文档页面和登录后账户文档为准。

因此,本文不写入固定的 RunAPI 域名、模型名或可复制的供应商配置,避免读者把旧地址、展示名称或其他账户的模型 ID 直接用于项目。你可以按下面的字段级清单核对:

  • 接口端点:复制文档中的 API 请求地址,并确认它是 Base URL、版本路径还是完整资源路径。
  • 路径后缀:确认文档示例最终请求的是 /chat/completions、/responses 还是其他资源;不要自行追加。
  • 模型 ID:从当前账户可用模型列表或请求示例复制,不能根据模型显示名猜测。
  • 认证方式:确认是否使用 Authorization: Bearer,以及 Key 是否绑定特定分组、权限或额度。

如果文档没有明确写出某个字段,本文将其视为未核实,不建议把站内旧文章、搜索摘要或他人配置当作固定答案。

Python:用 ChatOpenAI 完成最小 invoke

安装 LangChain 的 OpenAI 集成包:

python -m pip install -U langchain-openai

先在当前终端设置临时环境变量。下面三个值是占位符,必须替换为当前服务文档或账户控制台给出的值:

export OPENAI_API_KEY='替换为你的 API Key' export OPENAI_BASE_URL='替换为当前文档给出的 Base URL' export MODEL_ID='替换为服务端实际支持的模型 ID'

最小 Python 示例:

import os from langchain_openai import ChatOpenAI llm = ChatOpenAI( model=os.environ["MODEL_ID"], api_key=os.environ["OPENAI_API_KEY"], base_url=os.environ["OPENAI_BASE_URL"], temperature=0, timeout=60, max_retries=0, ) response = llm.invoke("用一句话解释什么是 API") print(response.content)

LangChain 官方文档列出 base_url、api_key、timeout 和 max_retries 等初始化参数,并说明自定义 Base URL 可以通过显式参数或环境变量传入。环境变量优先级和默认行为可能随当前 langchain-openai 版本变化,升级依赖后应重新查看官方 Python 文档。

这段代码只验证普通非流式文本调用,不代表工具调用、结构化输出、推理字段或 Responses API 一定可用。

JavaScript/TypeScript:用 configuration.baseURL 接入

安装 JavaScript 集成包:

npm install @langchain/openai @langchain/core

设置环境变量后,使用 configuration.baseURL 传入自定义端点:

import { ChatOpenAI } from "@langchain/openai"; for (const name of ["OPENAI_API_KEY", "OPENAI_BASE_URL", "MODEL_ID"]) { if (!process.env[name]) throw new Error(`缺少环境变量: ${name}`); } const llm = new ChatOpenAI({ model: process.env.MODEL_ID, apiKey: process.env.OPENAI_API_KEY, temperature: 0, timeout: 60000, maxRetries: 0, streamUsage: false, configuration: { baseURL: process.env.OPENAI_BASE_URL, }, }); const response = await llm.invoke("用一句话解释什么是 API"); console.log(response.content);

LangChain JavaScript 官方文档明确给出了 configuration.baseURL 的自定义地址写法,也说明某些代理或第三方服务不支持用于流式用量的 stream_options,此时可以将 streamUsage 设为 false。这项设置只针对流式用量参数,不会修复错误的 Base URL、模型 ID 或 API Key。参数名称和版本行为应以当前 JavaScript 文档为准。

先用 curl 验证:最终 URL 必须以服务文档为准

重要:下面的命令只适用于“Base URL 不包含完整资源路径,且服务端公开支持 OpenAI Chat Completions 格式”的情况。它会主动拼接 /chat/completions;如果服务文档给出的 Base URL 已经包含版本或资源路径,请按文档改写,不能机械复制。

curl "$OPENAI_BASE_URL/chat/completions" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"'"$MODEL_ID"'","messages":[{"role":"user","content":"ping"}],"stream":false}'

自查时只记录最终请求 URL、HTTP 状态码和错误类型,不要把完整 Key 写入终端录屏、日志、Git 或 CI 输出。若 curl 成功而 LangChain 失败,应对比两次请求的最终 URL、模型字段、请求格式和是否启用了 Responses API。

  • 401:检查当前终端是否读取到了正确 Key,认证头是否为服务端要求的格式。
  • 403:检查账户权限、模型分组、来源限制或额度状态;公开资料没有明确的规则时,以账户文档为准。
  • 404:检查 Base URL 是否重复包含版本路径、是否误填完整资源路径,以及模型 ID 是否存在。
  • 429:检查服务端返回的限速、并发或额度提示;降低请求频率只能作为自查步骤,不能据此推断具体限额。
  • 超时:先使用非流式最小请求,并设置当前版本支持的 timeout,再确认接口是否能返回最小响应。

Base URL、Responses API 和高级能力怎么判断

Base URL 不是一个可以脱离服务文档固定回答的字符串。LangChain 的 SDK 会根据适配器和当前版本组织请求路径;官方 Python 示例把 base_url 作为自定义服务地址传入,JavaScript 示例则通过 configuration.baseURL 传入。因此,应以服务端请求示例和当前 SDK 实际生成的最终 URL 为准,而不是一律添加或删除 /v1。

普通对话建议先使用 Chat Completions 风格的 invoke。LangChain 官方 Python 文档说明,设置 use_responses_api=True 或使用某些 Responses 专属能力后,请求会转向 Responses API;如果兼容服务只实现 Chat Completions,可能出现路径不存在、参数不支持或响应解析错误。只有服务端文档明确支持 Responses API,并且 LangChain 版本与字段匹配时,才进行下一步验证。

流式输出、工具调用、结构化输出、推理字段和多模态输入都要单独确认。LangChain 官方文档还指出,第三方服务的非标准响应字段不一定会被 ChatOpenAI 提取或保留;如果服务扩展了 OpenAI 格式,应考虑其专用 LangChain 集成。

出现问题时的判断顺序
现象先查什么暂时不要做什么
普通文本也失败Key、Base URL、模型 ID、最终请求路径不要先改工具调用或提示词
curl 成功,LangChain 失败SDK 版本、自动拼接路径、请求模式不要直接更换模型猜原因
普通调用成功,流式失败streamUsage、stream_options 和服务端流式格式不要把流式用量错误当成 Key 失效
文本成功,高级能力失败工具、结构化输出、Responses 和非标准字段支持情况不要把“兼容接口”理解为功能完全等价

密钥建议放在环境变量或专用密钥管理系统中。临时变量通常只影响当前终端;持久化变量更方便,但要额外检查 shell 历史、调试日志、CI 输出和代码仓库是否泄露。

参考资料与版本边界

本文以检索到的公开文档为依据:LangChain Python 文档用于核对 ChatOpenAI、base_url、环境变量、stream_usage 和 Responses API;LangChain JavaScript 文档用于核对 configuration.baseURL 与 streamUsage;RunAPI 公开页面仅用于说明其页面公告和接口格式提示,不作为固定 Base URL、模型 ID 或账户权限的来源。

由于 LangChain、OpenAI 兼容网关和账户模型目录都会变化,安装或升级依赖后应重新核对当前文档。公开资料未明确的端点、模型、权限和限速信息,本文不作推断。

常见问题

LangChain 的 Base URL 应该写域名、/v1,还是 /chat/completions?

没有适用于所有服务的固定答案。应复制服务端文档中的 Base URL,并确认 SDK 会把请求发送到哪个最终路径。通常不要把完整的 /chat/completions 资源路径当作 Base URL;/v1 是否保留也不能凭经验判断。

为什么 curl 能调用,LangChain 却返回 404?

先打印或核对两次请求的最终 URL、模型 ID 和请求模式。重点检查 SDK 是否重复拼接版本路径、curl 是否调用 Chat Completions 而 LangChain 使用了 Responses API,以及模型字段是否完全一致。

RunAPI 是否有可以直接复制的 LangChain Base URL?

本文检索到的 RunAPI 公开文档页面没有提供可完整核验的 LangChain Base URL、模型 ID 和账户配置闭环,因此本文不写固定地址。请从当前账户文档复制端点,并先用与文档一致的最小请求验证。

第三方兼容接口需要设置 streamUsage 或 stream_usage 为 false 吗?

不一定。只有服务端不支持流式用量相关的 stream_options,或流式请求因此报参数错误时,才考虑关闭。关闭该选项不会修复错误的 API Key、Base URL 或模型 ID。

ChatOpenAI 能否直接调用所有 OpenAI 兼容模型?

不能保证。ChatOpenAI 主要针对 OpenAI 规范;第三方服务可能只实现部分 Chat Completions,或返回非标准 reasoning、工具调用和结构化输出字段。先验证普通文本,再逐项确认高级能力。

什么时候应该使用 LangChain 的 Responses API?

只有在服务端明确支持 Responses API,并且当前 LangChain 版本的参数与响应格式匹配时再使用。普通兼容网关排错时,先保持非流式 Chat Completions 请求更容易定位问题。

相关阅读

参考资料

  1. LangChain 官方 Python ChatOpenAI 集成文档(docs.langchain.com)
  2. RunAPI 公开文档页面
温馨提示
置顶

【RunAPI 新域名启用通知】
https://runapi.host
原域名 runapi.cfd 需要使用代理才能访问,RunAPI 现已启用新域名: https://runapi.host

新域名可直接访问,账户、余额及服务数据均不受影响。(注意:新域名在非代理环境下只可见国内模型,api调用不受影响)

2 个月前 · 2026-08-07 11:30

claude-haiku-5.5已上线

14 小时前 · 2026-10-09 12:14

gemini-nano-banana-2.1已上线

1 天前 · 2026-10-08 21:58

🎉 国庆限时充值 9 折! 10 月 2 日 18:00:00 — 10 月 7 日 23:59:59,点击任意额度充值并选择支付宝支付,支付页面将自动享受 9 折优惠!

⚠️ 本次优惠仅限支付宝支付,Creem 支付暂未同步折扣,仍按原价结算。

1 周前 · 2026-10-02 19:02

gpt-6.1-sol已上线

1 周前 · 2026-10-01 23:20

claude-sonnet-5-5已上线
coding和claude_normal分组可使用

1 周前 · 2026-09-29 18:20

claude-opus-5-5, gpt-6-sol已上线

2 周前 · 2026-09-23 14:11

grok-4.7上线,grok、default分组可用
支持chat, responses,messages格式

2 周前 · 2026-09-22 13:35

【分组更新通知】
deepseek-sale分组上线,价格5折,支持v1/messages;v1/responses;v1/chat/completions格式请求

deepseek-v4.1-flash同步上线

提示:glm-sale和kimi-sale分组价格5折,接口均服务正常

3 周前 · 2026-09-13 23:10

gpt-image-2.5上线

0 个月前 · 2026-09-10 21:49

因官方下架gpt-5.4模型,平台codex分组已同步下架,需要调用该模型可切换至default/plus分组使用

1 个月前 · 2026-09-06 16:27

gpt-6-astra已上线

1 个月前 · 2026-09-05 14:58

gemini-3.8-flash已上线

1 个月前 · 2026-09-05 04:06

claude-fable-5-1已上线

1 个月前 · 2026-09-03 13:33

【分组更新通知】
1.kimi-sale分组5折
2.glm-sale分组5折
3.grok分组降价为0.7折,资源为grok heavy
以上均可通过v1/chat/completions;v1/responses;v1/messages格式调用

1 个月前 · 2026-09-03 10:50

glm-5.3, glm-5.3-flash
qwen3.8-flash, qwen3.7-flash
均已上线,default分组即可调用

1 个月前 · 2026-08-27 22:46

【公告】关于模型访问受限域名的处理说明
为遵守相关合规要求,平台已对模型访问政府类网站(gov域名)实施限制。
若您在对话过程中遇到提示“内容审计命中风险规则,请调整输入后重试”的报错,烦请移除对话中涉及的gov相关链接后再重新请求。
感谢您的理解与配合。

1 个月前 · 2026-08-22 22:11

最近codex更新后,如果遇到“401 token not provided”这个错误,是因为环境变量失效,重新配置后重启codex即可

1 个月前 · 2026-08-22 00:51

gemini-3.7-flash上线

1 个月前 · 2026-08-15 23:21

grok-4.6
qwen3.8-max
均已上线

1 个月前 · 2026-08-13 15:49