LangChain 入门 Message 消息

在 LangChain 中,发送给模型的消息、模型返回的消息都统一被封装为 BaseMessage,它是 Agent 中基本的上下文单元。我们不需要自己创建BaseMessage对象, LangChain 已经把常见消息根据角色(Role)创建了对应的 BaseMessage的子类

  • SystemMessage: Role: system,代表系统消息,用于设定模型角色和交互背景
  • HumanMessage:Role: user,代表用户输入的消息
  • AIMessage: Role: assistant,代表LLM生成的响应,包含:文本、工具调用、元数据
  • ToolMessage: Role: tool,代表工具调用时产生的结果

image

文本消息

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
image

在线图片

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,配色清新且富有现代感。

cc4749c54a8bf004d6717109ebb64fcc

posted @ 2026-06-05 14:06  VipSoft  阅读(10)  评论(0)    收藏  举报