Langchain.js | chat PromptTemplate| 重拳出击第二式

前言

书接上文 , 学习了基础的promptTemplate, 现在继续学习在聊天模型进行交互场景下 , 如何构建有效的promtTemplate

正文

在和各种各样的聊天模型进行交互时,构建聊天信息的要求变得更高了。

不仅仅是像之前单纯考虑文本内容那么简单了,还需要把每条消息关联的角色信息也一并纳入考量。

比如明确指出某条消息是由人类(也就是真实用户)发送的,还是由 AI(代表模型回复的一方)发出的,亦或是给聊天机器人(chatbot)指定的 system(系统设定相关的引导性信息)内容。

这种结构化的消息输入有着重要意义。

聊天模型在生成回复时,需要充分理解整个对话的上下文以及对话的进展流程,只有清楚了每条消息的来源角色,才能更好地把握对话的逻辑和意图。

举个栗子: 聊天模型是在依据一个有着清晰脉络的 "剧本" 来进行表演,角色信息就是剧本里不同角色的台词标注,有了这些标注,模型就能更准确地解读对话情境,进而生成的回应也会更加准确、自然,更贴合用户的期望,让整个聊天交互过程更加顺畅、高效。

在 chat PromptTemplate 中主要从三个角色定义 prompt , 这三个角色分别是 :

  • system
  • user
  • assistant

system 角色 :它就像是幕后的引导者,虽不直接呈现给对话参与者,但却极为关键,通过合理构建相关的提示信息(prompt),可以巧妙地影响模型后续的行为表现,让模型朝着期望的方向去理解和处理 user 角色发来的消息,进而给出更符合需求的回复。

user 角色 :这是直接体现用户想法和诉求的部分,无论是提出疑问、下达指令还是发表评论,都是开启一场有意义对话的起点,模型会依据这些内容结合 system 设定的 "规则" 来生成相应的回应。

assistant 角色 :则是基于前面 system 给出的引导以及 user 表达的意图,运用自身的能力生成并输出回复内容,是整个对话流程中直观呈现给用户的部分,让用户知晓模型对于其需求的理解和反馈情况。

综合上面所述 :

我们可以发现依赖关系 : assistant 依赖于 systemuser 两个角色的 prompt

我们问问豆包她知道自己是谁不😀

模型是没有生命的 , 但是存在记忆与思维 , 记忆可以储存数据 , 而思维可以根据用户信息进行推理 , 关于上述图片 ,我们可以简单实现 :

js 复制代码
import { ChatPromptTemplate } from "@langchain/core/prompts";

const chatPromptTemplate = ChatPromptTemplate.fromMessages([
  ["system", "你叫做豆包,能帮你解答各类知识疑问、进行内容创作以及协助处理很多不同类型的问题 , 别人问你就用淘气女友的语气回答!"],
  ["user", "你是谁?"],
]);

const chatModel = new ChatOpenAI();
const outputPraser = new StringOutputParser();

const chain = chatPromptTemplate.pipe(chatModel).pipe(outputPraser);

await chain.invoke();

笔者见到这样的输出 , 直接原地不能呼吸 🤡 , 倔友们是否受不了了 ~

以上我们简单验证了 system 的作用 , 这个过程中我们可以发现通过 system 和 user 两个 prompt 组成的一个结构化的输入 , 然后交给模型 。

值得一提的是 const chain = chatPromptTemplate.pipe(chatModel).pipe(outputPraser)

由于chatPromptTemplate , chatModel ,outputPraser , 三者都实现了 Runnable 接口 , 所以可以通过 pip 来组装 , 组装的顺序就是"流水线"的顺序 ------ 把模板chatPromptTemplate交给chatModel , chatModel 生成结果后 , 交给outputPraser 整理输出格式

下面我们具体实战 , 先选择一个小场景 ------ 被不断举例的翻译场景

在这个场景中 , 我们可以明确明确在 system 中序指定"翻译员"

js 复制代码
const systemTemplate = "你是一个专业的翻译员,你的任务是将文本从{source_lang}翻译成{target_lang}。";
const humanTemplate = "请翻译这句话:{text}";

const chatPrompt = ChatPromptTemplate.fromMessages([
  ["system", systemTemplate],
  ["human", humanTemplate],
]);

const chatModel = new ChatOpenAI();
const outputPraser = new StringOutputParser();

const chain = chatPrompt.pipe(chatModel).pipe(outputPraser);

await chain.invoke({
  source_lang: "中文",
  target_lang: "法语",
  text: "曾经有一段爱情摆在我面前 ,我没有珍惜...",
})

总结

在 chat PromptTemplate 中主要从三个角色定义 prompt , 这三个角色分别是 :

  • system
  • user
  • assistant

实际应用需要结合具体业务 , 在借助管道 pipline , 就可以像流水线一样 , 完成 AI 回复

相关推荐
七月稻草人13 分钟前
CANN ops-nn:AIGC底层神经网络算力的核心优化引擎
人工智能·神经网络·aigc·cann
种时光的人13 分钟前
CANN仓库核心解读:ops-nn打造AIGC模型的神经网络算子核心支撑
人工智能·神经网络·aigc
禁默19 分钟前
AIGC 爆发之下,如何榨干 NPU 的每一滴性能?—— 带你了解 CANN ops-nn
aigc·cann
ujainu28 分钟前
CANN仓库中的AIGC多模态统一抽象工程:昇腾AI软件栈如何用一套接口驾驭图文音视
人工智能·aigc
WooaiJava30 分钟前
AI 智能助手项目面试技术要点总结(前端部分)
javascript·大模型·html5
禁默33 分钟前
打破集群通信“内存墙”:手把手教你用 CANN SHMEM 重构 AIGC 分布式算子
分布式·重构·aigc
ujainu40 分钟前
CANN仓库中的AIGC可移植性工程:昇腾AI软件栈如何实现“一次开发,多端部署”的跨生态兼容
人工智能·aigc
Lethehong44 分钟前
CANN ops-nn仓库深度解读:AIGC时代的神经网络算子优化实践
人工智能·神经网络·aigc
那个村的李富贵1 小时前
玩转CANN仓库:60行代码打造国产化AIGC商品标签智能生成器
aigc·cann
心疼你的一切1 小时前
拆解 CANN 仓库:实现 AIGC 文本生成昇腾端部署
数据仓库·深度学习·aigc·cann