[LangChain] 07. 消息占位

news/2025/10/23 14:36:40/文章来源:https://www.cnblogs.com/Answer1215/p/19160505

在做聊天应用时,我们的提示词往往是一串按角色分好的消息

[SystemMessage {"content": "xxx",},HumanMessage {"content": "xxx",},  占位符1AIMessage {"content": "xxx",},占位符2HumanMessage {"content": "xxx",}
]

但是可能会遇到下面的问题:

  1. 插入内容不可控:某些对话一开始无法决定内容
  2. 可维护性与可测试性差:某段对话后面是需要进行替换的

消息占位,就是在消息数组中先写一个占位符,之后某段对话定下来后,放到占位符的位置即可。

这里涉及到两个问题:

  1. 如何创建占位符
  2. 占位符放哪里

1. 如何创建占位符

LangChain.js 中提供了一个 MessagesPlaceholder 的工具类:

new MessagesPlaceholder("history")

在实例化的时候,histroy 就是该占位符的 key,或者说是名字,后面在做对话替换的时候,可以指定 key 对应的对话是什么。

2. 占位符放哪里

ChatPromptTemplate.fromMessages() 明确支持由“消息模板 + 占位符”组成的形式。

也就是说,以前我们使用 ChatPromptTemplate.fromMessages(),是这么使用的:

const spt = SystemMessagePromptTemplate.fromTemplate("你是一位中国的专业导游,请使用中文向游客介绍中国的某些地区的特产"
);const hpt = HumanMessagePromptTemplate.fromTemplate("我想问:{question}");// 将上面两个提示词进行一个组合
const chatpt = ChatPromptTemplate.fromMessages([spt, hpt]);

那么现在,你可以在数组中添加占位符,放置的位置取决于你自己的需求:

ChatPromptTemplate.fromMessages([spt,new MessagesPlaceholder("history"),hpt
]);

在上面的代码中,我们就创建了一个占位符,放置于 spt 和 hpt 这两个提示词之间。

