LangChain 聊天模型核心能力:从基础定义到进阶实战
作为 LangChain 生态的核心组件,聊天模型是连接大语言模型(LLM)与实际应用的桥梁。与传统纯文本补全模型不同,LangChain 中的聊天模型专门优化了对话交互能力,通过标准化的消息格式实现灵活调用,支持多模型切换、结构化输出、流式交互等高级功能。本文严格基于 LangChain 官方课件,结合实战代码与进阶知识点,带你从基础定义到核心能力,全面掌握聊天模型的使用方法。LLM:多数指纯文
前言
作为 LangChain 生态的核心组件,聊天模型是连接大语言模型(LLM)与实际应用的桥梁。与传统纯文本补全模型不同,LangChain 中的聊天模型专门优化了对话交互能力,通过标准化的消息格式实现灵活调用,支持多模型切换、结构化输出、流式交互等高级功能。本文严格基于 LangChain 官方课件,结合实战代码与进阶知识点,带你从基础定义到核心能力,全面掌握聊天模型的使用方法。
一、核心定义:LangChain 中的聊天模型是什么?
在 LangChain 的设计体系中,聊天模型和 LLM(大语言模型)是「特殊与一般」的关系,其核心定位是「对话优化的 LLM 封装」:
- LLM:多数指纯文本补全模型,接受单个字符串提示作为输入,输出字符串补全结果(部分支持多模态);
- 聊天模型:由 LLM 提供底层支持,但经过对话场景优化,输入是消息列表(包含系统提示、用户提问、历史对话等),输出是 AI 消息对象,而非纯文本。
这种设计的核心优势在于:支持多轮对话上下文管理、角色边界清晰、输出格式标准化,能无缝适配复杂交互场景。
关键基础:标准化消息格式
聊天模型的核心输入是「消息列表」,LangChain 统一了三种核心消息类型,覆盖所有对话场景:
SystemMessage:系统角色消息,作为第一条消息传入,用于定义 AI 的行为准则(如 "你是专业翻译助手,回复简洁准确");HumanMessage:用户角色消息,承载用户的查询、指令等输入内容;AIMessage:AI 角色消息,聊天模型的输出结果,包含回答内容及元数据(如 Token 使用量、模型版本)。
所有消息类型均基于 LangChain 的Runnable接口实现,确保与框架其他组件(提示模板、记忆模块、工具)无缝兼容。
二、基础实现:三种核心定义方式
LangChain 提供了三种主流的聊天模型定义方式,分别适配「固定模型调用」「动态模型切换」「本地模型部署」场景,下面结合代码详细说明。
方式 1:直接定义特定模型(ChatOpenAI 类)
适合明确知道要使用的模型(如 OpenAI、DeepSeek),需手动指定模型名称、API 密钥、基础地址等参数,直观易懂,是入门首选。
调用模型的核心参数说明(通用标准化参数)
| 参数名 | 作用 | 示例 |
|---|---|---|
model |
模型名称(需与服务商一致) | "deepseek-chat"、"gpt-4o-mini" |
api_key |
模型服务商的身份凭证 | "sk-xxx"(DeepSeek/OpenAI 密钥) |
base_url |
API 请求基础地址(非 OpenAI 模型必需) | DeepSeek 地址:"https://api.deepseek.com/v1" |
temperature |
采样温度(0-1):值越高越灵活,越低越严谨 | 0.3(保守)、0.8(创意) |
max_tokens |
生成的最大 Token 数(控制输出长度) | 100、1024 |
timeout |
请求超时时间(秒) | 30(避免无限等待) |
max_retries |
请求失败后的重试次数 | 2 |
实战代码:调用 DeepSeek 聊天模型
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
# 1. 定义DeepSeek聊天模型
model = ChatOpenAI(
model="deepseek-chat", # 模型名称(DeepSeek通用对话模型)
api_key="sk-a5b3406086ec4c89832442954c60f210", # 你的API密钥
base_url="https://api.deepseek.com/v1", # DeepSeek固定API地址
temperature=0.3, # 严谨模式,减少随机性
max_tokens=100, # 限制输出长度(100字以内)
timeout=30, # 30秒超时
max_retries=2 # 失败重试2次
)
# 2. 定义消息列表(系统提示+用户输入)
messages = [
SystemMessage(content="请补全一段故事,100个字以内,风格温馨治愈"),
HumanMessage(content="一只猫正在__?")
]
# 3. 调用模型并输出结果
result = model.invoke(messages)
print("模型输出内容:", result.content)
print("输出元数据:", result.response_metadata) # 包含Token使用量、模型版本等
输出对象说明
模型返回AIMessage对象,核心属性包括:
content:AI 的回答文本(核心关注内容);response_metadata:响应元数据(Token 使用量、模型名称、请求 ID,用于调试);usage_metadata:资源消耗统计(输入 / 输出 Token 数,用于成本核算)。
方式 2:灵活配置模型(init_chat_model 工厂函数)
init_chat_model是 LangChain 提供的高阶工厂函数,支持动态切换不同服务商的模型,无需修改核心调用逻辑,灵活性更强,是重点推荐的进阶用法。
核心优势
- 多模型统一接口:无论调用 OpenAI 还是 DeepSeek,调用方式完全一致;
- 动态配置能力:可在
invoke时通过config参数修改模型、温度等参数;- 简化配置:自动读取环境变量中的 API 密钥,无需硬编码。(提前在系统变量中保存)
实战场景 1:固定模型基本用法
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage
import os
# 自动读取环境变量中的密钥(推荐做法)
os.environ["DEEPSEEK_API_KEY"] = "sk-xxx"
os.environ["OPENAI_API_KEY"] = "sk-xxx"
# 1. 初始化OpenAI模型
gpt_model = init_chat_model(
model="gpt-4o-mini",
model_provider="openai",
temperature=0.3
)
# 2. 初始化DeepSeek模型
deepseek_model = init_chat_model(
model="deepseek-chat",
model_provider="deepseek",
temperature=0.3
)
# 3. 统一调用方式
print("GPT-4o-mini回答:", gpt_model.invoke("你是谁?").content)
print("DeepSeek回答:", deepseek_model.invoke("你是谁?").content)
实战场景 2:动态切换模型(可配置模型模拟器)
适合测试不同模型效果、根据任务类型动态选择模型的场景:
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage
# 1. 定义可配置模型(仅设置默认参数,不指定具体模型)
config_model = init_chat_model(temperature=0.3)
# 2. 定义消息
messages = [
SystemMessage(content="请补全一段故事,100个字以内"),
HumanMessage(content="一只猫正在__?")
]
# 3. 调用时动态指定模型(通过config参数)
# 切换为DeepSeek模型
result_deepseek = config_model.invoke(
messages,
config={"configurable": {"model": "deepseek-chat", "model_provider": "deepseek"}}
)
# 切换为GPT-4o-mini模型
result_gpt = config_model.invoke(
messages,
config={"configurable": {"model": "gpt-4o-mini", "model_provider": "openai"}}
)
print("DeepSeek补全:", result_deepseek.content)
print("GPT-4o-mini补全:", result_gpt.content)
实战场景 3:带默认参数的可配置模型
通过configurable_fields指定允许动态修改的参数,config_prefix避免参数冲突:
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage, HumanMessage
# 1. 定义可配置模型(指定默认模型和可修改字段)
model = init_chat_model(
model="gpt-4o-mini", # 默认模型
model_provider="openai", # 默认服务商
temperature=0.3, # 默认温度
max_tokens=1024, # 默认最大Token数
configurable_fields=("max_tokens", "model", "model_provider"), # 允许动态修改的字段
config_prefix="first" # 参数前缀(避免冲突)
)
# 2. 定义消息
messages = [
SystemMessage(content="请补全一段故事,100个字以内:"),
HumanMessage(content="一只猫正在__?")
]
# 3. 调用时修改参数(动态切换为DeepSeek+限制输出为10Token)
result = model.invoke(
messages,
config={
"configurable": {
"first_max_tokens": 10, # 前缀+字段名的命名规则
"first_model": "deepseek-chat",
"first_model_provider": "deepseek"
}
}
)
print(result.content) # 输出限制在10Token以内
方式 3:调用本地部署模型(ChatOllama 类)
不想依赖云端 API 时,可通过 Ollama 部署本地模型(如 DeepSeek-R1、Llama 等),LangChain 提供ChatOllama类无缝支持:
from langchain_ollama import ChatOllama
# 1. 定义本地Ollama部署的DeepSeek模型
ollama_model = ChatOllama(
model="deepseek-r1:1.5b", # 本地模型名称(需提前通过Ollama拉取)
base_url="http://127.0.0.1:11434" # Ollama默认本地地址
)
# 2. 调用模型
result = ollama_model.invoke("你是谁?")
print("本地模型回答:", result.content)
三、关键概念澄清与避坑指南
1. 聊天模型 vs LLM(纯文本模型)
| 对比维度 | 聊天模型 | LLM(纯文本模型) |
|---|---|---|
| 输入格式 | 消息列表(System/Human/AIMessage) | 单个字符串提示 |
| 输出格式 | AIMessage 对象(带元数据) | 纯文本字符串 |
| 适用场景 | 对话交互、多轮聊天、工具调用 | 文本补全、摘要生成、代码生成 |
| LangChain 实现 | ChatOpenAI、ChatOllama、init_chat_model | OpenAI、DeepSeekLLM |
2. 环境变量配置(安全最佳实践)
硬编码 API 密钥存在安全风险,推荐配置系统环境变量,LangChain 会自动读取:
- Windows:「系统属性→环境变量」添加
OPENAI_API_KEY(OpenAI)、DEEPSEEK_API_KEY(DeepSeek); - macOS/Linux:终端执行
export DEEPSEEK_API_KEY="sk-xxx"; - 代码中无需手动传入
api_key,模型会自动从环境变量读取。
3. 常见错误排查(可结合AI查错)
Authentication Error:API 密钥无效或环境变量未配置,检查密钥正确性和环境变量读取;API Connection Error:base_url错误(DeepSeek 固定为 "https://api.deepseek.com/v1")Token Limit Exceeded:max_tokens设置过小,或对话历史过长,需调整参数或使用记忆压缩;INVALID_CHAT_HISTORY:消息列表格式错误(如 AIMessage 的 tool_calls 无对应 ToolMessage),检查消息结构完整性;configurable拼写错误:常见configrable→configurable,导致动态参数失效。
四、总结
LangChain 聊天模型的核心价值在于「标准化接口 + 灵活扩展能力」,关键要点总结如下:
- 本质是「对话优化的 LLM 封装」,输入为消息列表,输出为 AIMessage 对象;
- 三种基础定义方式:
ChatOpenAI(固定模型)、init_chat_model(动态切换)、ChatOllama(本地部署); - 四大进阶能力:结构化输出(数据格式化)、流式 / 批量调用(性能优化)、对话记忆(多轮交互)、工具调用(外部扩展);
- 遵循「环境变量存密钥、标准化参数配置、组件化集成」的最佳实践。
掌握聊天模型是 LangChain 开发的基础,后续的智能代理(Agent)、复杂工作流编排等高级功能,均基于此扩展。
下一遍文章单独讲解四大进阶能力:结构化输出(数据格式化)、流式 / 批量调用(性能优化)、对话记忆(多轮交互)、工具调用(外部扩展);
更多推荐



所有评论(0)