消息 (Messages)

消息是 LangChain 中模型的基本上下文单元。它们代表模型的输入和输出,携带与 LLM 交互时表示对话状态所需的内容和元数据。

消息是包含以下内容的对象:

LangChain 提供了一种标准消息类型,适用于所有模型提供商,确保无论调用哪个模型都能获得一致的行为。

基本用法

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

import { initChatModel, HumanMessage, SystemMessage } from "langchain";

const model = await initChatModel("gpt-4.1");

const systemMsg = new SystemMessage("你是一个有帮助的助手。");
const humanMsg = new HumanMessage("你好,你好吗?");

const messages = [systemMsg, humanMsg];
const response = await model.invoke(messages);  // 返回 AIMessage

文本提示

文本提示是字符串 - 非常适合不需要保留对话历史的简单生成任务。

const response = await model.invoke("写一首关于春天的俳句");

在以下情况使用文本提示:

消息提示

或者,你可以通过提供消息对象列表来向模型传递消息列表。

import { SystemMessage, HumanMessage, AIMessage } from "langchain";

const messages = [
  new SystemMessage("你是一位诗歌专家"),
  new HumanMessage("写一首关于春天的俳句"),
  new AIMessage("樱花盛开时..."),
];
const response = await model.invoke(messages);

在以下情况使用消息提示:

字典格式

你也可以直接使用 OpenAI 聊天完成格式指定消息。

const messages = [
  { role: "system", content: "你是一位诗歌专家" },
  { role: "user", content: "写一首关于春天的俳句" },
  { role: "assistant", content: "樱花盛开时..." },
];
const response = await model.invoke(messages);

消息类型

LangChain 提供了几种消息类型,每种都有特定的用途:

SystemMessage

系统消息为模型设置行为和上下文。它们通常放在对话的开头。

import { SystemMessage } from "langchain";

const systemMsg = new SystemMessage("你是一个专业的翻译助手,专注于中英文翻译。");

HumanMessage

人类消息代表用户的输入。

import { HumanMessage } from "langchain";

const humanMsg = new HumanMessage("请把这句话翻译成英文:你好世界");

AIMessage

AI 消息代表模型的响应。它们也可以包含工具调用。

import { AIMessage } from "langchain";

const aiMsg = new AIMessage({
  content: "Hello World",
  tool_calls: []  // 可选的工具调用
});

ToolMessage

工具消息携带工具执行的结果。

import { ToolMessage } from "langchain";

const toolMsg = new ToolMessage({
  content: "北京的天气是晴天,温度 25°C",
  tool_call_id: "call_123",
});

消息内容

消息内容可以是简单的文本字符串,也可以是多模态内容的数组。

文本内容

const msg = new HumanMessage("这是一条简单的文本消息");

多模态内容

对于支持多模态的模型,你可以包含图像和其他媒体:

const msg = new HumanMessage({
  content: [
    { type: "text", text: "描述这张图片" },
    {
      type: "image_url",
      image_url: { url: "https://example.com/image.jpg" }
    }
  ]
});

使用 Base64 图像

import * as fs from "fs";

const imageData = fs.readFileSync("image.png");
const base64Image = imageData.toString("base64");

const msg = new HumanMessage({
  content: [
    { type: "text", text: "这张图片里有什么?" },
    {
      type: "image_url",
      image_url: { url: `data:image/png;base64,${base64Image}` }
    }
  ]
});

消息元数据

AI 消息可以包含有用的元数据:

const response = await model.invoke(messages);

// 访问响应元数据
console.log(response.response_metadata);
// {
//   model: "gpt-4.1",
//   finish_reason: "stop",
//   ...
// }

// 访问令牌使用情况
console.log(response.usage_metadata);
// {
//   input_tokens: 100,
//   output_tokens: 50,
//   total_tokens: 150
// }

消息转换

LangChain 提供了在不同格式之间转换消息的实用函数:

import { convertToOpenAIMessages } from "langchain";

const messages = [
  new SystemMessage("你是一个助手"),
  new HumanMessage("你好"),
];

// 转换为 OpenAI 格式
const openaiMessages = convertToOpenAIMessages(messages);
// [
//   { role: "system", content: "你是一个助手" },
//   { role: "user", content: "你好" }
// ]

最佳实践

下一步