
玄同 765
大语言模型 (LLM) 开发工程师 | 中国传媒大学 · 数字媒体技术(智能交互与游戏设计)
关于作者
- 深耕领域:大语言模型开发 / 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 通过统一的模型接口和多厂商集成方案,为开发者提供了灵活、高效的模型调用能力。无论是使用云端模型还是本地部署的模型,都可以通过相同的接口进行调用,大大简化了代码的编写和维护。通过本文的实例,开发者可以根据具体的应用场景选择合适的模型,并通过参数优化获得最佳的性能和成本平衡。