LangChain的核心组件Messages之初体验
Messages的作用消息(Messages)是LangChain中模型上下文的基本单位。它们表示模型的输入和输出,同时承载内容和元数据,用于在与大语言模型(LLM)交互时表示对话的状态。来源于官方描述:Messages包含哪些内容?三种,分别是:Role(角色,用于标识消息类型,例如system,user)、Content(内容,例如文本、图像、音频、文档等)、Metadata(元数据,可选字段
目录
目标
使用Python语言集成LangChain,并通过案例来学习它的核心组件Messages。本文使用OpenAI提供的密钥,不会注册的同学可以参考我之前写的Models使用手册。
版本
官方文档
LangChain
https://docs.langchain.com/oss/python/langchain/install
概述
Messages的作用
消息(Messages)是LangChain中模型上下文的基本单位。它们表示模型的输入和输出,同时承载内容和元数据,用于在与大语言模型(LLM)交互时表示对话的状态。来源于官方描述:
Messages are the fundamental unit of context for models in LangChain. They represent the input and output of models, carrying both the content and metadata needed to represent the state of a conversation when interacting with an LLM.
Messages包含哪些内容?
三种,分别是:Role(角色,用于标识消息类型,例如system,user)、Content(内容,例如文本、图像、音频、文档等)、Metadata(元数据,可选字段,例如响应信息、消息ID和令牌使用情况),来源于官方描述:
Messages are objects that contain:
消息类型
四种,分别是:System message(系统消息:告诉模型如何运行,并为交互提供上下文。)、Human message(人类消息:代表用户输入以及与模型的交互。)、AI message(模型生成的响应,包括文本内容、工具调用和元数据。)、Tool message(工具调用的输出)。来源于官方描述:
- System message - Tells the model how to behave and provide context for interactions
- Human message - Represents user input and interactions with the model
- AI message - Responses generated by the model, including text content, tool calls, and metadata
- Tool message - Represents the outputs of tool calls
语法实战
基本用法
使用消息最简单方法是创建消息对象,并在调用大模型时将之传递出去。来源于官方描述:
The simplest way to use messages is to create message objects and pass them to a model when invoking.
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
system_msg = SystemMessage("你是荒野求生专家。")
human_msg = HumanMessage("告诉我怎么搭建庇护所。")
messages = [system_msg, human_msg]
response = llm.invoke(messages)
print(type(response))
print(response)
文本提示词
适合简单的任务,无需保留对话历史记录的情况。官方文档这样描述:
Text prompts are strings - ideal for straightforward generation tasks where you don’t need to retain conversation history.
- You have a single, standalone request
- You don’t need conversation history
- You want minimal code complexity
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("告诉我怎么搭建庇护所。")
print(type(response))
print(response)
消息对象列表
适用场景:管理多轮对话、处理多模态内容(图像、音频、文件)、系统说明(定义规则、风格、行为规范等)。官方文档这样描述:
Use message prompts when:
- Managing multi-turn conversations
- Working with multimodal content (images, audio, files)
- Including system instructions
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
messages = [
SystemMessage("你是荒野求生专家。"),
HumanMessage("请告诉我怎么搭建庇护所。"),
#AIMessage就是模型之前说过的话,用来让模型在下一次调用时知道它自己说过什么。
AIMessage("准备好材料、选择好地点……")
]
response = llm.invoke(messages)
print(type(response))
print(response)
字典格式
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
messages = [
{"role": "system", "content": "你是荒野求生专家。"},
{"role": "user", "content": "请告诉我怎么搭建庇护所。"},
{"role": "assistant", "content": "准备好材料、选择好地点……"}
]
response = llm.invoke(messages)
print(type(response))
print(response)
多模态
多模态是指处理不同类型数据的能力,比如:文本、音频、图像和视频。因为本地计算机资源问题,本文只演示了两种类型,音频和视频类型可以去官网查看代码案例。
图片(在线)
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
#从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
#创建大模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
# From URL
messages = [
HumanMessage(
content=[
{"type": "text", "text": "描述图片的内容"},
{"type": "image", "url": "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"}
]
)
]
response = llm.invoke(messages)
print(type(response))
print(response.content)
图片(本地)
import base64
import dotenv
import os
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
# 加载环境变量
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
# 创建模型实例
llm = ChatOpenAI(model="gpt-4o-mini")
# 读取本地图片并转 base64
file_path = "C://Users//Administrator//Desktop//a.png"
with open(file_path, "rb") as f:
image_base64 = base64.b64encode(f.read()).decode("utf-8")
# 构造消息
messages = [
HumanMessage(
content=[
{"type": "text", "text": "描述图片的内容"},
{
"type": "image",
"base64": image_base64,
"mime_type": "image/png",
"filename": "a.png"
},
]
)
]
# 调用模型
response = llm.invoke(messages)
print(type(response))
print(response.content)

PDF文件(本地)
import base64
import dotenv
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage, ToolMessage
from langchain_openai import ChatOpenAI, OpenAI
import os
# 从.env文件加载环境变量到程序的运行环境中。
dotenv.load_dotenv()
os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')
os.environ['OPENAI_BASE_URL'] = os.getenv('OPENAI_BASE_URL')
llm = ChatOpenAI(model="gpt-4o-mini")
# 读取本地 PDF 并转 base64
file_path = "C://Users//Administrator//Desktop//a.pdf"
with open(file_path, "rb") as f:
file_data = f.read()
file_base64 = base64.b64encode(file_data).decode("utf-8")
# 构造消息
messages = [
HumanMessage(
content=[
{"type": "text", "text": "把文件中的数据转成严格的 JSON 格式。"},
{
"type": "file",
"base64": file_base64,
"mime_type": "application/pdf",
"filename": "a.pdf"
}
]
)
]
# 调用模型
response = llm.invoke(messages)
print(type(response)) # <class 'AIMessage'>
print(response.content) # 模型返回的 JSON


更多推荐


所有评论(0)