LangChain 1.0 模型接口:多厂商集成与统一调用

玄同 765

大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)

CSDN · 个人主页 | GitHub · Follow


关于作者

  • 深耕领域:大语言模型开发 / RAG 知识库 / AI Agent 落地 / 模型微调
  • 技术栈:Python | RAG (LangChain / Dify + Milvus) | FastAPI + Docker
  • 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案

「让 AI 交互更智能,让技术落地更高效」

欢迎技术探讨与项目合作,解锁大模型与智能交互的无限可能!


一、模型接口概述

1.1 LLM 与 ChatModel 的区别

LangChain 区分两种模型类型,它们在接口设计和使用场景上有所不同:

模型类型 输入格式 输出格式 适用场景 代表实现
LLM 文本字符串 文本字符串 简单的文本生成任务 OpenAI、OllamaLLM
ChatModel 消息列表 消息对象 对话、多轮交互 ChatOpenAI、ChatDeepSeek

两者都封装具体的 LLM 提供者(OpenAI、Anthropic、local LLM),统一调用接口(sync/async、streaming)。ChatModel 是 LangChain 1.0 推荐使用的模型类型,因为它更适合构建聊天机器人和处理多轮对话。

1.2 统一模型初始化

LangChain 1.0 提供了统一的模型初始化接口 init_chat_model,它是模型初始化的最佳实践,简化了多厂商模型的切换:

python 复制代码
from langchain.chat_models import init_chat_model

# 统一初始化不同厂商的模型
model = init_chat_model(model="gpt-4o-mini")  # OpenAI
model = init_chat_model(model="deepseek-chat")  # DeepSeek
model = init_chat_model(model="qwen-turbo")  # 通义千问
model = init_chat_model(model="claude-3-sonnet-20240229")  # Anthropic

1.3 模型配置参数

参数 类型 默认值 用途
temperature float 0.7 控制输出的随机性
max_tokens int 无限制 最大生成token数
timeout int 60 超时时间(秒)
streaming bool False 是否流式输出
model_kwargs dict {} 模型特定参数

二、多厂商模型集成

2.1 DeepSeek 模型集成

2.1.1 环境配置
python 复制代码
import os
from dotenv import load_dotenv

# 加载 .env 环境变量
load_dotenv(override=True)

# 读取密钥与地址
DeepSeek_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DeepSeek_BASE_URL = os.getenv("DEEPSEEK_BASE_URL")
2.1.2 直接使用 OpenAI 客户端
python 复制代码
from openai import OpenAI

# 初始化 DeepSeek API 客户端
client = OpenAI(api_key=DeepSeek_API_KEY, base_url="https://api.deepseek.com")

# 创建对话消息并发起请求
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是乐于助人的助手,请根据用户的问题给出回答"},
        {"role": "user", "content": "你好,请你介绍一下你自己。"},
    ],
)

# 打印模型最终的响应结果
print(response.choices[0].message.content)
2.1.3 使用 langchain-deepseek
python 复制代码
from langchain_deepseek import ChatDeepSeek

# 初始化模型参数
model = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.0,    # 温度参数,用于控制模型的随机性,值越小则随机性越小
    max_tokens=512,     # 最大生成token数
    timeout=30,         # 超时时间,单位秒
    base_url=DeepSeek_BASE_URL # 默认为https://api.deepseek.com
)

# 定义问题
question = "你好,请你介绍一下你自己。"

# 调用模型
result = model.invoke(question)

# 输出结果
print(result.content)

2.2 通义千问模型集成

2.2.1 安装依赖
bash 复制代码
pip install dashscope
2.2.2 使用 langchain-community
python 复制代码
from langchain_community.chat_models.tongyi import ChatTongyi

model = ChatTongyi() # 默认qwen-turbo模型

question = "你好,请你介绍一下你自己。"

result = model.invoke(question)
print(result.content)

2.3 OpenAI 模型集成

2.3.1 使用 LLM
python 复制代码
from langchain_openai import OpenAI

# 初始化模型
llm = OpenAI(model="gpt-4o-mini")

# 定义问题
question = "你好,请你介绍一下你自己。"

# 调用模型
result = llm.invoke(question)

# 打印结果
print(result)
2.3.2 使用 ChatOpenAI
python 复制代码
from langchain_openai import ChatOpenAI

# 初始化模型
model = ChatOpenAI(model="gpt-4o-mini")

# 定义问题
question = "你好,请你介绍一下你自己。"

# 调用模型
result = model.invoke(question)

# 打印内容
print(result.content)

2.4 本地 Ollama 模型集成

2.4.1 安装依赖
bash 复制代码
pip install langchain-ollama
2.4.2 使用 OllamaLLM
python 复制代码
from langchain_ollama import OllamaLLM

# 初始化本地模型
llm = OllamaLLM(model="deepseek-r1:8b")

# 定义问题
question = "你好,请你介绍一下你自己。"

# 调用模型
result = llm.invoke(question)

# 打印结果
print(result)
2.4.3 使用 ChatOllama
python 复制代码
from langchain_ollama import ChatOllama

# 初始化本地聊天模型
model = ChatOllama(model="deepseek-r1:8b")

# 定义问题
question = "你好,请你介绍一下你自己。"

