【LangChain】使用LangChain的提示词模板:技巧与总结

在这里插入图片描述

😁 作者简介:前端开发爱好者,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:JavaScript小贴士
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

这里是关于LangChain框架中的提示词模板使用的技巧,希望可以帮助到大家,欢迎大家的补充和纠正

文章目录

    • 一、使用LangChain的提示词模板:技巧与总结
      • 1、格式化示例集
      • 2、示例选择器来组合提示词模板
      • 3、在聊天模型中使用合适的少数示例
      • 4、如何部分格式化提示词模板

一、使用LangChain的提示词模板:技巧与总结

1、格式化示例集

我们可以使用使用FewShotPromptTemplate来格式化示例集

const examples = [{question: "Who lived longer, Muhammad Ali or Alan Turing?",answer: `Are follow up questions needed here: Yes.Follow up: How old was Muhammad Ali when he died?Intermediate answer: Muhammad Ali was 74 years old when he died.Follow up: How old was Alan Turing when he died?Intermediate answer: Alan Turing was 41 years old when he died.So the final answer is: Muhammad Ali`,},{question: "When was the founder of craigslist born?",answer: `Are follow up questions needed here: Yes.Follow up: Who was the founder of craigslist?Intermediate answer: Craigslist was founded by Craig Newmark.Follow up: When was Craig Newmark born?Intermediate answer: Craig Newmark was born on December 6, 1952.So the final answer is: December 6, 1952`,},{question: "Who was the maternal grandfather of George Washington?",answer: `Are follow up questions needed here: Yes.Follow up: Who was the mother of George Washington?Intermediate answer: The mother of George Washington was Mary Ball Washington.Follow up: Who was the father of Mary Ball Washington?Intermediate answer: The father of Mary Ball Washington was Joseph Ball.So the final answer is: Joseph Ball`,},{question:"Are both the directors of Jaws and Casino Royale from the same country?",answer: `Are follow up questions needed here: Yes.Follow up: Who is the director of Jaws?Intermediate Answer: The director of Jaws is Steven Spielberg.Follow up: Where is Steven Spielberg from?Intermediate Answer: The United States.Follow up: Who is the director of Casino Royale?Intermediate Answer: The director of Casino Royale is Martin Campbell.Follow up: Where is Martin Campbell from?Intermediate Answer: New Zealand.So the final answer is: No`,},
];const examplePrompt = PromptTemplate.fromTemplate("Question:{question} \n {answer}"
)const prompt = new FewShotPromptTemplate({examples,examplePrompt,suffix: "Question:{input}",inputVariables: ["input"]
})const formatted = await prompt.format({input: "Who was the father of Mary Ball Washington?"
})console.log(formatted)

最后输出的示例中,会将examples中的示例加入到提示词模板的前面,组合成为完整的示例

//提示词模板输出结果
Question:Who lived longer, Muhammad Ali or Alan Turing? Are follow up questions needed here: Yes.Follow up: How old was Muhammad Ali when he died?Intermediate answer: Muhammad Ali was 74 years old when he died.Follow up: How old was Alan Turing when he died?Intermediate answer: Alan Turing was 41 years old when he died.So the final answer is: Muhammad AliQuestion:When was the founder of craigslist born? Are follow up questions needed here: Yes.Follow up: Who was the founder of craigslist?Intermediate answer: Craigslist was founded by Craig Newmark.Follow up: When was Craig Newmark born?Intermediate answer: Craig Newmark was born on December 6, 1952.So the final answer is: December 6, 1952Question:Who was the maternal grandfather of George Washington? Are follow up questions needed here: Yes.Follow up: Who was the mother of George Washington?Intermediate answer: The mother of George Washington was Mary Ball Washington.Follow up: Who was the father of Mary Ball Washington?Intermediate answer: The father of Mary Ball Washington was Joseph Ball.So the final answer is: Joseph BallQuestion:Are both the directors of Jaws and Casino Royale from the same country? Are follow up questions needed here: Yes.Follow up: Who is the director of Jaws?Intermediate Answer: The director of Jaws is Steven Spielberg.Follow up: Where is Steven Spielberg from?Intermediate Answer: The United States.Follow up: Who is the director of Casino Royale?Intermediate Answer: The director of Casino Royale is Martin Campbell.Follow up: Where is Martin Campbell from?Intermediate Answer: New Zealand.So the final answer is: NoQuestion:Who was the father of Mary Ball Washington?

