【自然语言处理与大模型】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])
相关推荐
编程之路从0到11 小时前
JSI入门指南
前端·c++·react native
开始学java2 小时前
别再写“一锅端”的 useEffect!聊聊 React 副作用的逻辑分离
前端
百度地图汽车版2 小时前
【智图译站】基于异步时空图卷积网络的不规则交通预测
前端·后端
qq_12498707532 小时前
基于Spring Boot的“味蕾探索”线上零食购物平台的设计与实现(源码+论文+部署+安装)
java·前端·数据库·spring boot·后端·小程序
编程之路从0到12 小时前
React Native 之Android端 Bolts库
android·前端·react native
小酒星小杜2 小时前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统 - Build 篇
前端·vue.js·架构
奔跑的web.2 小时前
TypeScript 全面详解:对象类型的语法规则
开发语言·前端·javascript·typescript·vue
江上月5132 小时前
JMeter中级指南:从数据提取到断言校验全流程掌握
java·前端·数据库
代码猎人2 小时前
forEach和map方法有哪些区别
前端
恋猫de小郭2 小时前
Google DeepMind :RAG 已死,无限上下文是伪命题?RLM 如何用“代码思维”终结 AI 的记忆焦虑
前端·flutter·ai编程