# 调用模型
result = model.invoke(question)

# 打印内容
print(result.content)

三、模型配置参数优化

3.1 核心配置参数

参数 描述 推荐值
temperature 控制输出的随机性 0.0-1.0(越低越确定)
max_tokens 最大生成token数 根据需要设置(如512-2048)
timeout 超时时间(秒) 30-60(避免长时间等待)
streaming 是否流式输出 True(前端展示)/ False(批量处理)
model_kwargs 模型特定参数 根据厂商文档设置

3.2 高级配置

python 复制代码
from langchain_openai import ChatOpenAI

# 高级配置示例
model = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0.7,
    max_tokens=1024,
    timeout=60,
    streaming=True,
    model_kwargs={
        "top_p": 0.95,
        "frequency_penalty": 0.0,
        "presence_penalty": 0.0
    }
)

四、多厂商模型切换策略

4.1 基于环境变量的切换

python 复制代码
import os
from langchain.chat_models import init_chat_model

# 根据环境变量选择模型
model_name = os.getenv("MODEL_NAME", "gpt-4o-mini")
model = init_chat_model(model=model_name)

# 统一调用接口
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)

4.2 基于配置文件的切换

python 复制代码
import yaml
from langchain.chat_models import init_chat_model

# 从配置文件加载模型配置
with open("config.yaml", "r") as f:
    config = yaml.safe_load(f)

# 初始化模型
model = init_chat_model(
    model=config["model"],
    **config.get("model_kwargs", {})
)

五、应用场景分析

5.1 适合使用不同模型的场景

模型类型 适用场景 推荐模型
通用对话 客服机器人、聊天助手 GPT-4o-mini、DeepSeek
专业领域 法律、医疗、金融咨询 Claude 3.5 Sonnet
多语言支持 翻译、跨语言对话 GPT-4o、通义千问
本地部署 隐私要求高、离线场景 Ollama + DeepSeek-R1
成本敏感 大规模应用、原型开发 开源模型 + Ollama

5.2 性能与成本平衡

  • 生产环境:使用厂商官方包(如 langchain-openai),享受最新功能
  • 开发环境:使用社区包(langchain-community),快速验证想法
  • 多厂商切换:使用 init_chat_model,业务代码无需改动

六、实战案例

6.1 构建一个多模型对话系统

python 复制代码
import os
from langchain.chat_models import init_chat_model
from langchain_core.prompts import ChatPromptTemplate

# 1. 选择模型
model_name = os.getenv("MODEL_NAME", "gpt-4o-mini")
model = init_chat_model(model=model_name)

# 2. 创建 prompt
prompt = ChatPromptTemplate.from_template("{role}: {content}")

# 3. 构建链
chain = prompt | model

# 4. 执行对话
while True:
    user_input = input("用户: ")
    if user_input.lower() == "exit":
        break
  
    result = chain.invoke({"role": "用户", "content": user_input})
    print(f"助手: {result.content}")

6.2 构建一个模型性能测试工具

python 复制代码
import time
from langchain.chat_models import init_chat_model

# 测试不同模型的响应时间
models = ["gpt-4o-mini", "deepseek-chat", "qwen-turbo"]

test_question = "请解释什么是 LangChain 框架"

for model_name in models:
    try:
        start_time = time.time()
        model = init_chat_model(model=model_name)
        result = model.invoke(test_question)
        end_time = time.time()
      
        print(f"模型: {model_name}")
        print(f"响应时间: {end_time - start_time:.2f}秒")
        print(f"响应长度: {len(result.content)}字符")
        print("=" * 50)
    except Exception as e:
        print(f"模型 {model_name} 测试失败: {e}")
        print("=" * 50)

七、总结

LangChain 1.0 通过统一的模型接口和多厂商集成方案,为开发者提供了灵活、高效的模型调用能力。无论是使用云端模型还是本地部署的模型,都可以通过相同的接口进行调用,大大简化了代码的编写和维护。通过本文的实例,开发者可以根据具体的应用场景选择合适的模型,并通过参数优化获得最佳的性能和成本平衡。

相关推荐
acai_polo2 小时前
如何在国内合规、稳定地使用GPT/Claude/Gemini API?中转服务全解析
人工智能·gpt·ai·语言模型·ai作画
特立独行的猫a2 小时前
C++轻量级Web框架介绍与对比:Crow与httplib
开发语言·前端·c++·crow·httplib
北京青翼科技2 小时前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
fie88892 小时前
基于C#的推箱子小游戏实现
开发语言·c#
喵手2 小时前
Python爬虫实战:构建招聘会数据采集系统 - requests+lxml 实战企业名单爬取与智能分析!
爬虫·python·爬虫实战·requests·lxml·零基础python爬虫教学·招聘会数据采集
菜鸟小芯2 小时前
Qt Creator 集成开发环境下载安装
开发语言·qt
星幻元宇VR2 小时前
5D动感影院,科技与沉浸式体验的完美融合
人工智能·科技·虚拟现实
WZGL12302 小时前
“十五五”发展展望:以社区为底座构建智慧康养服务
大数据·人工智能·物联网
阿猿收手吧!2 小时前
【C++】引用类型全解析:左值、右值与万能引用
开发语言·c++