前言
在大模型应用后端开发中,经常需要对接不同厂商的在线对话模型,同时还要兼顾本地离线推理模型。不同服务商的 SDK、入参格式存在差异,如果每个模型单独写一套请求逻辑,会产生大量冗余代码,后期维护成本很高。
LangChain 1.x 提供了三套标准化接入方案:厂商专属封装类、OpenAI 标准兼容接口、统一初始化工具 init_chat_model。三种方案各有适用场景,既能使用模型独有的扩展能力,也能实现一套代码快速切换模型。本文仅从工程落地角度,讲解配置安全规范、完整可运行代码、生成参数调优、本地离线模型接入,全文仅做技术实现讲解,无任何平台推荐、引流相关内容。
一、敏感配置安全管理规范
模型接口密钥、服务地址属于隐私凭证,禁止直接硬编码在业务代码中。行业通用解决方案是通过 .env 文件统一存放配置,使用 python-dotenv 读取环境变量;同时在 .gitignore 文件中配置忽略 .env,防止密钥提交至代码仓库造成泄露。
1. 项目依赖安装命令
bash
pip install langchain langchain-deepseek langchain-zhipuai langchain-openai langchain-openrouter python-dotenv
2. .env 配置文件模板
项目根目录新建 .env 文件,仅本地留存,不提交代码仓库:
env
# 在线模型服务商接口配置
DEEPSEEK_API_KEY=sk-xxx
DEEPSEEK_BASE_URL=https://api.deepseek.com
ZHIPUAI_API_KEY=sk-xxx
ZHIPUAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
# 模型聚合服务配置
OPENROUTER_API_KEY=sk-xxx
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
3. 加载环境变量基础代码
load_dotenv(override=True) 会优先读取本地配置文件,覆盖系统全局环境变量,所有模型调用代码均需前置执行:
python
import os
from dotenv import load_dotenv
# 加载本地配置文件
load_dotenv(override=True)
二、厂商专属封装类接入方式
LangChain 为市面主流商用对话模型单独封装专属对话类,原生支持各厂商独有的扩展参数,适合长期稳定对接单一模型的业务项目。
2.1 ChatDeepSeek 初始化三种写法
- 读取.env 配置(生产环境标准写法)
python
import os
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
load_dotenv(override=True)
api_key = os.getenv("DEEPSEEK_API_KEY")
base_url = os.getenv("DEEPSEEK_BASE_URL")
llm = ChatDeepSeek(
model="deepseek-v4-flash",
api_key=api_key,
api_base=base_url,
)
res = llm.invoke("请用一句话介绍你自己")
print(res.content)
- 极简写法(本地已配置全局环境变量时使用)
python
from dotenv import load_dotenv
from langchain_deepseek import ChatDeepSeek
load_dotenv(override=True)
llm = ChatDeepSeek(model="deepseek-v4-flash")
res = llm.invoke("请用一句话介绍你自己")
print(res.content)
- 代码内直接传入凭证(仅本地临时调试,禁止上线使用)
python
from langchain_deepseek import ChatDeepSeek
llm = ChatDeepSeek(
model="deepseek-v4-flash",
api_key="替换个人凭证",
api_base="https://api.deepseek.com",
)
2.2 ChatZhipuAI 接入示例
使用逻辑与上文中模型完全一致,仅替换导入类、环境变量标识、模型名称:
python
import os
from dotenv import load_dotenv
from langchain_community.chat_models import ChatZhipuAI
load_dotenv(override=True)
api_key = os.getenv("ZHIPUAI_API_KEY")
base_url = os.getenv("ZHIPUAI_BASE_URL")
llm = ChatZhipuAI(
model="glm-5.1",
api_key=api_key,
api_base=base_url,
)
res = llm.invoke("请用一句话介绍你自己")
print(res.content)
三、OpenAI 标准兼容通用接入
当前绝大多数商用模型、模型聚合服务均兼容 OpenAI 接口规范,无需导入各类厂商专属 SDK,统一使用 ChatOpenAI 即可完成调用,适合需要频繁切换不同模型的快速开发场景。
对接示例:
python
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv(override=True)
api_key = os.getenv("DEEPSEEK_API_KEY")
base_url = os.getenv("DEEPSEEK_BASE_URL")
llm = ChatOpenAI(
model="deepseek-v4-flash",
api_key=api_key,
base_url=base_url,
)
res = llm.invoke("1+3等于多少")
print(res.content)
该方案通用性较强,国内主流商用模型、各类聚合服务都可复用,仅调整接口地址、凭证、模型名称三项参数即可。
四、模型聚合服务接入示例
模型聚合服务可通过统一接口调用多款不同厂商模型,LangChain 提供专属封装类 ChatOpenRouter,模型名称需要遵循平台规定格式「厂商标识 / 模型名」。
python
import os
from dotenv import load_dotenv
from langchain_openrouter import ChatOpenRouter
load_dotenv(override=True)
api_key = os.getenv("OPENROUTER_API_KEY")
base_url = os.getenv("OPENROUTER_BASE_URL")
llm = ChatOpenRouter(
model="deepseek/deepseek-v4-flash",
api_key=api_key,
base_url=base_url,
)
res = llm.invoke("你是什么对话模型")
print(res.content)
聚合服务同时支持 ChatOpenAI 兼容写法与后文统一初始化工具,适配方式灵活。
五、LangChain 1.x 统一初始化工具 init_chat_model
init_chat_model 是 LangChain 1.x 内置的通用模型初始化工具,一套代码可以切换任意厂商模型,无需频繁更换导入类,适合多模型调度、动态切换模型的业务系统。
5.1 对接线上商用模型示例
模型命名格式:服务商标识:模型名称,框架自动匹配底层驱动:
python
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
load_dotenv(override=True)
api_key = os.getenv("DEEPSEEK_API_KEY")
base_url = os.getenv("DEEPSEEK_BASE_URL")
llm = init_chat_model(
model="deepseek:deepseek-v4-flash",
api_key=api_key,
api_base=base_url,
)
res = llm.invoke("请用一句话介绍你自己")
print(res.content)
5.2 聚合服务适配写法
所有聚合服务统一使用 openai 作为服务商标识,模型名称填写平台规范格式:
python
llm = init_chat_model(
model="openai:deepseek/deepseek-v4-flash",
api_key=os.getenv("OPENROUTER_API_KEY"),
api_base=os.getenv("OPENROUTER_BASE_URL"),
)
六、通用生成参数调优说明
线上 API 模型、本地离线推理模型均支持同一套超参配置,两个核心参数用于控制生成内容风格与文本长度。
6.1 temperature 随机性控制(高频使用)
取值区间 0 ~ 2,数值越大,生成内容随机性、创造性越强,逻辑一致性越低,分场景使用规范:
表格
| 参数区间 | 适用业务场景 |
|---|---|
| 0.0~0.3 | 数学计算、代码生成、数据提取、文本分类,要求输出稳定统一 |
| 0.5~0.7 | 日常问答、智能客服,平衡逻辑准确性与自然表达 |
| 0.8~1.5 | 文案撰写、方案头脑风暴,需要创意内容 |
| 1.5~2.0 | 诗歌、故事创作,高度自由发散文本 |
对比测试代码:
- temperature=0,多次输出内容高度统一
python
model = ChatOpenRouter(
temperature=0,
model="deepseek/deepseek-v4-flash",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url=os.getenv("OPENROUTER_BASE_URL"),
)
for i in range(3):
res = model.invoke("写一首春日短诗")
print(f"第{i+1}轮:{res.content}\n")
- temperature=1.9,多次生成内容差异明显
python
model = ChatOpenRouter(
temperature=1.9,
model="deepseek/deepseek-v4-flash",
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url=os.getenv("OPENROUTER_BASE_URL"),
)
for i in range(3):
res = model.invoke("写一首春日短诗")
print(f"第{i+1}轮:{res.content}\n")
6.2 max_tokens 最大输出长度
限制单次返回文本 token 上限,避免超长文本消耗调用额度,长文本摘要、批量问答场景可按需配置。
七、本地离线 Ollama 模型接入
除线上付费 API 服务外,LangChain 兼容本地 Ollama 部署的开源模型,无需接口凭证,提供两种初始化方式:
- 专属类 ChatOllama
python
from langchain_ollama import ChatOllama
llm = ChatOllama(model="deepseek-v4-flash")
- 统一 init_chat_model 初始化
python
from langchain.chat_models import init_chat_model
llm = init_chat_model(
model="deepseek-v4-flash",
model_provider="langchain-ollama"
)
八、各类接入方案对比汇总
表格
| 服务类型 | 可用接入方式 | 适用开发场景 |
|---|---|---|
| DeepSeek 官方接口 | ChatDeepSeek、ChatOpenAI、init_chat_model | 需要使用厂商专属扩展能力、长期稳定业务 |
| 智谱 AI、阿里云百炼 | 厂商专属 Chat 类、ChatOpenAI、init_chat_model | 国内商用模型、企业内部业务系统 |
| OpenRouter 聚合服务 | ChatOpenRouter、ChatOpenAI、init_chat_model | 多模型快速测试、统一计费管理 |
| Ollama 本地离线模型 | ChatOllama、init_chat_model | 本地开发调试、内网离线私有化部署 |
九、工程落地最佳实践
- 隐私配置安全管控 统一使用
.env文件存储接口凭证,禁止明文硬编码;项目添加.gitignore屏蔽配置文件,定期轮换各平台密钥,降低泄露风险。 - 接入方式选型建议
- 需要厂商独有扩展能力:选择厂商专属对话类;
- 快速调试、临时切换多款模型:使用通用
ChatOpenAI; - 多模型动态调度、统一框架项目:优先使用
init_chat_model。
- 参数调优规范数据计算、代码、分类等严谨任务,temperature 设置 0~0.3;文案、创意类场景可拉高至 1.0 以上。
- 线上线下代码兼容 线上 API 与本地 Ollama 离线模型可共用
init_chat_model初始化逻辑,切换环境无需大幅修改代码。 - 项目轻量化按需安装依赖包,未使用的厂商 SDK 无需引入,减少项目体积。