先把当时的情况摆出来。LangChain 0.3 里用 ChatOpenAI 传 base_url 指向自建 vLLM,构造时直接报 TypeError: unexpected keyword argument,换成 openai_api_base 才通,环境变量也设过一遍没起作用。

真正麻烦的地方在于,几个原因的现象几乎一样。0.3 版本把参数名统一成 openai_api_base。还有一种是环境变量 OPENAI_BASE_URL 与显式参数冲突。

少数情况下是装的是 langchain-openai 的旧小版本。不容易想到的是,api key 字段名同样改成了 openai_api_key。

动手时先确认安装的 langchain-openai 版本

pip show langchain-openai

接着改用新参数名传地址

python chat_lc.py --base http://10.0.0.8:8000/v1

然后用环境变量统一配置

$env:OPENAI_BASE_URL='http://10.0.0.8:8000/v1'

发一条最短请求确认连的是自建服务

python -c "from langchain_openai import ChatOpenAI;print(ChatOpenAI(model='qwen2.5-7b').invoke('hi').content)"

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

别只看报错消失,验证要多做一步。构造不再抛 TypeError,请求出现在自建服务的访问日志里,返回内容与直连 curl 一致。

容易忽略的是,LangChain 的小版本经常改参数名,报 unexpected keyword 时先看包版本和签名,别急着降级整个依赖树。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189