LangChain 多对话模型统一接入工程实践

前言

在大模型应用后端开发中,经常需要对接不同厂商的在线对话模型,同时还要兼顾本地离线推理模型。不同服务商的 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 初始化三种写法

  1. 读取.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)
  1. 极简写法(本地已配置全局环境变量时使用)
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)
  1. 代码内直接传入凭证(仅本地临时调试,禁止上线使用)
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 诗歌、故事创作,高度自由发散文本

对比测试代码:

  1. 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")
  1. 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 部署的开源模型,无需接口凭证,提供两种初始化方式:

  1. 专属类 ChatOllama
python 复制代码
from langchain_ollama import ChatOllama
llm = ChatOllama(model="deepseek-v4-flash")
  1. 统一 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 本地开发调试、内网离线私有化部署

九、工程落地最佳实践

  1. 隐私配置安全管控 统一使用 .env 文件存储接口凭证,禁止明文硬编码;项目添加 .gitignore 屏蔽配置文件,定期轮换各平台密钥,降低泄露风险。
  2. 接入方式选型建议
  • 需要厂商独有扩展能力:选择厂商专属对话类;
  • 快速调试、临时切换多款模型:使用通用 ChatOpenAI
  • 多模型动态调度、统一框架项目:优先使用 init_chat_model
  1. 参数调优规范数据计算、代码、分类等严谨任务,temperature 设置 0~0.3;文案、创意类场景可拉高至 1.0 以上。
  2. 线上线下代码兼容 线上 API 与本地 Ollama 离线模型可共用 init_chat_model 初始化逻辑,切换环境无需大幅修改代码。
  3. 项目轻量化按需安装依赖包,未使用的厂商 SDK 无需引入,减少项目体积。
相关推荐
齐 飞3 小时前
LangGraph快速入门-03节点与边
python·langchain
飞猪~20 小时前
LangChain python 版本 第一集
开发语言·python·langchain
YIAN21 小时前
LangChain JS 工具调用实战:基于 DeepSeek-V4-Flash 实现本地文件读取 AI 代码助手(完整可运行源码)
javascript·langchain·前端框架
齐 飞1 天前
LangGraph快速入门-02状态
人工智能·langchain
椰椰椰耶1 天前
【LangChain系列十二】RAG全流程下:从零搭建知识问答系统
langchain
Darling噜啦啦1 天前
手写 mini-cursor 完整版:从 Promise 子进程到 ReAct 循环,30 轮迭代完成 TodoList 全流程
langchain·agent
飞猪~1 天前
Langchain python版本 LLM 重要函数invoke,ainvoke,stream,astream,batch,abatch
python·langchain·batch
大流星1 天前
LangChainJS之Runnable(三)
javascript·langchain
想要成为糕糕手1 天前
从 0 到 1 打造 Coding Agent——mini cursor(终篇):装上命令行手脚,造一个会"干活"的 AI 程序员
langchain·agent·ai编程