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

05LangChain实战课 - 提示工程与FewShotPromptTemplate的应用

LangChain实战课 - 提示工程与FewShotPromptTemplate的应用

提示工程的重要性

在LangChain框架中,提示工程是构建有效大模型应用的关键。通过精心设计的提示,我们可以引导大语言模型(LLM)生成预期的输出。本节课深入探讨了如何利用LangChain中的提示模板进行有效的提示工程。

理解partial_variables的作用

在提示模板的构建过程中,partial_variables允许我们插入额外的变量,如输出解析器指定的format_instructions。这些变量指导模型生成结构化的输出,如JSON格式的数据。通过在提示中明确指示期望的输出格式,模型能够遵循这一格式,生成易于解析的数据结构。

提示工程的原则和策略

吴恩达老师和OpenAI的官方文档都提出了一系列关于提示工程的原则和策略,包括:

  1. 写清晰的指示
  2. 给模型提供参考(示例)
  3. 将复杂任务拆分成子任务
  4. 给GPT时间思考
  5. 使用外部工具
  6. 反复迭代问题

这些原则和策略不仅指导大语言模型,也指导我们的思维过程,使处理问题的思路更清晰。

提示的结构

一个实用的提示框架包括:

  • 指令(Instruction):告诉模型任务的大概内容和执行方式。
  • 上下文(Context):作为模型的额外知识来源,可以手动插入或通过向量数据库检索得来。
  • 提示输入(Prompt Input):具体的问题或需要大模型执行的任务。
  • 输出指示器(Output Indicator):标记生成文本的开始,如“解”或“import”。
LangChain 提示模板的类型

LangChain提供了多种提示模板,包括PromptTemplateFewShotPromptTemplatePipelinePromptTemplateChatPromptTemplate等,以适应不同的应用场景。

使用 PromptTemplate

PromptTemplate是基础的提示模板,用于生成适用于不同场景的提示。通过from_template方法,我们可以从字符串模板中创建提示模板对象,并使用format方法替换模板中的变量。

使用 ChatPromptTemplate

对于聊天模型,LangChain提供了一系列的模板,包括SystemMessagePromptTemplateHumanMessagePromptTemplate等,以适应不同的聊天角色。

FewShotPromptTemplate的应用

FewShotPromptTemplate是提示工程中非常重要的部分,它利用少量示例帮助模型理解任务并生成正确的响应。通过创建示例样本、提示模板和FewShotPromptTemplate对象,我们可以构建出最合适的提示,引导模型生成预期的输出。

示例选择器的使用

当示例很多时,使用示例选择器可以节省Token用量,提高效率。LangChain提供了SemanticSimilarityExampleSelector,根据语义相似性选择最相关的示例。

总结

本节课介绍了提示工程的原理和几种提示模板的用法,特别是FewShotPromptTemplate的应用。提供示例对于解决某些任务至关重要,FewShot的方式能够显著提高模型回答的质量。下一节课将探讨输出解析和“思维链提示”(Chain of Thought,简称CoT)。

思考题
  1. 探索PromptTemplate的参数:查看LangChain文档,尝试使用template_formatvalidate_template参数。
  2. 使用PipelinePromptTemplate和自定义Template:尝试使用这些模板,并构建自己的应用。
  3. 构想鲜花店运营场景中的客户服务对话任务:设计一个少样本学习任务,让模型学习如何解答客户的问题。
1. 探索PromptTemplate的参数

在LangChain中,PromptTemplate 是一个用于生成提示(prompts)的类,它允许开发者自定义与模型交互的方式。以下是template_formatvalidate_template参数的简要说明:

  • template_format:此参数用于指定模板字符串的格式。通常,模板字符串中会包含一些占位符,这些占位符在实际使用时会被具体的值替换。template_format参数可以指定这些占位符的格式,以确保模板能够正确地生成提示。例如,如果模板中需要一个日期,template_format可以确保日期的格式是正确的。

  • validate_template:此参数用于验证模板是否符合特定的标准或规则。在生成提示之前,使用validate_template可以检查模板是否包含必要的元素,或者是否符合特定的语法规则。这有助于避免生成无效或错误的提示,从而提高模型交互的质量和效率。

要使用这些参数,你需要查看LangChain的文档,了解具体的使用方法和示例。然后,你可以尝试编写自己的模板,并使用这些参数来格式化和验证模板。

2. 使用PipelinePromptTemplate和自定义Template

