当前位置: 首页 > news >正文

[LangChain] 07. 消息占位

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

[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.hskmm.com/?act=detail&tid=37330

相关文章:

  • 2025 年洗碗机源头厂家最新推荐榜:聚焦实力企业,为餐饮及企事业单位选购提供权威参考通道式/链条式/流水线/酒店/学校/工厂/全自动洗碗机公司推荐
  • git ssh 已配置公钥,但仍然报错: Permission denied (publickey) - lay
  • 2025 年最新外呼系统厂家最新推荐排行榜:深度解析技术实力、服务体系及行业适配方案解决方案 / 电话营销 / 智能 / 电销卡 / 平台搭建 / 电销卡 / 线路公司推荐
  • 加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
  • RFSOC学习记录(三)LMK04828时钟配置
  • 设计原则-教程
  • WTAPI框架/微信个人号开发协议
  • AE/PR插件-Beauty Box v6.0.2 专业视频人像磨皮美颜润肤插件
  • 循环神经网络RNN
  • 2025 年北京紧急 / 北京上门 / 北京防盗门 / 北京密码锁开锁公司推荐:北京锁王开锁有限公司 —— 安全锁具服务的可靠之选
  • 2025 年封口机厂家推荐:武汉吕工机械,以技术创新驱动包装行业新发展
  • ubuntu 20.04 安装 maven 3.8.1
  • 开发微信机器人/个微/WTAPI框架
  • 详细介绍:python-poppler - PDF文档处理Python绑定库
  • 火山引擎发布新产品用户研究Agent,并推出数据智能体评测体系
  • pycharm 2025.2.3 安装、授权、使用说明
  • 读书笔记:白话解读Oracle哈希分区
  • GIT DUBUG 变量设置
  • 九种类图归纳总结
  • git ssh 已配置公钥,但仍然无法连接成功 - lay
  • 阅读笔记-待选中
  • 2025年10月国内环保悬浮拼装地板生产厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 批量跑脚本后自定义消息内容发送至钉钉--自定义发送到钉钉的消息内容
  • 2025年10月国内北京黄金回收公司全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 在IntelliJ IDEA中采用Git
  • 国产化Excel开发组件Spire.XLS教程:在Python中将Pandas DataFrame导出到Excel的详细教程
  • 2025 年化工塑料桶生产厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 主流CI/CD工具选型指南:助力企业实现高效交付
  • 通过openwrt唤醒pc电脑
  • 图表控件Aspose.Diagram教程:在C#中将VSD转换为PDF