🎯 课程主题
介绍 LangChain 1.x 中 init_chat_model 函数作为统一的模型初始化接口,用于替代多种供应商特定的初始化方式。
📝 核心知识点
1. init_chat_model 统一初始化接口
- 概念说明:LangChain 1.x 推出的一种新的模型初始化方案,通过一个函数统一不同供应商的模型初始化流程。
- 关键细节:
- 底层仍然调用具体的类(如
ChatOpenAI、ChatDeepSeek等),本质是对这些类的封装。 - 通过
model_provider参数决定底层调用哪个具体的 model class。 - 支持两种写法:分别指定
model+model_provider,或合并为一个带冒号前缀的字符串(如"deepseek:deepseek-chat")。
- 底层仍然调用具体的类(如
2. 核心参数
model:模型名称(必填)。model_provider:模型提供者(可选但建议填写),支持的值包括openai、deepseek、ollama等在官方文档中列出的 provider。base_url:API 端点地址。api_key:API 密钥(当平台可被自动识别时,如同 deepseek 官网调用ChatDeepSeek,可省略,因为底层会自动加载环境变量中的配置)。
3. 三种调用方式的对比总结
- 个性化方式(如
ChatDeepSeek、ChatOpenAI、ChatTongyi等):直接使用对应供应商的专属类。 - 兼容方式(
ChatOpenAI兼容写法):通过ChatOpenAI类 + 修改base_url来兼容不同平台。 - 统一方式(
init_chat_model):LangChain 1.x 推荐的新写法,通过model_provider切换供应商。
4. model_provider 的自动推断机制
- 如果未显式指定
model_provider,init_chat_model会尝试自动推断。 - 自动推断并非对所有模型都有效,建议总是显式指定
model_provider。
🏗️ 架构与工作流
用户调用 init_chat_model(model, model_provider, ...)
│
▼
根据 model_provider 进行路由
│
├── "openai" → 底层调用 ChatOpenAI
├── "deepseek" → 底层调用 ChatDeepSeek
├── "ollama" → 底层调用 ChatOllama
└── ...
│
▼
返回统一的 BaseChatModel 实例 → 调用 .invoke()
💻 代码实战
from langchain.chat_models import init_chat_model
# 方式一:分别指定 model 和 model_provider
model = init_chat_model(
model="deepseek-chat",
model_provider="deepseek",
api_key="your-api-key",
base_url="https://api.deepseek.com/v1"
)
# 方式二:在 model 参数中使用 "provider:model" 格式
model = init_chat_model(
model="deepseek:deepseek-chat",
api_key="your-api-key",
base_url="https://api.deepseek.com/v1"
)
# 方式三:调用 closeAI 平台(model_provider 需写 "openai",而非 "deepseek")
model = init_chat_model(
model="deepseek-v4-flash",
model_provider="openai",
base_url="https://api.closeai-asia.com/v1"
)
# 方式四:调用 OpenAI 原生模型(如 gpt-4o-mini)
model = init_chat_model(
model="gpt-4o-mini",
model_provider="openai",
base_url="https://api.closeai-asia.com/v1"
)
response = model.invoke("你好")
print(response.content)
⚠️ 常见问题与避坑指南
model_provider不能随意填写:必须是官方文档中列出的值。如阿里千问平台目前未被纳入init_chat_model体系,若调用千问模型,model_provider须写"openai"(兼容方式)。- 导入包时注意版本:不要使用
langchain_classic包中的init_chat_model(已 deprecated),应使用langchain.chat_models中的。 model_provider与平台不匹配会报错:例如使用 closeAI 平台调用 deepseek 模型时,model_provider应写"openai"而非"deepseek",因为底层实际调用的是ChatOpenAI类。
💡 个人总结与延伸
init_chat_model 统一了 LangChain 1.x 的模型初始化入口,降低了多供应商切换的认知成本。但本质上是对原有各类 ChatXxx 类的封装,旧有的个性化写法仍然可用。在实际项目中,建议根据团队规范选择统一写法或个性化写法;若需在多个供应商间频繁切换,使用 init_chat_model 更为便捷。