返回文章

LangChain 聊天模型初始化:3 种常见方式

6 分钟阅读

开发 AI 应用时,大语言模型通常承担核心的推理与生成工作。在 LangChain 中,初始化聊天模型主要有两种方式:

  1. 使用供应商专属的集成类。LangChain 为部分模型供应商提供了专门的聊天模型类;例如 ChatOpenAIChatAnthropicChatDeepSeek。导入相应类后即可实例化。
  2. 使用统一的 init_chat_model 函数。该函数提供较一致的初始化入口,并根据指定的模型或供应商加载相应的集成;不同供应商支持的参数和能力仍应以各自文档为准。

可用的聊天模型集成见 Chat model integrations

使用供应商专属集成类

LangChain 为许多模型供应商提供了独立的集成包和聊天模型类。下面以 DeepSeek 的 ChatDeepSeek 为例说明初始化方式。

先安装依赖;这里使用 uv

uv add langchain langchain-deepseek python-dotenv

各依赖的作用如下:

  • langchain:LangChain 的核心包。
  • langchain-deepseek:DeepSeek 的 LangChain 集成包,提供 ChatDeepSeek
  • python-dotenv:从 .env 文件加载环境变量。

调用在线模型通常需要 API 密钥。建议将密钥放在项目的 .env 文件中,并将该文件加入 .gitignore,避免误提交到版本控制系统。例如:

DEEPSEEK_API_KEY=填写你的_API_Key

# 使用 ChatOpenAI 对接时必须配置;使用 ChatDeepSeek 官方接口时可省略
DEEPSEEK_BASE_URL=https://api.deepseek.com

随后调用 python-dotenv 提供的 load_dotenv(),将这些配置加载到环境变量中。

下面是一个包含自定义服务地址的完整示例:

import os

from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek

# 自动查找并加载 .env 文件
load_dotenv()

api_key = os.getenv("DEEPSEEK_API_KEY")
api_base = os.getenv("DEEPSEEK_BASE_URL")

model = ChatDeepSeek(
    model="deepseek-v4-flash",
    api_key=api_key,
    api_base=api_base,
    # temperature=0,
    # max_tokens=None,
    # timeout=None,
    # max_retries=2,
)

# invoke 是同步(阻塞)调用,返回 AIMessage 对象
response = model.invoke("你好")

print(response.content)

以上示例中的 deepseek-v4-flash 是 DeepSeek 当前提供的模型名之一。模型名称、可用能力和服务地址可能会变化,应以 DeepSeek API 文档 为准。

如果使用 DeepSeek 官方 API,通常不需要显式传入 api_keyapi_base

from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek

load_dotenv()

model = ChatDeepSeek(model="deepseek-v4-flash")

response = model.invoke("你好")

print(response.content)

这是因为 ChatDeepSeek 会从环境变量 DEEPSEEK_API_KEY 读取 API 密钥,并默认使用 DeepSeek 官方服务地址 https://api.deepseek.com

其他供应商的集成流程也大致相同:安装对应的 LangChain 集成包、配置凭证、实例化聊天模型,然后根据该供应商的文档调整模型名称和参数。不同集成的构造函数、环境变量名称及能力并不完全一致,不能直接照搬 ChatDeepSeek 的参数。

使用 init_chat_model

init_chat_model 是聊天模型的统一初始化入口。安装相应供应商的集成包后,可用同一套调用方式创建并调用模型;通用参数(如 temperaturemax_tokens)可直接传入。供应商专有参数和能力仍需查阅对应集成文档。

仍以 DeepSeek 为例(需已安装 langchain-deepseek 并配置 DEEPSEEK_API_KEY):

from dotenv import load_dotenv
from langchain.chat_models import init_chat_model

load_dotenv()

model = init_chat_model("deepseek:deepseek-v4-flash")

response = model.invoke("你好")
print(response.content)

模型可用 provider:model 格式指定;推荐显式写出供应商,便于阅读,也避免模型名解析产生歧义。等价的写法是:

from langchain.chat_models import init_chat_model

model = init_chat_model(
    model="deepseek-v4-flash",
    model_provider="deepseek",
)

适用场景:希望以统一接口切换或比较不同供应商的模型。若需要供应商专有的配置或能力,直接使用 ChatDeepSeekChatOpenAI 等集成类通常更清晰。

参考:Providers and modelsModels

使用 OpenAI 兼容写法

对于提供 OpenAI Chat Completions 兼容接口的服务,可以使用 ChatOpenAI,并通过 base_url 指向该服务的地址。这种方式依赖 langchain-openai,与供应商专属集成包无关:

uv add langchain-openai

以 DeepSeek 为例:

import os

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

model = ChatOpenAI(
    model="deepseek-v4-flash",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL"),
)

response = model.invoke("你是什么模型?")
print(response.content)

使用 init_chat_model 时,指定 model_provider="openai" 也会创建 ChatOpenAI

import os

from langchain.chat_models import init_chat_model

model = init_chat_model(
    model="deepseek-v4-flash",
    model_provider="openai",
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL"),
)

适用场景:服务没有专属 LangChain 集成包,或需要接入代理、聚合平台和自建兼容网关。

注意:OpenAI 兼容仅表示接口格式兼容,并不保证完整支持供应商专有功能。第三方服务的非标准参数、响应字段或能力可能无法被 ChatOpenAI 识别或保留;有专属集成包时,优先使用专属类。

评论