在构建基于人工智能的应用时,无论是聊天机器人、智能客服还是问答系统,消息都是至关重要的基础元素。它承载着对话的核心内容,标识了交互的角色和方式,直接影响着模型的表现和用户体验。
本文将深入探讨LangChain中的消息机制,帮助开发者更好地理解并应用这一核心概念,从而优化AI系统的开发与实现。
一、为什么要关注 LangChain 中的消息?
在AI驱动的对话中,消息是模型与用户之间沟通的基本单位。通过消息,用户表达需求,模型提供响应,甚至可以调用外部工具完成复杂任务。
当你需要构建一个复杂的AI应用时候,你需要调用LLM、Tools、Agents、Apis等,你将面临如何处理这些组件间信息交换。这有点像管道 ——Messages就是水,区分它们的方式比你最初想象的更重要。
如果对消息的结构和工作原理缺乏清晰认知,开发时很容易在项目中遇到困难。而一旦熟悉了消息的核心原理,就能够更好地控制模型行为,构建高效的提示词结构,并在复杂的工作流中实现灵活的功能。
二、LangChain 中的消息概念
在LangChain中,消息被定义为AI对话中的基本块CHUNK。每条消息都包含以下关键部分:
- 角色(Role):指明消息发送者的身份,为模型解读提供上下文。主要角色包括:
- •用户(User):发起交互的主体,通常是提出问题或指令。
- •助手(Assistant):AI 的回复者,提供解答或执行指令。
- •系统(System):设定对话规则与语气的角色,用于指导助手行为。
- •工具(Tool):当模型调用外部工具或 API 时,该角色返回结果。
- •函数(Function):用于支持 OpenAI 早期函数调用系统的遗留角色。
- 内容(Content):传递消息的核心信息,通常为文本,也可包含图片、音频等多媒体内容。
- 其他数据(Other Message Data):包括消息 ID、名称、元数据(如时间戳、令牌使用量)以及工具调用相关信息。
LangChain提供了统一的消息结构,使得开发者无需关心不同模型提供商(如OpenAI、Anthropic等)的格式差异,从而大幅提升了开发效率。
消息格式示例
以下是OpenAI原生消息格式与LangChain消息格式的对比:
// OpenAI 原生消息格式{ role: "user", content: "给我讲个笑话。"}// LangChain 消息格式import { HumanMessage } from "@langchain/core/messages";new HumanMessage("给我讲个笑话。");可以看出,LangChain格式更加清晰简洁,尤其在需要处理复杂对话逻辑时,能够显著提升开发效率。
三、LangChain 核心消息类型
LangChain提供了一系列核心消息类型,每种类型在对话流程中扮演着独特角色。以下是主要的几类消息及其功能:
1.SystemMessage- 设定模型行为
用于定义模型在整个对话中的角色、语气和行为规则,适合需要严格控制AI响应范围的场景。
示例代码:
import { SystemMessage } from "@langchain/core/messages";const message = new SystemMessage("你是一位乐于助人的旅行助手。");2.HumanMessage- 捕获用户输入
表示用户在对话中输入的信息,可以是文本、图片或其他多模态内容。
示例代码:
import { HumanMessage } from "@langchain/core/messages";const userMessage = new HumanMessage("今天天气怎么样?");3.AIMessage- 模型的回应
表示AI对用户输入的回复,可以是纯文本,也可以包含工具调用信息或相关元数据。
示例代码:
import { AIMessage } from "@langchain/core/messages";const aiResponse = new AIMessage("天气晴朗,最高气温 25 摄氏度。");4.AIMessageChunk- 流式响应
支持流式返回响应内容,将长文本拆分为多个片段逐步传递,从而提升用户体验。
示例代码:
for await (const chunk of model.stream([new HumanMessage("讲个故事。")])) { console.log(chunk);}5.ToolMessage- 处理工具调用结果
当AI调用外部工具时,用于返回工具调用结果并提供相应上下文信息。
示例代码:
import { ToolMessage } from "@langchain/core/messages";const toolMessage = new ToolMessage({ tool_call_id: "weather-api", content: "当前气温为 22 摄氏度。",});四、特殊及工具类消息类型
除了上述核心类型外,LangChain还提供了一些特殊消息类型,用于支持复杂工作流或兼容遗留系统:
- RemoveMessage:用于删除聊天历史记录,适合需要动态管理对话内容的场景。
- FunctionMessage:用于兼容
OpenAI早期函数调用系统,但现代实现更推荐使用 ToolMessage。
- FunctionMessage:用于兼容
五、用消息构建对话
每次AI对话本质上都是一系列有序排列的消息构成的,这些消息通过角色和内容共同定义对话结构。典型对话流程如下:
- 使用
SystemMessage开篇,引导模型行为。
- 使用
- 用户通过
HumanMessage提出问题。
- 用户通过
- 模型通过
AIMessage作出回应。
- 模型通过
- 如果涉及工具调用,则使用
ToolMessage或FunctionMessage返回结果。
- 如果涉及工具调用,则使用
示例:构建简单对话
以下是一个关于烹饪技巧的对话示例:
import { SystemMessage, HumanMessage, AIMessage,} from "@langchain/core/messages";const messages = [ new SystemMessage("你是一位提供烹饪技巧的助手。"), new HumanMessage("如何做出蓬松的煎饼?"), new AIMessage("使用酪乳,不要过度搅拌面糊,用中火烹饪。"), new HumanMessage("谢谢!搭配什么配料好呢?"), new AIMessage("新鲜浆果、枫糖浆或撒上一层糖粉都很合适。"),];通过有序安排消息序列,可以确保对话逻辑清晰且连贯。
六、实战应用:调用聊天模型
以下展示如何使用LangChain消息与聊天模型进行交互:
示例 1:基础笑话交互
import { ChatOpenAI } from "@langchain/openai";import { HumanMessage } from "@langchain/core/messages";const model = new ChatOpenAI({ temperature: 0.7 });const response = await model.invoke([ new HumanMessage("讲一个关于猫的笑话。")]);console.log(response.content);// 输出:"猫咪为什么坐在电脑上?因为它想盯着鼠标呀!"示例 2:流式响应
通过AIMessageChunk实现逐步输出,提高实时交互体验。
const stream = await model.stream([ new HumanMessage("讲一个关于披萨的笑话。")]);for await (const chunk of stream) { process.stdout.write(chunk.content);}// 输出:"披萨师傅为什么辞职?因为他实在无法做到收支平衡呀!"示例 3:工具调用
以下是通过ToolMessage实现工具调用和结果返回的完整流程:
import { AIMessage, ToolMessage } from "@langchain/core/messages";const messages = [ new HumanMessage("法国的首都是哪里?"), new AIMessage({ content: "", additional_kwargs: { tool_calls: [{ id: "search_1", name: "search_tool", args: { query: "法国的首都" } }] } }), new ToolMessage({ tool_call_id: "search_1", content: "巴黎" }),];const result = await model.invoke(messages);console.log(result.content);// 输出:"法国的首都是巴黎。"七、总结
LangChain的消息机制提供了一种结构化且高效的方法来管理AI对话。通过理解其核心类型和使用场景,开发者可以更好地实现从简单聊天到复杂工作流管理的一系列功能。在未来的发展中,掌握并灵活运用这些工具将成为构建智能化应用的重要能力。
说真的,这两年看着身边一个个搞Java、C++、前端、数据、架构的开始卷大模型,挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis,稳稳当当过日子。
结果GPT、DeepSeek火了之后,整条线上的人都开始有点慌了,大家都在想:“我是不是要学大模型,不然这饭碗还能保多久?”
我先给出最直接的答案:一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。
即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!
这绝非空谈。数据说话
2025年的最后一个月,脉脉高聘发布了《2025年度人才迁徙报告》,披露了2025年前10个月的招聘市场现状。
AI领域的人才需求呈现出极为迫切的“井喷”态势
2025年前10个月,新发AI岗位量同比增长543%,9月单月同比增幅超11倍。同时,在薪资方面,AI领域也显著领先。其中,月薪排名前20的高薪岗位平均月薪均超过6万元,而这些席位大部分被AI研发岗占据。
与此相对应,市场为AI人才支付了显著的溢价:算法工程师中,专攻AIGC方向的岗位平均薪资较普通算法工程师高出近18%;产品经理岗位中,AI方向的产品经理薪资也领先约20%。
当你意识到“技术+AI”是个人突围的最佳路径时,整个就业市场的数据也印证了同一个事实:AI大模型正成为高薪机会的最大源头。
最后
我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包【允许白嫖】:
✅从入门到精通的全套视频教程
✅AI大模型学习路线图(0基础到项目实战仅需90天)
✅大模型书籍与技术文档PDF
✅各大厂大模型面试题目详解
✅640套AI大模型报告合集
✅大模型入门实战训练
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
①从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(0基础到项目实战仅需90天)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤640套AI大模型报告合集
⑥大模型入门实战训练
👉获取方式:
有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