import {ChatPromptTemplate,SystemMessagePromptTemplate,HumanMessagePromptTemplate,MessagesPlaceholder,
} from "@langchain/core/prompts";
import { HumanMessage, AIMessage } from "@langchain/core/messages";const pt = ChatPromptTemplate.fromMessages([SystemMessagePromptTemplate.fromTemplate("你是一个乐于助人的AI助手"),new MessagesPlaceholder("history"), // 加入了一个占位符HumanMessagePromptTemplate.fromTemplate("用户的问题:{input}"),
]);const res = await pt.formatMessages({input: "你好",history: [new HumanMessage("今天天气怎么样"),new AIMessage("今天天气非常晴朗"),],
});console.log(res);/*
[SystemMessage {"content": "你是一个乐于助人的AI助手","additional_kwargs": {},"response_metadata": {}},HumanMessage {"content": "今天天气怎么样","additional_kwargs": {},"response_metadata": {}},AIMessage {"content": "今天天气非常晴朗","additional_kwargs": {},"response_metadata": {},"tool_calls": [],"invalid_tool_calls": []},HumanMessage {"content": "用户的问题:你好","additional_kwargs": {},"response_metadata": {}}
]
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年洗碗机源头厂家最新推荐榜:聚焦实力企业,为餐饮及企事业单位选购提供权威参考通道式/链条式/流水线/酒店/学校/工厂/全自动洗碗机公司推荐

引言 当前,餐饮行业规模持续扩张,企事业单位后勤升级需求迫切,商用洗碗机作为提升餐具清洁效率、保障卫生安全的核心设备,市场需求日益旺盛。然而,市场上洗碗机源头厂家良莠不齐,部分厂家缺乏核心技术,设备洗净…

数据同步问题解析

1、不能全量同步 由于有时候数据量会非常的大,如果直接通过所有的数据会存在OOM的情况,所以应该使用分页查询,慢慢的去同步数据 2、游标查询 由于数据可能会存在增删改的问题,所以使用limit+offset会出现数据问题,…

微算法科技(NASDAQ MLGO)基于区块链点阵加密算法的物联网轻量级方案:构建物联网安全基石

物联网设备数量呈爆发式增长,安全问题愈发凸显。传统加密方案因计算资源与能耗需求高,难以适配资源受限的物联网设备。同时,物联网数据的隐私性、完整性和设备间信任机制面临挑战。微算法科技(NASDAQ MLGO)开发基…

Kubernetes 在企业级场景下的全流程落地实践 - 教程

Kubernetes 在企业级场景下的全流程落地实践 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

鸿蒙电脑,给世界多一种选择!

5 月 8 日,华为在深圳召开了鸿蒙电脑技术与生态沟通会,鸿蒙电脑首次亮相。5 月 19 日,华为在成都召开了 nova14 系列及鸿蒙电脑新品发布会,鸿蒙电脑正式发布。鸿蒙电脑,即搭载鸿蒙操作系统的电脑,目前发布了两款…

RFSOC学习记录(一)RF data converter总览

RFSOC介绍系列第一篇,总览最近使用了27DR的板子,是第一次接触RFSOC的产品,遇到了很多个奇怪的问题,写篇文章总结一下我对RF data converter这个ip核的看法 这是我遇到过配置最复杂的ip核,包括接口数量,时钟结构种…

git ssh 已配置公钥,但仍然报错: Permission denied (publickey) - lay

背景 在Raspberry Pi 上通过 git clone ssh://xxx@<host_name>:29418/<REPOSITORY_NAME.git> 克隆 Gerrit 仓库时失败,报错 Permission denied (publickey); 但使用 git@ 格式(如 git clone git@<ho…

2025 年最新外呼系统厂家最新推荐排行榜:深度解析技术实力、服务体系及行业适配方案解决方案 / 电话营销 / 智能 / 电销卡 / 平台搭建 / 电销卡 / 线路公司推荐

引言 在数字化转型全面深化的 2025 年,外呼系统已成为企业打通客户沟通链路、提升业务转化效率的核心工具。但当前市场中,外呼厂商资质良莠不齐,部分厂商缺乏合规资质、系统稳定性差、售后响应滞后,导致企业面临合…

加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时

本文整理自 2025 云栖大会,阿里云智能集团产品专家,洪晓龙演讲议题《函数计算:AI 时代的最佳运行时》 在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向AI原生架构演进。阿…

RFSOC学习记录(三)LMK04828时钟配置

rfsoc学习记录第三篇,lmk04828时钟介绍与配置上一篇讲了rf data converter这个ip核整体的时钟结构 以及rfdc的运行机制,在我们实际应用的过程中,还需要在PS端通过配置寄存器的方式启动时钟,而通过TICS PRO这个工具…

设计原则-教程

设计原则软件工程的七大设计原则包括开闭原则、接口隔离原则、里氏替换原则、合成复用原则、迪米特法则(最小知识原则)、单一职责原则、依赖倒置原则。(开口里合最单依) 一 开闭原则 开闭原则(Open Closed Princi…

Failed to start nginx.service: Unit nginx.service not found.

分享一篇nginx安装后,出现:Failed to start nginx.service: Unit nginx.service not found. 我们需要如何解决这个问题 在使用 Nginx 1.26.3 时遇到了 nginx.service找不到的问题。这是因为通过源码编译安装 Nginx 后…

WTAPI框架/微信个人号开发协议

WTAPI框架/微信个人号开发协议、个微协议/微信二次开发/ipad协议/WTAPI框架 WTAPI框架,是一个开发协议,专为开发微信机器人和自动化任务而设计。它允许开发者通过微信公众号接口实现各种功能,包括但不限于关键字回复…

AE/PR插件-Beauty Box v6.0.2 专业视频人像磨皮美颜润肤插件

插件简介 Beauty Box 是一款由Digital Anarchy 出品的专业视频人像磨皮美颜插件,可以智能识别人像肤色,一键磨皮。Beauty Box Video 4.0采用了最畅销,最受好评的皮肤平滑技术,并提供了实时渲染(在某些GPU上)。Be…

2025 年北京紧急 / 北京上门 / 北京防盗门 / 北京密码锁开锁公司推荐:北京锁王开锁有限公司 —— 安全锁具服务的可靠之选

行业背景 随着城市化进程加速与智能家居普及,北京开锁服务需求持续攀升,涵盖住宅、汽车、商铺等多元场景。但市场中仍混杂未经工商注册、公安备案的机构,存在技师资质不明、服务后加价、锁具损坏等乱象,甚至潜藏财…

2025 年封口机厂家推荐:武汉吕工机械,以技术创新驱动包装行业新发展

在当今包装设备行业,封口机作为关键设备,其性能和质量直接影响到产品的包装效果和生产效率。随着市场对包装需求的不断提升,各大封口机厂家纷纷加大研发投入,以满足客户日益多样化的需求。武汉吕工机械有限公司便是…

ubuntu 20.04 安装 maven 3.8.1

一、安装依赖:Java 环境 sudo apt update sudo apt install openjdk-11-jdk -y java -version二、下载 Maven 3.8.1 从 Apache 官网下载对应版本的压缩包: wget https://archive.apache.org/dist/maven/maven-3/3.8.…

SOLIDWORKS不仅是一个学习工具更是一个激发创新思维的平台 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:python-poppler - PDF文档处理Python绑定库

详细介绍:python-poppler - PDF文档处理Python绑定库pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

火山引擎发布新产品用户研究Agent,并推出数据智能体评测体系

2025年10月16日,火山引擎“FORCE LINK AI创新巡展”在武汉成功举办。作为系列巡展的重要组成部分,本站活动聚焦前沿技术产品能力在区域市场的深化落地,吸引了来自制造、金融、互联网、零售等领域的近千名企业技术负…