🎯 课程主题
介绍使用ChatOpenAI类作为兼容方案统一调用不同厂商的大模型(DeepSeek、智谱AI等),解决专用接口参数命名不统一、部分厂商无专用类的问题。
📝 核心知识点
1. 为什么需要兼容用法
- 概念说明:LangChain没有为所有大模型厂商提供专用接口,且各厂商专用接口的参数命名五花八门(如有的叫
api_base,有的叫base_url),增加了记忆负担。 - 关键细节:
- 只有部分厂商被列入LangChain的"对话模型"列表中,不在列表中的无法通过专用类调用。
- 腾讯混元等模型还有额外的特殊参数(
secret_id、secret_key),配置繁琐。
2. ChatOpenAI作为统一接口
- 概念说明:由于ChatGPT是大模型崛起的标志性事件,后续大部分大模型都兼容了OpenAI的API格式。因此
ChatOpenAI可作为"通用适配器"统一调用各类模型。 - 关键细节:
- 通过
ChatOpenAI传入不同的base_url、api_key和model,即可调用不同厂商的模型。 - 与专用类不同,
ChatOpenAI的base_url参数必须显式传入(因为是通用类,没有针对特定厂商的默认地址)。
- 通过
3. 调用DeepSeek(ChatOpenAI方式)
- 概念说明:使用
ChatOpenAI配合DeepSeek的API地址和密钥调用DeepSeek模型。 - 关键细节:
base_url填入https://api.deepseek.com,api_key从.env读取。
4. 调用智谱AI(ChatOpenAI方式)及兼容性问题
- 概念说明:使用
ChatOpenAI调用智谱AI模型时,Base URL必须使用智谱AI专门提供的OpenAI兼容端点,而非专用类的默认地址。 - 关键细节:
- 专用类(
ChatZhipuAI)内部写死的地址与OpenAI兼容端点不同,可能导致调用失败(报错not found error)。 - 解决方案:从智谱AI开发文档中找到OpenAI兼容的端点地址(通用端点),替换
.env中的Base URL。 - 一旦更新了Base URL,之前的专用类调用也不会受影响(因为专用类内部已写死自己的地址)。
- 专用类(
🏗️ 架构与工作流
ChatOpenAI (统一接口)
├── base_url → DeepSeek API端点 → DeepSeek模型
├── base_url → 智谱AI OpenAI兼容端点 → 智谱AI模型
└── base_url → 其他兼容OpenAI格式的厂商端点 → 其他模型
💻 代码实战
# ========== 举例一:ChatOpenAI 调用 DeepSeek ==========
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv(override=True)
model = ChatOpenAI(
model="deepseek-v4-flash",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com"
)
response = model.invoke("1+1等于多少")
print(response)
# ========== 举例二:ChatOpenAI 调用智谱AI ==========
# 注意:必须使用智谱AI提供的OpenAI兼容端点,不能用专用类的默认地址
model = ChatOpenAI(
model="glm-4-flash",
api_key=os.getenv("ZHIPUAI_API_KEY"),
base_url="https://open.bigmodel.cn/api/paas/v4/" # OpenAI兼容端点
# 不能使用专用类的默认地址,否则会报 not found error
)
response = model.invoke("请用一句话介绍你自己")
print(response)
⚠️ 常见问题与避坑指南
- Base URL不兼容导致报错:用
ChatOpenAI调用智谱AI时,必须使用智谱AI官方提供的"OpenAI兼容端点"地址,而非专用类ChatZhipuAI内部使用的地址,否则报not found error。 - 导入注意:导入
ChatOpenAI时有两个同名类,务必选择langchain_openai中的版本,另一个(langchain_community中的)已过时。 ChatOpenAI的Base URL必须显式传入:因为它是通用类,没有针对特定厂商的默认地址,不像专用类那样可以自动推断。- 各厂商的OpenAI兼容端点地址不同:DeepSeek用
https://api.deepseek.com,智谱AI用https://open.bigmodel.cn/api/paas/v4/,需从各自的官方文档获取。
💡 个人总结与延伸
ChatOpenAI兼容用法体现了"适配器模式"在LangChain中的应用——通过统一的OpenAI接口格式屏蔽不同厂商的API差异。这在多模型切换场景中非常实用(如A/B测试不同模型效果)。不过需要注意的是,虽然不是所有厂商的专用类都提供,但兼容性并非100%——某些厂商的特殊参数(如混元的secret_id)仍无法完全用ChatOpenAI覆盖。在生产环境中,建议优先使用厂商专用类(更稳定),以ChatOpenAI作为补充方案。