游乐游手机版
首页/AI教程/文章详情

Langchain.js 实战二 会话消息管理

时间:2026-06-06 17:24
1 消息机制解读 在 LangChain 框架中,消息是实现模型交互的基础单元,简单来说就是输入与输出的载体。每次与大语言模型(LLM)对话时,消息都会携带内容、角色以及可能的元数据,帮助模型准确把握当前对话的上下文。每个消息对象通常由三部分构成: 角色(role)——标识该消息的发送方(例如系统

1. 消息机制解读

在 LangChain 框架中,消息是实现模型交互的基础单元,简单来说就是输入与输出的载体。每次与大语言模型(LLM)对话时,消息都会携带内容、角色以及可能的元数据,帮助模型准确把握当前对话的上下文。每个消息对象通常由三部分构成:

Langchain.js 实战二:会话消息

  • 角色(role)——标识该消息的发送方(例如系统指令、用户提问等)。
  • 内容(content)——实际承载的信息,可以是文本、图片、音频、文档等多种格式。
  • 元数据(metadata)——可选的附加信息,比如响应 ID、令牌用量等。

LangChain 提供了一套标准化的消息类型,无论对接哪种模型,消息的行为表现均保持一致,免去了适配不同接口的麻烦。

常见消息类型包括:

  • 系统消息(SystemMessage)——用于设定模型的回复规则、基调或角色定义,相当于给模型预设的“操作手册”。
  • 人类消息(HumanMessage)——用户输入的提问或指令,代表需要模型解答的问题。
  • AI消息(AIMessage)——模型返回的响应,可包含文本、工具调用信息、元数据等。
  • 工具消息(ToolMessage)——工具调用执行后返回的结果数据。

下面直接展示代码示例,结合实践理解更直观。

2. 实操演示

2.1 导入相关依赖模块

import dotenv from "dotenv"
import { ChatOpenAI } from "@langchain/openai"
dotenv.config()

2.2 创建模型实例

const llm = new ChatOpenAI({
  model: "qwen-plus",
  apiKey: process.env.QWEN_API_KEY,
  temperature: 0.7,
  streamUsage: false,  // 是否启用流式输出,默认为 false
  // maxTokens: 1000, // 最大令牌数
  // maxRetries: 6 , // 最大重试次数
  // timeout: undefined, // 超时时间设置
  logprobs: true,
  configuration: {
    baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
  }
})

2.3 消息的基础用法

将多种类型的消息一次性提交给模型,模型会根据每条消息的角色与内容依次理解并生成回应。这在多轮对话中尤为常见——要让模型记住历史信息,必须把先前的消息全部传入。来看一个完整示例:

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

const systemMsg = new SystemMessage("你是一个有用的智能助手!");
const humanMsg1 = new HumanMessage("我叫小军,请问明朝什么时候建立?");
const aiMessage = new AIMessage("明朝建立于**1368年**。");
const humanMsg2 = new HumanMessage("我叫什么名字,刚刚我问的问题是什么?");

const messages = [systemMsg, humanMsg1, aiMessage, humanMsg2];
const response = await llm.invoke(messages);
console.log(response.content);
// 返回一个AIMessage对象

运行后可以看到模型正确记住了“小军”这个名字,并且知道之前询问的是“明朝什么时候建立”,说明消息传递的历史上下文已经生效。

当然,你也可以完全手动组装消息,而不使用框架提供的方法。例如:

const messages = [
  { role: "system", content: "You are a poetry expert" },
  { role: "user", content: "Write a haiku about spring" },
  { role: "assistant", content: "Cherry blossoms bloom..." },
];
const response = await model.invoke(messages);

对于 HumanMessage,你还可以附带额外的字段,比如名字和会话 ID,使消息携带更细粒度的信息:

const humanMsg = new HumanMessage({
  content: "Hello!",
  name: "alice",
  id: "msg_123",
});

不过有一点值得留意:有时手动创建一个 AIMessage 并塞入历史记录反而很有用——就像模型自己回复了一样。不同厂商的模型对消息权重的处理方式存在差异,手动构造 AIMessage 可以灵活调整对话历史,在某些场景下非常实用。

2.3 工具消息 ToolMessage

工具消息指的是大模型调用某个外部工具后,由该工具返回的结果。对于支持工具调用的模型,AI 消息中可以包含 tool_calls,而工具消息则将调用结果回传给模型。下面是一个简单示例:

import { AIMessage, ToolMessage } from "langchain";

const aiMessage = new AIMessage({
  content: [],
  tool_calls: [
    {
      name: "get_weather",
      args: { location: "San Francisco" },
      id: "call_123
    }
  ]
});

const toolMessage = new ToolMessage({
  content: "Sunny, 72°F",
  tool_call_id: "call_123
});

const messages = [
  new HumanMessage("What's the weather in San Francisco?"),
  aiMessage,         // 模型发起的工具调用
  toolMessage,       // 工具执行后的返回结果
];
const response = await llm.invoke(messages);
// 模型处理工具返回的数据并生成最终回答

可以看到,模型先发出一个工具调用指令,工具执行后把结果封装成 ToolMessage 放回去,模型就能基于真实数据继续回复。这套机制在多步骤的 agent 工作流中非常关键。

来源:https://juejin.cn/post/7616681500684337179
上一篇Clawdbot刷爆硅谷 不是ChatGPT是另一种可能 下一篇超级简单易用的小红书MCP服务非常推荐使用
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Claude Code官方教你Loop工程附6大省token技巧
AI教程 · 2026-07-08

Claude Code官方教你Loop工程附6大省token技巧

之前写过一篇《Loop Engineering 的保姆级教程》,从概念到多工具实战,比较全面地讲了循环工程的玩法。这两天 Claude Code 官方团队下场,发了一篇博客叫「Getting started with loops」,系统地整理了他们团队内部对「循环」的定义和分类。 这篇博客的含金量十

阿里云2核4G服务器价格与选型:实例规格、收费标准及活动价
AI教程 · 2026-07-08

阿里云2核4G服务器价格与选型:实例规格、收费标准及活动价

阿里云2核4G这个配置,可以说是个人站长和中小企业用户最常关注的“爆款”了。不过它的价格可不是一个固定的数字,而是跟实例规格、带宽、云盘类型、地域等等因素紧密相关。比如目前轻量应用服务器2核4G给到峰值200M带宽、50G ESSD云盘,抢购价能做到9 9元1个月或者199元1年。通用算力型u1实例

阿里巴巴研发效能实践日:敏捷精益项目管理报名
AI教程 · 2026-07-08

阿里巴巴研发效能实践日:敏捷精益项目管理报名

研发效能提升领域又有重磅消息了。阿里巴巴研发效能实践日——由阿里研发效能部主办的线下沙龙品牌,这次携手全球领先的项目管理协会PMI,共同聚焦“敏捷精益项目管理”这一核心主题。听起来就干货满满?别急,活动精心安排了4大主题演讲,旨在帮助参会者在思维层面实现突破,并且回去就能直接落地实践。更关键的是,参

RFID资产管理系统:企业资产数字化高效管控方案
AI教程 · 2026-07-08

RFID资产管理系统:企业资产数字化高效管控方案

数字化转型走到今天,传统人工管资产那套老办法——效率低、差错多、资产一挪窝就成“失踪人口”——已经越来越扛不住了。从仓库、车间到办公室,但凡资产流转量大、品类多的企业,都急需一套能实时盯、自动盘的方案。结合多行业的落地经验来看,RFID资产管理系统之所以能成为主流选择,核心在于它用射频技术把资产全生

智能体工作流知识沉淀:从一次修复到长期记忆
AI教程 · 2026-07-08

智能体工作流知识沉淀:从一次修复到长期记忆

好的,作为一位资深的技术专家和知识管理实践者,我将为你重新讲述这篇文章的核心内容,让这些观点和案例听起来更像是一次真诚的技术分享,而不是一份AI生成的报告。 在传统软件工程里,我们反复念叨“代码复用”,但到了AI Agent参与的工程时代,真正能产生复利的东西变了——从“代码复用”悄然转向了“知识复