‹ 博客归档

LangChain 1.2 入门(七):模型初始化——专用模型库

DeepSeek、智谱、千问的专用类怎么初始化,密钥放 .env 还是硬编码,为什么千问不能乱设 base_url,以及 OpenRouter、CloseAI 两个中转平台的接法。

这一篇讲「角度 1:使用模型提供商库」。LangChain 为常见厂商提供了专用 Model 类,比如 ChatOpenAI、ChatAnthropic、ChatDeepSeek、ChatOllama、ChatHunyuan、ChatTongyi、ChatZhipuAI。导入对应的类并实例化即可,最直接。注意不同模型传入的参数名可能不同,使用前先看对应源码或 API 参考。

LangChain 社区包提供的聊天模型类列表

07.1 通过专用 API 调用

07.1.1 DeepSeek 大模型

官网:https://www.deepseek.com/

依赖:langchain-deepseek 是使用 DeepSeek 的必要依赖。它依赖 langchain-openai,安装前者时 pip 会自动解析并安装后者。环境变量用 python-dotenv 管理。

# 切换 Python 环境
conda activate langchain1.2

# 安装 ChatOpenAI 依赖包
pip install langchain-openai

# 安装 ChatDeepSeek 依赖包
pip install langchain-deepseek

# 用于环境管理的包
pip install python-dotenv

在项目根目录创建 .env,把占位符换成自己的 API Key:

DEEPSEEK_API_KEY=<Your API Key>
DEEPSEEK_BASE_URL=https://api.deepseek.com

方式 1:显式读取配置并初始化。

from langchain_deepseek import ChatDeepSeek
import os
from dotenv import load_dotenv

# override=True:无论系统、终端或虚拟环境里是否已有同名变量,
# 都强制用 .env 中的值覆盖
load_dotenv(override=True)

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

deepseek_llm = ChatDeepSeek(
    api_key=DEEPSEEK_API_KEY,
    api_base=DEEPSEEK_BASE_URL,  # 注意:这里是 api_base,不是 base_url
    model_name="deepseek-v4-flash",
)
print(deepseek_llm.invoke("请介绍一下你自己"))

方式 2:依赖默认行为,只写模型名。ChatDeepSeek 要求系统中存在名为 DEEPSEEK_API_KEY 的环境变量;URL 在源码里有默认值。

from langchain_deepseek import ChatDeepSeek
from dotenv import load_dotenv

load_dotenv(override=True)

deepseek_llm = ChatDeepSeek(model="deepseek-v4-flash")
print(deepseek_llm.invoke("请介绍一下你自己"))

源码中的默认值:api_key 从 DEEPSEEK_API_KEY 读取,api_base 从 DEEPSEEK_API_BASE 读取,默认 https://api.deepseek.com/v1。

方式 3:硬编码(不推荐)。把 API Key 和模型参数直接写进代码,只适合临时测试,存在密钥泄露风险。生产环境优先用 .env,并把文件加入 .gitignore。

from langchain_deepseek import ChatDeepSeek

deepseek_llm = ChatDeepSeek(
    api_key="<Your API Key>",  # 明文暴露密钥,不要提交到仓库
    api_base="https://api.deepseek.com",
    model="deepseek-v4-flash",
)
print(deepseek_llm.invoke("请介绍一下你自己"))

07.1.2 智谱大模型

官网:https://www.bigmodel.cn/

相关依赖:langchain-community 包含 ChatHunyuan、ChatTongyi、ChatZhipuAI 等社区集成;ChatZhipuAI 的认证还需要 pyjwt。

pip install langchain-community
pip install pyjwt

在 .env 中补充:

ZHIPUAI_API_KEY=<Your API Key>
ZHIPUAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4/

确保账户余额或免费额度大于零,然后初始化:

import os
from langchain_community.chat_models import ChatZhipuAI
from dotenv import load_dotenv

load_dotenv(override=True)
ZHIPUAI_API_KEY = os.getenv("ZHIPUAI_API_KEY")
ZHIPUAI_BASE_URL = os.getenv("ZHIPUAI_BASE_URL")

zhipu_llm = ChatZhipuAI(
    model="glm-5.1",
    api_base=ZHIPUAI_BASE_URL,  # 可选
    api_key=ZHIPUAI_API_KEY,    # 可选
)
print(zhipu_llm.invoke("请介绍一下你自己"))

07.1.3 千问大模型

通过阿里云百炼平台调用:https://bailian.console.aliyun.com/

# ChatTongyi / 阿里通义千问依赖包
pip install dashscope

环境变量只需要 API Key:

DASHSCOPE_API_KEY=<Your API Key>

这里有一个容易踩的坑:一般不要添加 DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1。百炼平台提供两种访问方式——专用 SDK 和 OpenAI 兼容接口,这个 URL 是给后者准备的;ChatTongyi 底层基于专用 SDK,指定该 URL 会直接报连接错误,例如 ConnectionError: Connection aborted ... 远程主机强迫关闭了一个现有的连接。

