【自然语言处理与大模型】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])
相关推荐
JustHappy5 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
老毛肚5 小时前
jeecg-boot-base-core 02 day
javascript·python
snow@li5 小时前
SEO-文章标题:写文章时候,分类+主标题+大纲+解释 作为标题 / 不点进去也知道全文覆盖什么 / 标题即架构
前端
kyriewen6 小时前
Git Commit 前自动修复代码风格?配置 Husky + lint-staged,从此 CR 只聊逻辑
前端·git·面试
小和尚同志6 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc
老马识途2.07 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
徐小夕7 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
运筹vivo@8 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
#麻辣小龙虾#9 小时前
基于vue3.0开发一款【固废与废气运维管理系统】(支持源码)
前端·vue.js·vue3
Cosolar9 小时前
Docsify零构建文档站完全指南:从快速搭建到企业级部署
前端·开源·github