Skip to content

04-消息类型:HumanMessage/SystemMessage

💡 注意: 本教程适用于 LangChain.js v1.x,需要 Node.js 20+

🎯 本章目标

  • ✅ 理解大模型的消息格式
  • ✅ 掌握三种常用消息类型
  • ✅ 学会构建多轮对话

📦 三种常用消息类型

1. HumanMessage - 用户消息

表示用户输入的内容:

javascript
import { HumanMessage } from "@langchain/core/messages";

const userMessage = new HumanMessage("你好,请帮我写一首诗");

2. SystemMessage - 系统消息

表示系统指令,用于设定 AI 的角色和行为:

javascript
import { SystemMessage } from "@langchain/core/messages";

const systemMsg = new SystemMessage("你是一个专业的翻译助手,只负责翻译,不回答其他问题。");

3. AIMessage - AI 消息

表示AI 回复的内容(通常用于对话历史):

javascript
import { AIMessage } from "@langchain/core/messages";

const aiMessage = new AIMessage("你好!我是你的 AI 助手。");

💡 完整示例

javascript
import { ChatOpenAI } from "@langchain/openai";
import { HumanMessage, SystemMessage, AIMessage } from "@langchain/core/messages";

const model = new ChatOpenAI({
  modelName: "MiniMax/MiniMax-M2.5",
  apiKey: process.env.MODELSCOPE_API_KEY,
  configuration: {
    baseURL: "https://api-inference.modelscope.cn/v1",
  },
});

// 示例 1:只有用户消息
const response1 = await model.invoke([
  new HumanMessage("你好!")
]);

// 示例 2:系统消息 + 用户消息
const response2 = await model.invoke([
  new SystemMessage("你是一个猫娘,每句话结尾都要加'喵~'"),
  new HumanMessage("介绍一下你自己")
]);

// 示例 3:多轮对话
const response3 = await model.invoke([
  new HumanMessage("我喜欢吃苹果"),
  new AIMessage("苹果是一种很健康的水果呢!"),
  new HumanMessage("为什么?")
]);

📋 消息类型对比

消息类型作用使用场景示例
SystemMessage设定系统行为角色设定、规则约束"你是一个翻译助手"
HumanMessage用户输入提问、指令"请帮我写一首诗"
AIMessageAI 回复对话历史、上下文"好的,我来写一首诗"

🔄 多轮对话示例

javascript
const messages = [
  // 第一轮
  new HumanMessage("我想学编程"),
  new AIMessage("太好了!你想学什么编程语言呢?"),
  
  // 第二轮
  new HumanMessage("Python"),
  new AIMessage("Python 是个很好的选择!你有编程基础吗?"),
  
  // 第三轮
  new HumanMessage("完全没有"),
];

const response = await model.invoke(messages);

⚙️ AIMessage 参数详解

javascript
const aiMessage = new AIMessage(content, kwargs);

// 参数:
// - content: string - 消息内容
// - kwargs: object - 额外参数

// 示例
const msg = new AIMessage("你好", {
  name: "助手",  // 可选:AI 的名字
  // 其他元数据...
});

⚠️ 注意事项

1. SystemMessage 的位置

SystemMessage 通常放在消息列表开头

javascript
// ✅ 正确
const messages = [
  new SystemMessage("你是助手"),
  new HumanMessage("你好"),
];

// ❌ 不推荐
const messages = [
  new HumanMessage("你好"),
  new SystemMessage("你是助手"),  // 可能被忽略
];

2. 消息对象 vs 普通对象

LangChain v1.x 也支持普通对象格式:

javascript
// LangChain 消息对象(推荐)
const response = await model.invoke([
  new HumanMessage("你好")
]);

// 普通对象格式(也支持)
const response = await model.invoke([
  { role: "user", content: "你好" }
]);

📝 本章小结

  • HumanMessage = 用户说的话
  • SystemMessage = 给 AI 的指令(放开头)
  • AIMessage = AI 说的话(用于对话历史)
  • 多轮对话需要保留历史消息

🏃 下一章

05-流式输出 →

基于 LangChain.js v1.x 版本