import os
from langchain_community.chat_models import ChatTongyi
from dotenv import load_dotenv

load_dotenv(override=True)
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")

tongyi_llm = ChatTongyi(
    api_key=DASHSCOPE_API_KEY,
    model="qwen-plus",
)
print(tongyi_llm.invoke("请介绍一下你自己"))

07.2 兼容用法

一方面,LangChain 没有为所有厂商提供专用接口;另一方面,专用接口的对接方式五花八门,例如腾讯混元的 ChatHunyuan 需要单独的 APP_ID + SecretId + SecretKey,配置繁琐。好在大多数 API 平台都支持 OpenAI 接口规范,因此基本都可以通过 ChatOpenAI 集成,只是换一下 base_url 和模型名。

from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os

load_dotenv(override=True)

# 通过 ChatOpenAI 连接 DeepSeek
deepseek_llm2 = ChatOpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL"),
    model="deepseek-v4-flash",
)
print(deepseek_llm2.invoke("1 + 1 = ?"))

# 通过 ChatOpenAI 连接智谱
zhipu_llm2 = ChatOpenAI(
    api_key=os.getenv("ZHIPUAI_API_KEY"),
    base_url=os.getenv("ZHIPUAI_BASE_URL"),
    model="glm-5.1",
)

# 通过 ChatOpenAI 连接通义千问(百炼的 OpenAI 兼容端点)
tongyi_llm2 = ChatOpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url=os.getenv("DASHSCOPE_BASE_URL"),
    model="qwen-plus",
)

07.3 中转平台

受政策影响,国内无法直接调用国外顶尖的闭源模型。某些复杂任务确实需要这些模型时,可以通过中转平台曲线救国。

07.3.1 OpenRouter

官网:https://openrouter.ai/。OpenRouter 是一个多模型 API 聚合平台,提供统一的 OpenAI 兼容接口,可以通过一个 API Key 调用 OpenAI、Claude、Gemini、DeepSeek、Qwen 等不同厂商的模型,适合模型对比、模型路由、Agent 应用开发和课程实验。它是目前知名度最高的中转平台,但使用通常需要科学上网。

# OpenRouter 模型集成
pip install langchain-openrouter
OPENROUTER_API_KEY=<YOUR_API_KEY>
OPENROUTER_API_BASE=https://openrouter.ai/api/v1

LangChain 当前版本为 OpenRouter 提供了专用集成 ChatOpenRouter:

from langchain_openrouter import ChatOpenRouter
from dotenv import load_dotenv
import os

load_dotenv(override=True)
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")

model = ChatOpenRouter(
    model="deepseek/deepseek-v4-flash",
    api_key=OPENROUTER_API_KEY,
)
print(model.invoke("一句话介绍下你自己"))

当然,也可以继续用 ChatOpenAI,把 base_url 指向 OpenRouter:

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
import os

load_dotenv(override=True)
model = ChatOpenAI(
    model="deepseek/deepseek-v4-flash",
    api_key=os.getenv("OPENROUTER_API_KEY"),
    base_url=os.getenv("OPENROUTER_API_BASE"),
)
print(model.invoke("一句话介绍下你自己"))

OpenRouter 账户充值界面,支持微信和支付宝

07.3.2 CloseAI

官网:https://www.closeai-asia.com/。CloseAI 是面向国内用户的 AI API 中转平台,代理 OpenAI、Claude、Gemini 等模型接口,适合解决国内网络访问、支付和接口统一管理问题,常用于应用开发、教学演示和测试环境。LangChain 没有为它提供专用集成,用 ChatOpenAI 兼容接口即可。

CLOSEAI_API_KEY=<YOUR_API_KEY>
CLOSEAI_BASE_URL=https://api.openai-proxy.org/v1
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
import os

load_dotenv(override=True)

model = ChatOpenAI(
    model="deepseek-v4-flash",
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)
print(model.invoke("欧盟都有哪些国家"))

07.4 小结

同一个 DeepSeek 模型,在不同平台可以用不同的类创建:DeepSeek 官网用 ChatDeepSeek / ChatOpenAI,百炼用 ChatTongyi / ChatOpenAI,OpenRouter 用 ChatOpenRouter / ChatOpenAI,CloseAI 用 ChatOpenAI。

同一个 DeepSeek 模型在不同平台的初始化方式

原则很简单:有专用类就用专用类,其余一律用 ChatOpenAI 兼容;参数名以对应类的源码为准,尤其注意 api_base 和 base_url 的区别。

下一篇:LangChain 1.2 入门(八):init_chat_model 统一初始化;上一篇:模型调用的准备工作。

本文根据公开课程课件整理,并结合 LangChain 官方文档核对与补充。

本文原文发布于 blog.aimock.cn,站内为只读同步。
阅读原文 · 去博客看评论