2、示例选择器来组合提示词模板

我们可以使用 SemanticSimilarityExampleSelector类来使用嵌入模型来计算输入样本和少数样本之间的相似性,并使用向量存储来执行最近邻搜索

let AzureOpenAIEmbedding = await getAzureEmbeddings()const exampleSelecttor = await SemanticSimilarityExampleSelector.fromExamples(examples,AzureOpenAIEmbedding,MemoryVectorStore,{k: 1}
)
const question = "Who was the father of Mary Ball Washington?"
const selectedExamples = await exampleSelecttor.selectExamples({ question })
console.log("🚀 ~ mainScript2 ~ selectedExamples:", selectedExamples)/**
🚀 ~ mainScript2 ~ selectedExamples: [{question: 'Who was the maternal grandfather of George Washington?',answer: '\n' +'  Are follow up questions needed here: Yes.\n' +'  Follow up: Who was the mother of George Washington?\n' +'  Intermediate answer: The mother of George Washington was Mary Ball Washington.\n' +'  Follow up: Who was the father of Mary Ball Washington?\n' +'  Intermediate answer: The father of Mary Ball Washington was Joseph Ball.\n' +'  So the final answer is: Joseph Ball\n' +'  '}
]
**/

当调用exampleSelecttor中的selectExamples方法的时候,它会根据输入的question来使用向量搜索从示例集中找出与输入的问题最相似的示例集

3、在聊天模型中使用合适的少数示例

在提示词结构中有一个重要的概念是示例,给大模型的输入中提供示例会让输出结果更加精准,而示例选择器可以实现一个效果:根据用户的输入选择合适的示例

在langchian中是可以实现这个功能的,使用SemanticSimilarityExampleSelector示例选择器,根据用户的输入使用向量数据库匹配更加合适的例子

实现步骤:

  • 先准备一些示例数据-最好是数组形式的
  • 然后再实例化向量大模型
  • 创建好向量数据库
  • 使用模型选择器

完整的代码如下:

  //1、先准备一个例子,这个例子是数组对象类型的,对象需要拥有input哥outputconst examples = [{ input: "2+2", output: "4" },{ input: "2+3", output: "5" },{ input: "2+4", output: "6" },{ input: "What did the cow say to the moon?", output: "nothing at all" },{input: "Write me a poem about the moon",output:"One for the moon, and one for me, who are we to talk about the moon?",},];//2、从例子中格式化数据,准备好插入到向量数据库中const toVectorize=examples.map((examples)=>`${examples.input}${examples.output}`)//3、实例化向量数据库的查询const vectorStore=await MemoryVectorStore.fromTexts(toVectorize,examples,await getAzureEmbeddings())//4、创建一个选择器const exampleSelect=new SemanticSimilarityExampleSelector({vectorStore,k:1})//5、使用const result=await exampleSelect.selectExamples({input:"hourse"})// console.log("🚀 ~ mainScript4 ~ result:", result)//6、和动态模版添加方法组合const messsageTemplate=ChatPromptTemplate.fromMessages([["user","{input}"],["ai","{output}"]])const fewPrompt=new FewShotChatMessagePromptTemplate({examplePrompt:messsageTemplate,// examples:result,exampleSelector:exampleSelect,inputVariables:['input']})//  //原文档有bug,这里是修复的,不可以直接传入fewShotPrompt,而是需要实例化一下,封装成为消息类型const finalPrompt=ChatPromptTemplate.fromMessages([["system","You are a wondrous wizard of math."],ChatPromptTemplate.fromMessages((await fewPrompt.invoke({})).toChatMessages()),["user","{input}"],])//7、模型结合使用const azureModel=await getAzureModel()const chain = finalPrompt.pipe(azureModel);console.log(await chain.invoke({ input: "What's 3+3?" }))

