LangChain 怎么配置自定义 API 中转:Python 与 JS 写法
LangChain / LlamaIndex 接自定义中转只有两处要改:base_url 和 Key。这篇给出 Python 与 JavaScript 的完整写法、环境变量配置、流式与工具调用的注意事项,附三个高频报错解法。
LangChain 是最容易接中转的框架之一——它用的就是 OpenAI 兼容协议,只要换掉 base_url 和 Key,原有代码一行业务逻辑都不用动。坑主要在版本差异:不同版本的 LangChain 环境变量名不同,旧教程的写法在新版里会静默失效。这篇把 Python 和 JavaScript 的正确写法都列出来,并给出流式输出和工具调用的注意事项。
结论先行
- Python:用
langchain-openai的ChatOpenAI,显式传api_key和base_url两个参数 - JavaScript:
ChatOpenAI构造函数里传configuration: { baseURL: ... } - 不要依赖旧的环境变量名,不同版本对
OPENAI_API_BASE的支持不一致,显式传参最稳 - 模型名直接用中转平台列表里的名字,不需要额外映射
Python 写法
pip install langchain langchain-openai
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o-mini",
api_key="sk-xxx",
base_url="https://api.zaimod.com/v1",
temperature=0,
)
resp = llm.invoke("用一句话介绍 LangChain")
print(resp.content)
关键点:
base_url要带/v1后缀。这是 OpenAI 兼容协议的约定路径,漏了会 404api_key参数在langchain-openai里直接支持;也可以走环境变量:
export OPENAI_API_KEY=sk-xxx
export OPENAI_BASE_URL=https://api.zaimod.com/v1
注意环境变量名是 OPENAI_BASE_URL(对应 OpenAI SDK v1),老教程里的 OPENAI_API_BASE 在部分版本仍被兼容但已不推荐,混用容易一个生效一个不生效。项目里存在多套 Key 时,显式传参优先于环境变量。
流式输出写法不变:
for chunk in llm.stream("写一首关于调试的短诗"):
print(chunk.content, end="", flush=True)
工具调用(bind_tools)依赖模型对 function calling 的支持。主流模型都支持,但切换到某个具体模型前,先发一条带工具定义的测试请求确认,别等 Agent 跑到一半才发现工具从未被触发。
JavaScript 写法
npm install @langchain/openai
import { ChatOpenAI } from "@langchain/openai";
const llm = new ChatOpenAI({
model: "gpt-4o-mini",
apiKey: "sk-xxx",
configuration: {
baseURL: "https://api.zaimod.com/v1",
},
});
const resp = await llm.invoke("用一句话介绍 LangChain");
console.log(resp.content);
JS 版的坑是参数名:构造参数里是 apiKey,baseURL 藏在 configuration 对象里。直接在顶层写 baseURL 不会报错但不会生效——这是最容易踩的一个静默失败。
LlamaIndex 写法
LlamaIndex 同样基于 OpenAI 兼容协议:
from llama_index.core import Settings
from llama_index.llms.openai_like import OpenAILike
Settings.llm = OpenAILike(
model="gpt-4o-mini",
api_key="sk-xxx",
api_base="https://api.zaimod.com/v1",
is_chat_model=True,
)
is_chat_model=True 必须显式设置,否则 LlamaIndex 会按 completion 协议发请求,部分兼容端点会报错。
三个高频报错的解法
1. 404 model not found。 十有八九是 base_url 漏了 /v1,或模型名与平台列表不一致。先用 curl 验证 base_url 是否正确,方法见 大模型 API 报错速查。
2. 401 invalid_api_key。 检查是否把官方渠道 Key 和中转 Key 混用——两者不通用,base_url 和 Key 必须配套。
3. 结构化输出(Pydantic)失败。 部分模型对 JSON mode 支持不完整,with_structured_output 解析会报格式错误。换成对该功能支持完整的模型,或在 prompt 里强化输出格式约束。base_url 迁移后还有哪些功能会失效,实测清单见 base_url 迁移后失效的 5 个功能实测。
选型提醒
LangChain 里换模型改一行字符串,成本低到容易忽略一个事实:不同模型的价格差异是十倍级的。批量场景把主力模型换成低成本模型,账单差别立竿见影。各模型的单价对比参考 2026 大模型 API 价格对比,组合策略见 月预算 50 美元的大模型组合方案。
还没有中转 Key 的话,注册 zaimod 后按本文代码把 base_url 换上即可,175 个模型共用一个 Key,LangChain、LlamaIndex、直接调 SDK 都走同一入口。协议层面的原理说明见 OpenAI 兼容协议是什么。
常见问题
Q:LangChain 版本旧(langchain.llms.OpenAI 那一代)还能这么配吗?
旧包已停止维护,环境变量名和新版不一致。建议升级到 langchain-openai,迁移成本远低于维护旧代码的成本。
Q:Agent、RAG 链这些高级功能需要额外配置吗?
不需要。LangChain 的所有组件共用同一个 LLM 实例,底层都走你配置的 base_url。需要确认的只有该模型是否支持对应能力(工具调用、JSON mode)。
Q:能同时在 LangChain 里接多个中转吗?
可以。创建多个 ChatOpenAI 实例,各自配不同的 base_url 和 Key,按场景分别传入即可。