【自然语言处理与大模型】LangChainV1.0入门指南:核心组件Messages

Messages 是 LangChain 中模型的基本上下文单元。它们代表模型的输入和输出,在与 LLM 交互时,携带内容和元数据来表示对话状态。Message的组成:

  • role: 消息是由哪个角色发出的
  • content: 表示消息的实际内容(如文本、图像、音频、文档等)
  • metadata: 可选字段,如响应信息、消息 ID 和令牌使用情况

LangChain 提供了一种标准消息类型,可在所有模型提供者之间通用,确保无论调用哪个模型都能保持一致的行为。

一、不同类型的提示词

1、Text prompts

python 复制代码
model.invoke("在这里面写的就是文本提示词")

2、Message prompts

可以通过提供消息对象列表将消息列表传递给模型。当你想要包含系统指令、管理多轮对话和处理多模态内容(图像、音频、文件)的时候使用Message prompts

python 复制代码
messages = [
    SystemMessage("你是一个乐于助人的小助手"),
    HumanMessage("我叫小呆,你好"),
    AIMessage("你好!很高兴见到你,我是你的AI助手"),
    HumanMessage("我叫什么?")
]

3、OpenAI 消息格式的 prompts

python 复制代码
messages = [
    {"role": "system", "content": "你是一个乐于助人的小助手"},
    {"role": "user", "content": "我叫小呆,你好"},
    {"role": "assistant", "content": "你好!很高兴见到你,我是你的AI助手"},
    {"role": "user", "content": "我叫什么?"},
]

model.invoke(messages)

二、创建消息对象

使用消息最简单的方法是创建消息对象,并在调用模型时将其传递给模型。

四种消息对象类型:

  • HumanMessages 模型生成的响应,包括文本内容、工具调用和元数据
  • AImessages 代表用户输入和与模型的交互
  • ToolMessages 表示工具调用的输出
  • SystemMessages 告知模型如何行为并提供交互上下文
python 复制代码
from langchain.messages import (
    HumanMessage,
    AIMessage,
    SystemMessage,
    ToolMessage
)

我们一起看一个例子

python 复制代码
from langchain.chat_models import init_chat_model
from langchain.messages import (
    HumanMessage,
    AIMessage,
    SystemMessage,
    ToolMessage
)

from dotenv import load_dotenv

load_dotenv(override=True)
model = init_chat_model(
    model="deepseek-chat"
)

# 看看创建出来的Message对象长什么样
HumanMessage("你好")

# 还可以再
HumanMessage(
    content="你好",
    name="小呆",       # 可选:识别不同的用户,但是name字段的行为因模型提供者而异,有些用于用户识别,有些则忽略它。
    id="msg-xiaodai"  # 可选:跟踪的唯一标识符
)

SystemMessage("你是一个乐于助人的小助手")

messages = [
    SystemMessage("你是一个乐于助人的小助手"),
    HumanMessage("你好")
]

model.invoke(messages)

messages消息列表中使用Langchain之前的元组形式也是可以的

python 复制代码
# 如果你不创建Message对象,也是可以的,之前的代码中就是直接一个字符串。
model.invoke("你好")

# 但直接传入字符串的缺点是无法指定角色,所以可以用下面这种方式
messages = [
    ("system", "你是一个乐于助人的小助手"),
    ("user", "你好")
]

model.invoke(messages)

HumanMessage支持多模态输入

python 复制代码
# 换成glm,因为deepseek-chat不支持多模态
from langchain_community.chat_models import ChatZhipuAI

glm_model = ChatZhipuAI(model='glm-4.6v-flash')



# 直接使用OpenAI格式
glm_model.invoke(input=[
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://cloudcovert-1305175928.cos.ap-guangzhou.myqcloud.com/%E5%9B%BE%E7%89%87grounding.PNG"
          }
        },
        {
          "type": "text",
          "text": "Where is the second bottle of beer from the right on the table?  Provide coordinates in [[xmin,ymin,xmax,ymax]] format"
        }
      ]
    }
  ])



# HumanMessage支持多模特
human_message = HumanMessage(content=[
    {
        "type": "image_url",
        "image_url": {
        "url": "https://cloudcovert-1305175928.cos.ap-guangzhou.myqcloud.com/%E5%9B%BE%E7%89%87grounding.PNG"
        }
    },
    {
        "type": "text",
        "text": "Where is the second bottle of beer from the right on the table?  Provide coordinates in [[xmin,ymin,xmax,ymax]] format"
    }
])

# 使用HumanMessage
glm_model.invoke([human_message])
相关推荐
五月君_3 小时前
炸裂!Claude Opus 4.6 与 GPT-5.3 同日发布:前端人的“自动驾驶“时刻到了?
前端·gpt
Mr Xu_3 小时前
前端开发中CSS代码的优化与复用:从公共样式提取到CSS变量的最佳实践
前端·css
低代码布道师3 小时前
Next.js 16 全栈实战(一):从零打造“教培管家”系统——环境与脚手架搭建
开发语言·javascript·ecmascript
鹏北海-RemHusband3 小时前
从零到一:基于 micro-app 的企业级微前端模板完整实现指南
前端·微服务·架构
LYFlied3 小时前
AI大时代下前端跨端解决方案的现状与演进路径
前端·人工智能
光影少年3 小时前
AI 前端 / 高级前端
前端·人工智能·状态模式
一位搞嵌入式的 genius3 小时前
深入 JavaScript 函数式编程:从基础到实战(含面试题解析)
前端·javascript·函数式
anOnion3 小时前
构建无障碍组件之Alert Dialog Pattern
前端·html·交互设计
choke2334 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能