LangChain 聊天模型 (Chat Models) 概述
什么是聊天模型?
聊天模型是一类特殊的语言模型,它们经过训练可以进行对话式交互,能够接受一系列消息作为输入并生成消息作为输出。在LangChain框架中,聊天模型被设计为处理一系列聊天消息作为输入,并生成聊天消息作为输出。
与传统的文本补全模型不同,聊天模型通常能够:
理解对话上下文
区分不同角色的消息(如系统指令、用户输入、助手回复)
保持对话的连贯性
更好地遵循复杂指令
聊天消息的类型
在LangChain中,聊天消息主要包含以下几种类型:
SystemMessage:系统级指令,用于设定助手的行为、角色定位或提供背景知识
HumanMessage:用户消息,代表用户的输入
AIMessage:AI助手的回复消息
FunctionMessage:函数调用相关的消息,用于记录函数的调用和返回
ToolMessage:工具使用相关的消息
支持的聊天模型
LangChain支持多种流行的聊天模型集成,包括但不限于:
OpenAI - GPT系列模型的聊天接口
Anthropic - Claude系列模型
Baidu - 文心一言
Alibaba - 通义千问
Google (VertexAI) - Gemini、PaLM系列模型
Azure OpenAI - 部署在Azure上的OpenAI模型
Hugging Face - 开源模型的聊天接口
Ollama - 本地部署的开源模型
自定义聊天模型 - 通过API或其他方式集成的自定义模型
基本使用方法
导入与初始化
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage
# 初始化聊天模型
chat = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
基本调用方式
方法1:直接传入消息列表
messages = [
SystemMessage(content="你是一个乐于助人的AI助手。"),
HumanMessage(content="请告诉我北京有哪些著名的旅游景点?")
]
response = chat.invoke(messages)
print(response.content)
方法2:使用with_messages方法
response = chat.with_messages([
SystemMessage(content="你是一个乐于助人的AI助手。"),
HumanMessage(content="请告诉我北京有哪些著名的旅游景点?")
])
print(response.content)
流式输出(Streaming)
LangChain支持聊天模型的流式输出,这对于需要实时显示生成内容的应用非常有用:
from langchain_core.messages import HumanMessage
chat = ChatOpenAI(streaming=True)
for chunk in chat.stream([HumanMessage(content="讲个笑话")]):
print(chunk.content, end="", flush=True)
核心功能与高级特性
1. 温度参数(Temperature)调节
温度参数控制生成内容的随机性,值越低生成的内容越确定,越高则更具创造性:
# 低温度,适合事实性回答
factual_chat = ChatOpenAI(temperature=0.1)
# 高温度,适合创意内容生成
creative_chat = ChatOpenAI(temperature=0.9)
2. Token限制与计算
可以设置最大token数,并可以预估token使用情况:
# 设置最大生成token数
chat = ChatOpenAI(max_tokens=100)
# 获取token计数(需要tiktoken库)
from langchain_core.messages import HumanMessage
messages = [HumanMessage(content="你好,请介绍一下你自己")]
token_count = chat.get_num_tokens_from_messages(messages)
print(f"消息使用的token数量:{token_count}")
3. 函数调用(Function Calling)
支持函数调用,允许模型决定何时调用预定义的函数:
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
# 定义函数
functions = [
{
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称,如北京、上海"},
"date": {"type": "string", "description": "日期,格式为YYYY-MM-DD"}
},
"required": ["city"]
}
}
]
# 配置聊天模型支持函数调用
chat = ChatOpenAI(model="gpt-3.5-turbo").bind(functions=functions)
4. 响应格式控制
可以指定模型输出的格式:
from langchain_openai import ChatOpenAI
# 指定JSON输出
chat = ChatOpenAI(model="gpt-3.5-turbo", response_format={"type": "json_object"})
5. 上下文窗口管理
处理长对话时,需要注意模型的上下文窗口限制:
# 指定模型最大支持的token数
chat = ChatOpenAI(model="gpt-3.5-turbo-16k") # 16k上下文窗口
# 可以使用记忆组件管理长对话
from langchain.memory import ConversationBufferMemory
实际应用场景
聊天模型在LangChain中有广泛的应用场景,包括但不限于:
对话式助手 - 创建能够保持上下文的聊天机器人
文档问答 - 结合检索增强生成(RAG)回答关于特定文档的问题
多轮任务处理 - 通过多轮对话完成复杂任务
工具使用 - 让模型使用外部工具解决问题
角色扮演 - 创建特定领域的专家助手
最佳实践
恰当使用系统消息 - 系统消息是指导模型行为的有效方式
合理设置温度参数 - 根据任务性质选择合适的随机性
批量处理 - 对于大量请求,考虑使用批处理API减少延迟
异步调用 - 使用异步API提高性能
错误处理 - 实现错误处理机制,处理API限制和超时
监控token用量 - 跟踪token消耗以控制成本
通过本教程,您将了解如何在LangChain框架中有效地使用聊天模型,从基础调用到高级功能,为您的应用程序添加智能对话能力。
- 感谢你赐予我前进的力量