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 | 用户输入 | 提问、指令 | "请帮我写一首诗" |
AIMessage | AI 回复 | 对话历史、上下文 | "好的,我来写一首诗" |
🔄 多轮对话示例
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 说的话(用于对话历史)- 多轮对话需要保留历史消息