前端拥抱AI:LangChain.js 入门遇山开路之PromptTemplate

PromptTemplate是什么

PromptTemplate是一个可重复使用的模板,用于生成引导模型生成特定输出的文本。与Prompt的区别: PromptTemplate相对于普通Prompt的优势,即其灵活性和可定制性。

简单了解PromptTemplate后,咱们就来聊聊LangChain里的PromptTemplate---让聊天变得像搭积木一样简单的神奇工具,我们知道通过提供不同的Prompt,AI模型能够生成风格迥异的答案。明确的Prompt能引导模型生成高质量的文本内容。

首先,咱们得明白,prompt就是那根能撬动大模型智慧的杠杆。在没有template时,需要自己一字一句地构造问题。但现在,有了PromptTemplate,就像有了个私人定制的工厂,想要什么都行!

无输入变量的模板

新手村第一站,从最基础的开始------无变量Template,就是"hello world"级别的问候。但它却是理解PromptTemplate世界的敲门砖。

引用langchain的prompts模块提供的PromptTemplate 方法传入 inputVariables 和 template,打印一下,在Jupter运行如下

import { PromptTemplate } from "npm:/@langchain/core/prompts";``   ``const greetingPrompt = new PromptTemplate({`  `inputVariables: [],`  `template: "hello,前端慢报",``});``const formattedGreetingPrompt = await greetingPrompt.format();``console.log(formattedGreetingPrompt);

带变量的模板

接下来,咱们升级一下,整点带变量的。比如,"{greeting},{name}",咱们就可以根据对方的名字来定制问候了。

const autoInferTemplate = PromptTemplate.fromTemplate("{greeting},{name}");``console.log(autoInferTemplate.inputVariables);``   ``const formattedAutoInferTemplate = await autoInferTemplate.format({`  `greeting: "吃了吗您",`  `name: "AI降临派",``});` `console.log(formattedAutoInferTemplate)

动态变量的模板

LangChain让咱们可以像玩乐高一样组合这些PromptTemplate。想象一下,你手里有一堆五颜六色的积木块,每个都代表着不同的问候、指令或者问题。你只需要按照心情和场景,随意搭配,当我们面临需要实时动态地为PromptTemplate生成参数的情况时,我们可以巧妙地利用函数来实现这一目标。就像一位经验丰富的工匠,精心雕琢每一块拼图,函数能够精确地指定template中的部分参数,使其根据实际需求灵活变化,提升了我们的工作效率

    通过写一个获取日期的函数,传给date变量,示例代码如下:

const getCurrentDate = () => {` `return new Date().toLocaleDateString();``};``   ``const promptWithDynicDate = new PromptTemplate({` `template: "今天是{date},{dowhat}。",` `inputVariables: ["date", "dowhat"],``});``   ``const partialedPromptWithDate = await promptWithDynicDate.partial({`  `date: getCurrentDate,``});``   ``const formattedPromptWithDate = await partialedPromptWithDate.format({`  `dowhat: "看三体",``});``console.log(formattedPromptWithDate);

与大模型结合的模板

但LangChain的神奇之处远不止于此,开胃凉菜上完了,该硬菜了。

为了方便我们构建和处理这种复杂但至关重要的聊天消息,LangChain提供了一系列强大的工具,使我们与模型的交互将更加得心应手,为了方便地构建和处理这种结构化的聊天消息,LangChain对不同的角色有不同的消息类别,分为:

HumanMessage、AIMessage、SystemMessage、ToolMessage

在下边的代码示例中,systemTemplate 和 humanTemplate 分别对应了一段 ChatMessage 不同的角色。通过角色标识消息的发送者。角色的概念对 LLM 理解和构建整个对话流程非常重要,相同的内容由不同的 role 发送出来的意义是不同的 (可以对下边的代码片段执行下,看下返回的效果)。

systemTemplate 对应的"SystemMessage"角色的消息用于设置对话的上下文或指定模型采取特定的行为模式。这些消息不会直接显示在对话中,但它们对模型的行为有指导作用。可以理解成模型的元信息,权重比较高,但并不是所有的模型都支持。

humanTemplate 对应"HumanMessage"角色代表来自用户的消息。这些消息通常是问题、指令等。

import { StringOutputParser } from "npm:/@langchain/core/output_parsers";``import { Ollama } from "npm:/@langchain/community/llms/ollama";` `import { ChatPromptTemplate } from "npm:/@langchain/core/prompts";``   ``const systemTemplate = "你是一个专业的翻译员,你的任务是将文本从{source_lang}翻译成{target_lang}。";``const humanTemplate = "请翻译这句话:{text}";``const chatPrompt = ChatPromptTemplate.fromMessages([`  `["system", systemTemplate],`  `["human", humanTemplate],` `]);``// only human, AI, or system message coercion is currently supported``const chatModel = new Ollama({` `baseUrl: "http://localhost:11434",`  `model: "llama3",` `});``const outputPraser = new StringOutputParser();``   ``const chain = chatPrompt.pipe(chatModel).pipe(outputPraser);``   ``await chain.invoke({`  `source_lang: "中文",`  `target_lang: "英语",`  `text: "你好,世界",``})

代码里ChatPromptTemplate 数组接受的参数目前看只支持 system, human, ai

const chatPrompt = ChatPromptTemplate.fromMessages([`  `["system", systemTemplate],`  `["human", humanTemplate],` `]);``// only human, AI or system message coercion is currently supported.

填写其他会报错

总结

本文介绍了

  • PromptTemplate是什么

  • 无输入变量的模板

  • 带变量的模板

  • 动态变量的模板

  • 与大模型结合的模板

通过这篇文章,读者可以深入了解LangChain.js中的PromptTemplate概念、创建方法、高级特性以及最佳实践,从而在实际项目中更好地利用这一功能。

Make your hands dirty! 动手试试吧


如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

"最先掌握AI的人,将会比较晚掌握AI的人有竞争优势"。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

最后如果您也对AI大模型感兴趣想学习却苦于没有方向👀
小编给自己收藏整理好的学习资料分享出来给大家💖

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉如何学习AI大模型?👈

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

四、AI大模型商业化落地方案

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

相关推荐
自不量力的A同学12 分钟前
微软发布「AI Shell」
人工智能·microsoft
anyup_前端梦工厂15 分钟前
uni-app 认识条件编译,了解多端部署
前端·vue.js·uni-app
花生糖@44 分钟前
OpenCV图像基础处理:通道分离与灰度转换
人工智能·python·opencv·计算机视觉
2zcode1 小时前
基于YOLOv8深度学习的智慧农业棉花采摘状态检测与语音提醒系统(PyQt5界面+数据集+训练代码)
人工智能·深度学习·yolo
Fetters041 小时前
一篇快速上手 Axios,一个基于 Promise 的网络请求库(涉及原理实现)
前端·ajax·axios·promise
蒟蒻的贤1 小时前
vue11.22
开发语言·前端·javascript
爱上语文1 小时前
Axios案例练习
前端·javascript·css·html
河畔一角1 小时前
升级react@18.3.1后,把我坑惨了
前端·react.js·低代码
天天进步20151 小时前
Vue 3 + Vite:构建闪电般快速的开发环境
前端·javascript·vue.js
Dragon Wu1 小时前
前端框架 Redux tool RTK 总结
前端·javascript·前端框架