PipelinePromptTemplate是LangChain中的一个高级模板,它允许你将多个提示模板组合成一个管道(pipeline),这样可以按顺序执行多个步骤。以下是如何使用PipelinePromptTemplate和自定义模板的步骤:

  • 定义自定义模板:首先,你需要定义自己的模板,这些模板可以是简单的字符串模板,也可以是更复杂的模板,包含多个步骤和逻辑。

  • 创建PipelinePromptTemplate:然后,你可以创建一个PipelinePromptTemplate实例,并将你的自定义模板作为步骤添加到管道中。

  • 构建应用:最后,你可以使用这个管道模板来构建你的应用。例如,如果你正在构建一个问答系统,你可能需要一个模板来提取问题,一个模板来生成查询,以及一个模板来格式化答案。

这里是一个简单的例子:

from langchain.PromptTemplate import PromptTemplate
from langchain.PipelinePromptTemplate import PipelinePromptTemplate# 定义自定义模板
template1 = PromptTemplate(input_variables=["question"], template="你的问题是什么?")
template2 = PromptTemplate(input_variables=["query"], template="生成查询:{query}")# 创建PipelinePromptTemplate
pipeline_template = PipelinePromptTemplate(steps=[template1, template2])# 使用模板
# 假设你有一个"question"变量,包含用户的问题
question = "天空为什么是蓝色的?"
# 通过模板生成查询
query = pipeline_template({"question": question})
3. 构想鲜花店运营场景中的客户服务对话任务

在鲜花店的客户服务场景中,你可以设计一个少样本学习任务,让模型学习如何解答客户的问题。以下是设计这个任务的步骤:

  • 收集数据:首先,你需要收集一些客户服务对话的样本。这些样本可以是真实的对话记录,也可以是模拟的对话。

  • 标注数据:然后,你需要对这些样本进行标注,指出每个问题的正确答案或响应。

  • 设计模板:接下来,你可以设计一些模板,这些模板可以帮助模型理解和生成客户服务对话。

  • 训练模型:使用这些标注好的数据和模板,你可以训练一个模型,让它学习如何回答客户的问题。

  • 评估和迭代:最后,你需要评估模型的性能,并根据需要进行迭代和优化。

这里是一个简单的示例模板:

# 客户问:我想要一束玫瑰花,有什么推荐的吗?
template = PromptTemplate(input_variables=["question"], template="客户想要{question},推荐{answer}。")# 假设模型已经训练好,并且知道如何回答这个问题
answer = "我们有一款名为'浪漫满屋'的玫瑰花束,非常受欢迎。"
response = template({"question": "一束玫瑰花", "answer": answer})
print(response)  # 输出:客户想要一束玫瑰花,推荐我们有一款名为'浪漫满屋'的玫瑰花束,非常受欢迎。

通过这种方式,你可以构建一个能够自动回答客户问题的智能客户服务系统。

相关文章:

05LangChain实战课 - 提示工程与FewShotPromptTemplate的应用

LangChain实战课 - 提示工程与FewShotPromptTemplate的应用 提示工程的重要性 在LangChain框架中,提示工程是构建有效大模型应用的关键。通过精心设计的提示,我们可以引导大语言模型(LLM)生成预期的输出。本节课深入探讨了如何利…...

【数据处理】数据预处理·数据变换(熵与决策树)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必备知识_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

UE5 随机生成地牢关卡

参考视频:【UE5 | 教程 | 地编】虚幻引擎5 中创建史诗级 程序化 地下城_哔哩哔哩_bilibili 首先创建一个父项Actor 这个BOX碰撞提是和地板重叠的 这三个是场景组件,这个ExitsFolder下面的箭头等会会在子蓝图中添加 接下来创建BP_MasterRoom的子蓝图&…...

【Cpp】命名空间

前言 在C语言中,命名冲突通常发生在不同的作用域中使用了相同的标识符: 全局变量和局部变量同名: 如果在全局作用域和局部作用域中都定义了同名的变量,那么在局部作用域中,全局变量会被局部变量遮蔽。 int globalVar; // 全局变量…...

ESP32学习笔记——LOG日志库的使用

注:本文由CHATGPT辅助创作,未经验证,实际工程使用请仔细甄别。 对于设置日志级别的几种方式(esp_log_level_set、CONFIG_LOG_DEFAULT_LEVEL、CONFIG_LOG_MAXIMUM_LEVEL、LOG_LOCAL_LEVEL )容易混淆,特此学习…...

51c~C语言~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12428240 一、C语言和C的区别 ​ C语言虽说经常和C在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C是C99标准的。C89就是在1989年制定的标准,如今最新…...

$nextTick 实现原理