4、如何部分格式化提示词模板

想要对提示模板进行部分分配的一个常见用例是,如果您在其他变量之前访问提示中的某些变量。例如,假设您有一个需要两个变量(foobaz)的提示模板。如果你在链的早期获得 foo 值,但后来获得 baz 值,那么在链中完全传递这两个变量可能会很不方便。相反,你可以用 foo 值对 prompt 模板进行部分化处理,然后传递部分 prompt 模板并使用它

// 第一种使用,在partial方法中进行实例化
const prompt = new PromptTemplate({template: "{foo}{bar}",inputVariables: ["foo", "bar"]
})const partialPrompt = await prompt.partial({foo: "foo"
})const fromattedPrompt = await partialPrompt.format({bar: "baz"
})console.log(fromattedPrompt)// 第二种使用,在模板初始化中进行实例化
const prompt = new PromptTemplate({template: "{foo}{bar}",inputVariables: ["bar"],partialVariables: {foo: "foo"}
})const formattedPrompt = await prompt.format({bar: "baz",
})
// console.log("🚀 ~ mainScript2 ~ formattedPrompt:", formattedPrompt)

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

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

相关文章

电感的分类

电感作为电子电路中的重要元件,具有多种分类方式,每种类型的电感都有其独特的优缺点。以下是对电感分类及其优缺点的详细分析: 一、按工作频率分类 高频电感:适用于高频电路,具有较高的自谐振频率和较低的损耗。 优点…

9-8 束搜索

贪心搜索 穷举搜索 束搜索 小结 序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小,但精度相对较低。 穷举搜索所选取序列的精度最高,但计算量最大。 束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡…

Hive 案例分析(B站用户行为大数据分析)

Hive 案例分析(B站用户行为大数据分析) 一、案例需求二、设计数据表结构2.1 user 表结构2.2 video 表结构 三、创建数据表3.1 创建 video 数据库3.2 创建外表3.1.2 创建 external_user3.1.3 创建 external_video 3.2 创建内表3.2.1 创建 orc_user3.2.2 创…

【Qt笔记】QTreeView控件详解

目录 引言 一、QTreeView的基本用法 1. 创建QTreeView 2. 设置数据模型 3. 展开和折叠节点 4. 处理用户交互 二、自定义数据模型 1. 继承QAbstractItemModel 2. 实现必要的方法 3. 使用自定义模型 三、自定义视图和委托 1. 自定义视图 2. 自定义委托 四、过滤与…

C++ | Leetcode C++题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;} else…

YOLOv9改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型

一、本文介绍 本文记录的是基于MobileNet V3的YOLOv9目标检测轻量化改进方法研究。MobileNet V3的模型结构是通过网络搜索得来的&#xff0c;其中的基础模块结合了MobileNet V1的深度可分离卷积、MobileNet V2的线性瓶颈和倒置残差结构以及MnasNet中基于挤压和激励的轻量级注意…

python-Flask搭建简易登录界面

使用Flask框架搭建一个简易的登录界面&#xff0c;登录成功获取token数据 1 搭建简易登录界面 代码如下 from flask import Flask, jsonify from flask import request import time, hashlibapp Flask(__name__)login_html <html> <head> <title>Log…

day7 测试知识积累

1.有一个班级表,里面有学号,姓名,学科,分数。找到语文学科分数最高的前10位的姓名(SQL) select 姓名 from 班级表 where 学科=语文 order by 分数 DESC limit 10; 2.有一张年级表,有班级,年级,学生姓名,找到这10名同学所在的班级(SQL) select class from 年级表 wher…

图片转为PDF怎么弄?看这里,三款软件助你一键转换!

嘿&#xff0c;朋友们&#xff01;现在信息这么多&#xff0c;图片在我们学习、工作、生活中帮了大忙。但有时候&#xff0c;我们想把图片整理好、分享给别人或者打印出来&#xff0c;PDF格式就特别合适。PDF文件不管在哪儿打开&#xff0c;内容都不会变样&#xff0c;还能加密…

