简介
Chat Models 是基于大型语言模型(LLM)的高级交互模式。与传统的文本生成不同,Chat Models 的输入和输出均遵循格式化的聊天消息结构(Chat Messages),这使得它更适合处理多轮对话、角色扮演及复杂的指令遵循任务。
LangChain Chat Models 是大语言模型的高级交互接口,采用格式化的聊天消息进行输入输出。详细阐述了 Chat Models 支持的模型列表、消息角色分类、基础调用流程、批量生成、缓存策略、流式响应及 Prompt 模板适配方法,并提供完整代码示例,帮助开发者高效构建对话系统。

Chat Models 是基于大型语言模型(LLM)的高级交互模式。与传统的文本生成不同,Chat Models 的输入和输出均遵循格式化的聊天消息结构(Chat Messages),这使得它更适合处理多轮对话、角色扮演及复杂的指令遵循任务。
本文将详细介绍如何在 LangChain 框架中使用 Chat Models,涵盖基础用法、高级特性及最佳实践。
LangChain 对 Chat Models 的支持随着版本迭代在不断丰富。目前主要支持的模型包括:
ChatAnthropicAzureChatOpenAIChatVertexAIJinaChatChatOpenAIPromptLayerChatOpenAI需要注意的是,部分底层模型可能不支持原生 Chat 接口,且 LangChain 生态仍在发展中,某些模型可能需要额外适配。
LangChain 将聊天消息分为以下几种核心类型,每种类型对应不同的角色:
在使用时,只需将这些消息对象按顺序传入即可。
以下是使用 ChatOpenAI 进行单次调用的标准示例:
from langchain.chat_models import ChatOpenAI
from langchain.schema import SystemMessage, HumanMessage
# 初始化模型
chat = ChatOpenAI()
# 构建消息列表
messages = [
SystemMessage(content="你是一个小说家"),
HumanMessage(content="帮我写篇小说")
]
# 执行调用
response = chat(messages)
print(response.content)
与 LLM 类似,Chat Models 也支持批量处理模式,可以一次性发送多个请求以提高效率:
batch_messages = [
[
SystemMessage(content="你是一个小说家"),
HumanMessage(content="帮我写篇小说")
],
[
SystemMessage(content="你是一个诗人"),
HumanMessage(content="帮我写首诗")
],
]
result = chat.generate(batch_messages)
for item in result.generations:
print(item[0].text)
为了减少 Token 开销并提升响应速度,可以使用缓存功能存储之前的输入输出结果。LangChain 支持多种缓存后端,如 InMemoryCache、SQLAlchemyCache、SQLiteCache 和 RedisCache 等。
以内存缓存为例:
from langchain.cache import InMemoryCache
import langchain
# 设置缓存
langchain.llm_cache = InMemoryCache()
# 第一次调用,未命中缓存
response1 = chat([HumanMessage(content="Tell me a joke")])
# 第二次调用相同内容,命中缓存
response2 = chat([HumanMessage(content="Tell me a joke")])
Chat Models 支持流式响应(Streaming),可以在生成过程中实时获取 token,提升用户体验。实现方式是通过回调处理器(Callback Handler):
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
chat = ChatOpenAI(
streaming=True,
callbacks=[StreamingStdOutCallbackHandler()],
temperature=0
)
resp = chat([HumanMessage(content="帮忙我写首诗")])
只需在构建模型时将 StreamingStdOutCallbackHandler 传入 callbacks 参数即可。
由于 Chat Models 的消息结构与传统 LLM 不同,对应的 Prompt 模板也有所区别。LangChain 提供了专门的 Chat Prompt 组件:
ChatPromptTemplateSystemMessagePromptTemplateAIMessagePromptTemplateHumanMessagePromptTemplate使用示例如下:
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
# 构建系统提示
system_template = "You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
# 构建用户提示
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
# 组合 Prompt
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
# 格式化并调用
formatted_prompt = chat_prompt.format_prompt(
input_language="English",
output_language="French",
text="I love programming."
)
response = chat(formatted_prompt.to_messages())
注意:Chat Models 下的消息构建比直接使用 LLM 稍显复杂,需确保消息类型与模板匹配。
在实际开发中,合理配置模型参数至关重要:
Chat Models 是 LangChain 中处理对话任务的核心组件,相比传统 LLM 接口,它提供了更结构化的交互方式。通过合理使用消息类型、缓存机制、流式输出及 Prompt 模板,开发者可以更高效地构建稳定、低成本的对话应用。在选型时,建议根据具体业务需求选择合适的模型后端及配置参数。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online