LangChain 入门 Message 消息
在 LangChain 中,发送给模型的消息、模型返回的消息都统一被封装为 BaseMessage,它是 Agent 中基本的上下文单元。我们不需要自己创建BaseMessage对象, LangChain 已经把常见消息根据角色(Role)创建了对应的 BaseMessage的子类
- SystemMessage: Role: system,代表系统消息,用于设定模型角色和交互背景
- HumanMessage:Role: user,代表用户输入的消息
- AIMessage: Role: assistant,代表LLM生成的响应,包含:文本、工具调用、元数据
- ToolMessage: Role: tool,代表工具调用时产生的结果

文本消息
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool
from dotenv import load_dotenv
import os
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
load_dotenv()
# 获取环境变更值
base_url = os.getenv("DASHSCOPE_BASE_URL")
api_key = os.getenv("DASHSCOPE_API_KEY")
print("定义工具")
@tool
def getWeather(city: str) -> str:
"""通过调用第三方接口,将天气进行返回"""
print(f"getWeather 正在查询{city}天气...")
return f"{city}今天是晴天,气温25度"
print("初始化模型")
# 初始化模型
model = init_chat_model(
model="qwen3.6-plus",
model_provider="openai", # 指定模型提供者(阿里兼容 openai)
base_url=base_url,
api_key=api_key,
temperature=1.5,
top_p=0.9,
)
# 创建 agent
agent = create_agent(
model=model,
tools=[getWeather]
)
# 正确的调用方式 - 使用 messages 键
response = agent.invoke({
"messages": [
# {"role": "system", "content": "你是一个天气预报助手。"},
# {"role": "user", "content": "你好,我是 VipSoft。"},
# {"role": "assistant", "content": "你好,VipSoft,很高兴认识你。"},
# {"role": "user", "content": "苏州今天的天气如何?"},
SystemMessage(content="你是一个天气预报助手。"),
HumanMessage(content="你好,我是 VipSoft。"),
AIMessage(content="你好,VipSoft,很高兴认识你。"),
HumanMessage(content="苏州今天的天气如何?")
]
})
print(response)
for message in response["messages"]:
print(message.model_dump_json(indent=2))
for message in response["messages"]:
message.pretty_print()
多模态消息
LangChain 也支持向模型发送多模态消息,如图片、音频、视频、文本等,但前提是必须多模态模型才支持
如下图:DeepSeek 是不支持多模态的
https://docs.langchain.com/oss/python/integrations/chat

在线图片
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
load_dotenv()
# 获取环境变更值
base_url = os.getenv("DASHSCOPE_BASE_URL")
api_key = os.getenv("DASHSCOPE_API_KEY")
print("初始化模型")
# 初始化模型
model = init_chat_model(
model="qwen3.6-plus",
model_provider="openai", # 指定模型提供者(阿里兼容 openai)
base_url=base_url,
api_key=api_key,
)
# 创建 agent
agent = create_agent(model=model)
# https://docs.langchain.com/oss/python/langchain/messages#multimodal
message = HumanMessage([
{"type": "text", "text": "描述一下这个图片."},
{"type": "image", "url": "http://www.vipsoft.com.cn/vipsoft/img/logo/classic/light.png"},
])
# 正确的调用方式 - 使用 messages 键
stream = agent.stream(
{"messages": [message]},
stream_mode="messages"
)
for chunk, metadata in stream:
if chunk.content:
print(chunk.content, end="", flush=True)
这张图片展示了一个经典的**太极图**(Taijitu),也被称为“阴阳鱼”。以下是详细的描述:
1. **整体形状**:图案是一个标准的正圆形。
2. **颜色与分割**:圆内被一条流畅的“S”形曲线一分为二,形成了黑白两个对称的部分。
* **左侧/上方**:主要是白色的区域。
* **右侧/下方**:主要是黑色的区域。
3. **细节(鱼眼)**:
* 在白色的区域(上方)中间,有一个黑色的实心小圆点。
* 在黑色的区域(下方)中间,有一个白色的实心小圆点。
* 这两部分看起来就像两条首尾相接、互相追逐的鱼,因此常被称为“阴阳鱼”。
4. **象征意义**:这是中国传统文化(特别是道家哲学)中极具代表性的符号,象征着阴阳的对立统一、相互转化以及宇宙的平衡与和谐(即“阴中有阳,阳中有阴”)。
本地图片
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
load_dotenv()
# 获取环境变更值
base_url = os.getenv("DASHSCOPE_BASE_URL")
api_key = os.getenv("DASHSCOPE_API_KEY")
print("初始化模型")
# 初始化模型
model = init_chat_model(
model="qwen3.6-plus",
model_provider="openai", # 指定模型提供者(阿里兼容 openai)
base_url=base_url,
api_key=api_key,
)
# 创建 agent
agent = create_agent(model=model)
# https://docs.langchain.com/oss/python/langchain/messages#multimodal
import base64
def image_to_base64(image_path):
"""
将本地图片转换为 Base64 字符串
:param image_path: 图片路径
:return: Base64 编码的字符串
"""
with open(image_path, "rb") as image_file:
# 读取图片二进制数据
image_data = image_file.read()
# 进行 Base64 编码并转为字符串
base64_str = base64.b64encode(image_data).decode('utf-8')
return base64_str
message = HumanMessage([
{"type": "text", "text": "描述一下这个图片."},
{
"type": "image",
"base64": image_to_base64(r"D:\Users\Jimmy\Pictures\VipSoft.png"),
"mime_type": "image/jpeg",
},
])
# 正确的调用方式 - 使用 messages 键
stream = agent.stream(
{"messages": [message]},
stream_mode="messages"
)
for chunk, metadata in stream:
if chunk.content:
print(chunk.content, end="", flush=True)
这是一张展示品牌标志(Logo)的图片,整体设计简洁现代,具有科技感。以下是详细描述:
1. **图形部分(上方)**:
* 这是一个抽象的图形标志,看起来像是字母“V”和“S”的艺术化结合。
* 线条流畅圆润,像是一条连续折叠的粗线条或带子,呈现出一种立体交织的感觉。
* 颜色采用了**渐变色**设计:从顶部的青绿色(或湖蓝色)逐渐向下过渡到底部的紫色(或紫罗兰色)。
2. **文字部分(下方)**:
* 图形正下方写着品牌名称“**VIPSOFT**”。
* 字体采用的是**全大写**的无衬线粗体字(Sans-serif),线条硬朗、清晰。
* 文字颜色为深青色(或深灰蓝色),显得稳重且专业。
**总结**:
这就象是一家名为“VIPSOFT”的软件或科技公司的Logo,配色清新且富有现代感。

本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/20320648
浙公网安备 33010602011771号