【CVPR‘24】DeCoTR:使用 2D 和 3D 注意力增强深度补全

DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions DeCoTR: Enhancing Depth Completion with 2D and 3D Attentions 中文解析摘要介绍方法方法3.1 问题设置3.2 使用高效的 2D 注意力增强基线3.3 3D中的特征交叉注意力点云归一化位置嵌入3.4 捕捉 3D 中的全局上下…

Ubuntu 安装个人热点

1. 安装必要的软件 首先&#xff0c;我们需要确保有一些工具已经装好&#xff0c;这些工具会帮助我们创建 Wi-Fi 热点。打开终端&#xff0c;输入以下命令来安装这些工具&#xff1a; sudo apt-get install git hostapd iptables dnsmasq 2. 下载并安装 create_ap 我们接下来…

【我的Android进阶之旅】快来给你的Kotlin代码添加Markdown格式的注释吧!

文章目录 一、 传统 HTML 格式注释二、 Markdown 格式注释三.、Markdown格式注释详解3.1. 基础语法3.1.1 单行注释3.1.1 多行注释3.2 标题3.3 列表3.4 加粗和斜体3.5 代码块3.6 链接3.7 引用3.8 表格3.9. 图片3.10. 示例代码3.11. 注释模板的使用场景3.12 实例示例四、总结在 A…

Vue面试常见知识总结2——spa、vue按需加载、mvc与mvvm、vue的生命周期、Vue2与Vue3区别

SPA SPA&#xff08;Single Page Application&#xff0c;单页面应用&#xff09;是一种Web应用程序架构&#xff0c;其核心特点是在用户与应用程序交互时&#xff0c;不重新加载整个页面&#xff0c;而是通过异步加载页面的局部内容或使用JavaScript动态更新页面。以下是对SPA…

突破代码:克服编程学习中的挫折感

目录 一、心态调整&#xff1a;心理韧性的培养 接受挫折是学习的一部分 设置实际的学习目标 保持学习的乐趣 二、学习方法&#xff1a;策略的实施 逐步解决问题 寻找多样的学习资源 定期复习与实践 三、成功经验&#xff1a;实例的启示 Debug的技巧掌握 算法的深入理…

APP测试(十一)

APP测试要点提取与分析 一、功能测试 APP是什么项目&#xff1f;核心业务功能梳理清楚 — 流程图分析APP客户端的单个功能模块 — 细化分析 需要使用等价类&#xff0c;边界值&#xff0c;考虑正常和异常情况&#xff08;长度&#xff0c;数据类型&#xff0c;必填&#xff0…

【微机原理】v和∧区别

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 在汇编语言和逻辑表达…

【C++ Primer Plus习题】8.7

问题: 解答: #include <iostream>using namespace std;template <typename T> T SumArray(T arr[], int n) {T sum arr[0] - arr[0];for (int i 0; i < n; i){sum arr[i];}return sum; }template <typename T> T SumArray(T *arr[], int n) {T sum *…

Vue3:通信组件

1.Props 父传子&#xff1a;直接传递需要获取的属性 子传父&#xff1a;需要借助函数&#xff0c;也就是方法&#xff0c;通过传递函数&#xff0c;子接着入参给函数&#xff0c;父调用函数即可获取到参数。 父&#xff1a; <template><div class"father&quo…

python破解[5分钟解决拼多多商家后台字体加密]

可【QQ群】拿源码 进入经营总览想把数据存下来发现返回的json数据部分空白如下 这可怎么办 稳住应该是字体的问题&#xff0c;可能是多多自己实现了某种字体&#xff0c;我们去找他的js 发现如我们所想&#xff0c;进行跟踪&#xff0c;发现的确是在css端进行了字体替换&am…

【高阶数据结构】图的应用--最小生成树

一、最小生成树 连通图中的每一棵生成树&#xff0c;都是原图的一个极大无环子图&#xff0c;即&#xff1a;从其中删去任何一条边&#xff0c;生成树就不在连通&#xff1b;反之&#xff0c;在其中引入任何一条新边&#xff0c;都会形成一条回路。 若连通图由n个顶点组成&am…