Vue 使用 nextTick 来确保数据更新后的 DOM 操作在更新完成后执行。其核心逻辑是将回调放到微任务或宏任务队列中,确保回调在 DOM 更新完成后执行。 Vue.js 会利用不同的浏览器 API 来模拟 nextTick 的延迟执行,通常是通过: Promise&#x…...

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…...

Golang--面向对象

Golang语言面向对象编程说明: Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。Golang没有类(class),Go语言的结构体(struct)和其…...

深度学习经典模型之LeNet-5

1 LeNet-5 1.1 模型介绍 ​ LeNet-5是由 L e C u n LeCun LeCun 提出的一种用于识别手写数字和机器印刷字符的卷积神经网络(Convolutional Neural Network,CNN) [ 1 ] ^{[1]} [1],其命名来源于作者 L e C u n LeCun LeCun的名字…...

Abaqus随机骨料过渡区孔隙三维网格插件:Random Agg ITZ Pore 3D (Mesh)

插件介绍 Random Agg ITZ Pore 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus内参数化建立包含水泥浆基体、粗细骨料、界面过渡区(ITZ)、孔隙在内的多相材料混凝土细观背景网格模型。 模型说明 插件采用材料映射单元的方式,将不同相材料赋值…...

PG数据库 jsonb字段 模糊查询

背景: 项目由于多语言的设计,将字段设置成json字段类型,同时存储中文和英文 页面上通过输入框实现模糊的查询 一、表结构:name字段设置jsonb类型 二、表数据 3、Mybatis编写sql select pp.name ->>zh-CN as pmsProductNam…...

javascript-Web APLs (四)

日期对象 用来表示时间的对象 作用:可以得到当前系统时间 在代码中发现了 new 关键字时,一般将这个操作称为 实例化 //创建一个时间对象并获取时间 //获得当前时间 const date new Date() //获得指定时间 const date new Date(2006-6-6) console.log(…...

Keras 3 示例:开启深度学习之旅

Keras 3 示例:开启深度学习之旅 一、Keras 3 简介 Keras 3是一个强大的深度学习框架,它为开发者提供了简洁、高效的方式来构建和训练神经网络。它在之前版本的基础上进行了改进和优化,具有更好的性能、兼容性和功能扩展性。无论是初学者还是…...

鸿蒙Next如何接入微信支付

大家好,这是我工作中接触到的鸿蒙Next接入微信支付,有使用到,分享给大家,轻松便捷 前提:你已有鸿蒙版本的微信,并且微信余额或绑定银行卡有钱,因为内测的微信暂不支持收红包和转账,2.你的应用已…...

nginx(五):关于location匹配规则那些事

关于location匹配规则那些事 1 概述2 语法3 匹配规则说明3.1 精确匹配3.2 前缀匹配(^~)3.3 正则表达式匹配(\~和\~*)3.4 普通前缀匹配 4 匹配优先级5 注意事项6 总结 大家好,我是欧阳方超,可以我的公众号“…...

【论文阅读】Associative Alignment for Few-shot Image Classification

用于小样本图像分类的关联对齐 引用:Afrasiyabi A, Lalonde J F, Gagn C. Associative alignment for few-shot image classification[C]//Computer Vision–ECCV 2020: 16th European Conference, Glasgow, UK, August 23–28, 2020, Proceedings, Part V 16. Spri…...

acmessl.cn提供接口API方式申请免费ssl证书

目录 一、前沿 二、API接口文档 1、证书可申请列表 简要描述 请求URL 请求方式 返回参数说明 备注 2、证书申请 简要描述 请求URL 请求方式 业务参数 返回示例 返回参数说明 备注 3、证书查询 简要描述 请求URL 请求方式 业务参数 返回参数说明 备注 4、证…...

DBeaver如何快速格式化sql语句,真简单!

前言 我之前在使用DBeaver的时候,一直不知道其可以格式化sql语句,导致sql语句看起来比较杂乱,今天就来介绍下DBeaver如何格式化sql语句。 如何格式化sql语句 首先,我们打开一个sql窗口,在里面输入我们要查询的sql语…...

OpenCV C++ 计算两幅图像之间的多尺度结构相似性(MSSIM)

目录 一、定义与背景 二、计算流程 三、性质与特点 四、应用场景 五、代码实现 多尺度结构相似性(MSSIM)是一种用于衡量两幅图像之间相似度的指标,它基于结构相似性(SSIM)指数进行扩展,通过在不同尺度上计算SSIM来评估图像的整体质量。以下是对MSSIM的详细介…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...