【Java-LangChain:面向开发者的提示工程-3】迭代优化

第三章 迭代优化

当使用 LLM 构建应用程序时,实践层面上很难第一次尝试就成功获得适合最终应用的 Prompt。但这并不重要,只要您有一个好的迭代过程来不断改进您的 Prompt,那么您就能够得到一个适合任务的 Prompt。虽然相比训练机器学习模型,在 Prompt 方面一次成功的几率可能会高一些,但正如上所说, Prompt 是否一次完善并不重要。最重要的是层层迭代为您的应用程序找到有效 Prompt 的过程。

因此在本章中,我们将以产品说明书中生成营销文案为例,来展示一些流程框架,并提示您思考如何层层迭代地分析和完善您的 Prompt。

在吴恩达(Andrew Ng,原教程作者)的机器学习课程中展示过一张图表,说明了机器学习开发的流程。通常是先有一个想法,然后再用以下流程实现:编写代码,获取数据,训练模型,获得实验结果。然后您可以查看结果,分析误差与错误,找出适用领域,甚至可以更改您对具体问题的具体思路或解决方法。此后再次更改实现,并运行另一个实验等,反复迭代,最终获得有效的机器学习模型。在编写基于 LLM 的应用程序的 Prompt 时,流程可能非常相似。您产生了关于要完成的任务的想法后,可以尝试编写第一个 Prompt ,注意要满足上一章说过的两个原则:清晰明确,并且给系统足够的时间思考。然后您可以运行并查看结果。如果第一次效果不好,那么迭代的过程就是找出为什么指令不够清晰或为什么没有给算法足够的时间思考,以便改进想法、改进 Prompt 等等,循环多次,直到找到适合您的应用程序的 Prompt。

很难有适用于世间万物的所谓“最佳 Prompt ”,更好的方法是找到有效的迭代过程,以便您可以快速地找到一个适合您的应用程序的 Prompt

环境配置

参考第二章的 环境配置小节内容即可。

任务–从产品说明书生成一份营销产品描述

给定一份椅子的资料页。描述说它属于中世纪灵感系列,产自意大利,并介绍了材料、构造、尺寸、可选配件等参数。假设您想要使用这份说明书帮助营销团队为电商平台撰写营销描述稿:

        String sheet = "概述\n" +"\n" +"    美丽的中世纪风格办公家具系列的一部分,包括文件柜、办公桌、书柜、会议桌等。\n" +"    多种外壳颜色和底座涂层可选。\n" +"    可选塑料前后靠背装饰(SWC-100)或10种面料和6种皮革的全面装饰(SWC-110)。\n" +"    底座涂层选项为:不锈钢、哑光黑色、光泽白色或铬。\n" +"    椅子可带或不带扶手。\n" +"    适用于家庭或商业场所。\n" +"    符合合同使用资格。\n" +"\n" +"结构\n" +"\n" +"    五个轮子的塑料涂层铝底座。\n" +"    气动椅子调节,方便升降。\n" +"\n" +"尺寸\n" +"\n" +"    宽度53厘米|20.87英寸\n" +"    深度51厘米|20.08英寸\n" +"    高度80厘米|31.50英寸\n" +"    座椅高度44厘米|17.32英寸\n" +"    座椅深度41厘米|16.14英寸\n" +"\n" +"选项\n" +"\n" +"    软地板或硬地板滚轮选项。\n" +"    两种座椅泡沫密度可选:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。\n" +"    无扶手或8个位置PU扶手。\n" +"\n" +"材料\n" +"外壳底座滑动件\n" +"\n" +"    改性尼龙PA6/PA66涂层的铸铝。\n" +"    外壳厚度:10毫米。\n" +"    座椅\n" +"    HD36泡沫\n" +"\n" +"原产国\n" +"\n" +"    意大利";
        String prompt = "您的任务是帮助营销团队基于技术说明书创建一个产品的营销描述。\n" +"\n" +"根据```标记的技术说明书中提供的信息,编写一个产品描述。\n" +"\n" +"技术说明: ```" + this.sheet + "```";String message = this.getCompletion(prompt);log.info("iterative1:{}", message);
产品描述:我们自豪地推出美丽的中世纪风格办公家具系列,其中包括文件柜、办公桌、书柜和会议桌等多种产品。这个系列提供了多种外壳颜色和底座涂层选择,以满足不同客户的需求和喜好。我们的产品有两种装饰风格可供选择。一种是塑料前后靠背装饰(SWC-100),另一种是全面装饰,提供10种面料和6种皮革选项(SWC-110)。您可以根据个人喜好和场所需求来选择适合您的装饰风格。底座涂层也有多种选择,包括不锈钢、哑光黑色、光泽白色或铬。您可以根据您的整体办公室风格和个人喜好来选择最适合的底座涂层。我们的椅子设计考虑到了不同用户的需求。您可以选择带扶手或不带扶手的椅子,以满足您的个人偏好和使用习惯。这款产品不仅适用于家庭使用,也非常适合商业场所。无论您是在家办公还是在办公室工作,我们的产品都能为您提供舒适和时尚的办公环境。我们的产品符合合同使用资格,确保了产品的质量和可靠性。您可以放心购买和使用我们的产品。产品的结构非常坚固和稳定。底座采用了五个轮子的塑料涂层铝底座,方便您在办公室中移动和调整位置。椅子还配备了气动调节功能,可以轻松调整椅子的高度,以适应不同的工作需求。产品的尺寸为宽度53厘米,深度51厘米,高度80厘米,座椅高度44厘米,座椅深度41厘米。这个尺寸设计既符合人体工程学,又能提供舒适的使用体验。我们还提供了一些选项供您选择。您可以根据地板类型选择软地板或硬地板滚轮。座椅泡沫密度也有两种选择:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。此外,您还可以选择无扶手或8个位置PU扶手。我们的产品采用高质量的材料制造而成。外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,确保了产品的耐用性和稳定性。座椅采用HD36泡沫,提供舒适的坐感和支撑。我们的产品是意大利制造,以其精湛的工艺和高品质而闻名。我们致力于为客户提供优质的产品和满意的购物体验。无论您是在家办公还是在商业场所工作,我们的产品都能为您提供舒适、时尚和高品质的办公家具解决方案。选择我们的产品,让您的办公环境更加美丽和舒适!

问题一:生成文本太长

它似乎很好地完成了要求,即从技术说明书开始编写产品描述,介绍了一个精致的中世纪风格办公椅。但是当我看到这个时,我会觉得这个太长了。

所以在上述过程中,我产生想法后写了一个 Prompt ,并得到了结果,但是我对它不是很满意,因为它太长了。所以我澄清我的 Prompt ,要求它限制生成文本长度,要求最多使用50个字。

        String prompt = "您的任务是帮助营销团队基于技术说明书创建一个产品的营销描述。\n" +"\n" +"根据```标记的技术说明书中提供的信息,编写一个产品描述。\n" +"使用最多50个词。\n" +"技术说明: ```" + this.sheet + "```";String message = this.getCompletion(prompt);log.info("iterative2:\n{}", message);
我们的中世纪风格办公家具系列包括文件柜、办公桌、书柜和会议桌。多种颜色和涂层可选。可选择塑料或面料/皮革装饰。底座涂层选项有不锈钢、黑色、白色或铬。椅子可带或不带扶手。适用于家庭或商业场所。尺寸为53x51x80厘米,座椅高度44厘米,座椅深度41厘米。可选择软地板或硬地板滚轮,两种座椅泡沫密度可选,可选择无扶手或8个位置PU扶手。材料为改性尼龙PA6/PA66涂层的铸铝和HD36泡沫。原产国为意大利。

问题二:抓错文本细节

我们继续完善这段推广词,会发现的第二个问题是,这个网站并不是直接向消费者销售,它实际上面向的是家具零售商,他们会更关心椅子的技术细节和材料。在这种情况下,您可以继续修改这个 Prompt ,让它更精确地描述椅子的技术细节。

解决方法:要求它专注于与目标受众相关的方面。

        String prompt = "您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。\n" +"根据```标记的技术说明书中提供的信息,编写一个产品描述。\n" +"该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。\n" +"使用最多50个单词。\n" +"技术说明: ```" + this.sheet + "```";String message = this.getCompletion(prompt);log.info("iterative3:\n{}", message);
我们的中世纪风格办公家具系列是您家具零售店的理想选择。这个系列包括文件柜、办公桌、书柜和会议桌等多种产品。您可以选择多种外壳颜色和底座涂层。座椅有两种装饰选项:塑料前后靠背装饰或面料和皮革的全面装饰。底座涂层可选不锈钢、哑光黑色、光泽白色或铬。椅子可以选择带或不带扶手。这些产品适用于家庭或商业场所,并符合合同使用资格。结构稳固,底座采用五个轮子的塑料涂层铝底座,方便升降。尺寸为宽度53厘米、深度51厘米、高度80厘米、座椅高度44厘米和座椅深度41厘米。您可以选择软地板或硬地板滚轮,以及两种座椅泡沫密度:中等或高。此外,您还可以选择无扶手或8个位置PU扶手。产品的外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米。座椅采用HD36泡沫。这些产品是意大利制造。

可见,通过修改 Prompt ,模型的关注点倾向了具体特征与技术细节。

我可能进一步想要在描述的结尾展示出产品ID。因此,我可以进一步改进这个 Prompt ,要求在描述的结尾,展示出说明书中的7位产品ID。

        String prompt = "您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。\n" +"根据```标记的技术说明书中提供的信息,编写一个产品描述。\n" +"该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。\n" +"在描述末尾,包括技术规格中每个7个字符的产品ID。\n" +"使用最多50个单词。\n" +"技术说明: ```" + this.sheet + "```";String message = this.getCompletion(prompt);log.info("iterative4:\n{}", message);
我们很高兴向您介绍我们的美丽中世纪风格办公家具系列。该系列包括文件柜、办公桌、书柜和会议桌等多种产品。我们提供多种外壳颜色和底座涂层供您选择。您可以选择塑料前后靠背装饰(SWC-100)或全面装饰(SWC-110),后者提供10种面料和6种皮革可供选择。底座涂层选项包括不锈钢、哑光黑色、光泽白色或铬。椅子可选择带或不带扶手。这些产品适用于家庭或商业场所,并符合合同使用资格。产品的结构非常坚固,底座采用五个轮子的塑料涂层铝底座。椅子采用气动调节,方便升降。产品的尺寸为宽度53厘米(20.87英寸)、深度51厘米(20.08英寸)、高度80厘米(31.50英寸)、座椅高度44厘米(17.32英寸)和座椅深度41厘米(16.14英寸)。我们还提供一些选项供您选择,包括软地板或硬地板滚轮选项。座椅泡沫密度可选择中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)。您还可以选择无扶手或8个位置PU扶手。产品的材料非常优质。外壳底座滑动件采用改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米。座椅采用HD36泡沫制成。这些产品是意大利制造,以确保高品质和精细工艺。产品ID:SWC-100

以上是许多开发人员通常会经历的 Prompt 开发的迭代过程简短示例。我的建议是,像上一章中所演示的那样,Prompt 应该保持清晰和明确,并在必要时给模型一些思考时间。
在这些要求的基础上,常见流程是首先尝试编写一版 Prompt ,看看会发生什么,然后继续迭代完善 Prompt,以逐渐接近所需的结果。许多成功的 Prompt 都是通过这种迭代过程得出的。我将向您展示一个更复杂的 Prompt 示例,可能会让您对 ChatGPT 的能力有更深入的了解。

问题三:添加表格描述

继续添加指引,要求提取产品尺寸信息并组织成表格,并指定表格的列、表名和格式;再将所有内容格式化为可以在网页使用的 HTML。

        String prompt = "您的任务是帮助营销团队基于技术说明书创建一个产品的零售网站描述。\n" +"根据```标记的技术说明书中提供的信息,编写一个产品描述。\n" +"该描述面向家具零售商,因此应具有技术性质,并侧重于产品的材料构造。\n" +"在描述末尾,包括技术规格中每个7个字符的产品ID。\n" +"在描述之后,包括一个表格,提供产品的尺寸。表格应该有两列。第一列包括尺寸的名称。第二列只包括英寸的测量值。\n" +"给表格命名为“产品尺寸”。\n" +"将所有内容格式化为可用于网站的HTML格式。将描述放在<div>元素中。\n" +"技术说明: ```" + this.sheet + "```";String message = this.getCompletion(prompt);log.info("iterative5:\n{}", message);

html的输出:

<div><h2>产品描述</h2><p>这款美丽的中世纪风格办公家具系列是家具零售商的理想选择。该系列包括文件柜、办公桌、书柜和会议桌等多种产品。您可以根据需求选择不同的外壳颜色和底座涂层。外观装饰方面,您可以选择塑料前后靠背装饰(SWC-100)或10种面料和6种皮革的全面装饰(SWC-110)。底座涂层选项包括不锈钢、哑光黑色、光泽白色或铬。椅子可以选择带或不带扶手。无论是家庭还是商业场所,这款产品都非常适用。此外,它还符合合同使用资格。</p><h3>产品尺寸</h3><table><tr><th>尺寸名称</th><th>测量值(英寸)</th></tr><tr><td>宽度</td><td>20.87</td></tr><tr><td>深度</td><td>20.08</td></tr><tr><td>高度</td><td>31.50</td></tr><tr><td>座椅高度</td><td>17.32</td></tr><tr><td>座椅深度</td><td>16.14</td></tr></table><h3>选项</h3><ul><li>软地板或硬地板滚轮选项</li><li>两种座椅泡沫密度可选:中等(1.8磅/立方英尺)或高(2.8磅/立方英尺)</li><li>无扶手或8个位置PU扶手</li></ul><h3>材料</h3><ul><li>外壳底座滑动件:改性尼龙PA6/PA66涂层的铸铝,外壳厚度为10毫米</li><li>座椅:HD36泡沫</li></ul><p>产品ID:SWC-100</p>
</div>

本章的主要内容是 LLM 在开发应用程序中的迭代式 Prompt 开发过程。开发者需要先尝试编写 Prompt ,然后通过迭代逐步完善它,直至得到需要的结果。
作为一名高效的提示词工程师(Prompt Engineer),关键在于掌握有效的开发Prompt的过程,而不是去寻求得到“完美的”Prompt。对于一些更复杂的应用程序,可以对多个样本(如数百张说明书)进行 Prompt 的迭代开发,并在样本集上进行评估。
最后,在更成熟的应用程序中,可以观察多个Prompt在多个样本集上的表现,测试平均或最差性能。但通常,仅当应用较成型之后,才推荐您通过这种评估方式,来精益求精。

Java快速转换到大模型开发:
配套课程的所有代码已经发布在:https://github.com/Starcloud-Cloud/java-langchain
课程合作请留言

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

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

相关文章

辅助驾驶功能开发-测试篇(2)-真值系统介绍

1 真值系统概述 1.1 真值评测系统核心应用 快速构建有效感知真值,快速完成感知性能评估,快速分析感知性能缺陷。 主要应用场景包括: 1. 感知算法开发验证: 在算法开发周期中,评测结果可以作为测试报告的一部分,体现算法性能的提升。 2. 遴选供应…

九、2023.10.3.Linux(end).9

文章目录 33、简述mmap的原理和使用场景&#xff1f;34、互斥量能不能在进程中使用&#xff1f;35、协程是轻量级线程&#xff0c;轻量级表现在哪里&#xff1f;36、说说常见信号有哪些&#xff0c;表示什么含义&#xff1f;37、说说线程间通信的方式有哪些&#xff1f;38、说说…

关于使用 uniapp Vue3 开发分享页面 语法糖 setup 开发获取ref踩坑

上代码 前端代码 <!-- 分享弹出 --> <uni-popup ref"share" type"share" safeArea backgroundColor"#fff"><uni-popup-share></uni-popup-share> </uni-popup>处理函数 import {onNavigationBarButtonTap} from…

点击router-link时候会发生什么?

当你点击链接或按钮时&#xff0c;将会导航到 User 组件&#xff0c;就会显示相应的用户 ID。 这里说一下执行流程&#xff0c;当点击一个 router-link 时&#xff0c;Vue Router会执行以下流程&#xff1a; 1&#xff09;点击事件触发: 当你点击 router-link 组件时&#xf…

【Java 进阶篇】JDBC查询操作详解

在数据库编程中&#xff0c;查询是一项非常常见且重要的操作。JDBC&#xff08;Java Database Connectivity&#xff09;提供了丰富的API来执行各种类型的查询操作。本篇博客将详细介绍如何使用JDBC进行查询操作&#xff0c;包括连接数据库、创建查询语句、执行查询、处理结果集…

python——Django框架

一、基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能的 Web 服务 Django 本身基于 MVC …

AttributeError: module ‘dgl‘ has no attribute ‘batch_hetero‘

DGLWarning: From v0.5, DGLHeteroGraph is merged into DGLGraph. You can safely replace dgl.batch_hetero with dgl.batch

MySQL索引:结构、语法、分类和优化

MySQL索引是数据库中非常关键的性能优化手段。它们提供了快速访问数据的方法&#xff0c;同时也可以极大地提高查询效率。本文将深入介绍MySQL索引的结构、语法、分类&#xff0c;以及如何使用Profile和EXPLAIN来优化查询性能&#xff0c;带有详细的实例演示。 索引结构 MySQ…

【Pytorch笔记】4.梯度计算

深度之眼官方账号 - 01-04-mp4-计算图与动态图机制 前置知识&#xff1a;计算图 可以参考我的笔记&#xff1a; 【学习笔记】计算机视觉与深度学习(2.全连接神经网络) 计算图 以这棵计算图为例。这个计算图中&#xff0c;叶子节点为x和w。 import torchw torch.tensor([1.]…

SpringMVC的@InitBinder的作用

一、前言 在SpringMVC中&#xff0c;InitBinder注解用于自定义数据绑定的方法。在使用表单提交数据时&#xff0c;SpringMVC会将请求参数绑定到Java对象中。但是&#xff0c;有些时候请求参数的数据格式可能与Java对象的属性格式不一致&#xff0c;这时就需要使用InitBinder注…

JavaScript内置对象 - Array数组(四)- 序列生成器

序列生成器是生成一个指定起始值和结束值的序列&#xff0c;并且根据指定间隔长度&#xff0c;生成序列数组。 完成此功能需要使用到Array内置对象的from()对象&#xff0c;以及类数组相关知识&#xff0c;前面几篇有相关案例进行演示。 地址一&#xff1a;JavaScript内置对象…

基于.Net Core实现自定义皮肤WidForm窗口

前言 今天一起来实现基于.Net Core、Windows Form实现自定义窗口皮肤&#xff0c;并实现窗口移动功能。 素材 准备素材&#xff1a;边框、标题栏、关闭按钮图标。 窗体设计 1、创建Window窗体项目 2、窗体设计 拖拉4个Panel控件&#xff0c;分别用于&#xff1a;标题栏、关…

【Redis】基础数据结构-字典

Redis 字典 基本语法 字典是Redis中的一种数据结构&#xff0c;底层使用哈希表实现&#xff0c;一个哈希表中可以存储多个键值对&#xff0c;它的语法如下&#xff0c;其中KEY为键&#xff0c;field和value为值&#xff08;也是一个键值对&#xff09;&#xff1a; HSET key…

基于SSM农产品商城系统

基于SSM农产品商城系统的设计与实现&#xff0c;前后端分离&#xff0c;文档 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 农产品列表 产品详情 个人中心 登陆界面 管…

以太网基础学习(二)——ARP协议

一、什么是MAC地址 MAC地址&#xff08;英语&#xff1a;Media Access Control Address&#xff09;&#xff0c;直译为媒体访问控制位址&#xff0c;也称为局域网地址&#xff08;LAN Address&#xff09;&#xff0c;MAC位址&#xff0c;以太网地址&#xff08;Ethernet Addr…

【算法训练-字符串 三】字符串相加

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【字符串相加】&#xff0c;使用【字符串】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

电脑突然提示mfc140u.dll丢失,缺失mfc140u.dll无法运行程序的解决方法

在当今信息化社会&#xff0c;电脑已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着技术的不断发展&#xff0c;电脑也会出现各种问题。其中&#xff0c;最常见的问题之一就是“mfc140u.dll丢失”。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何解…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程&#xff0c;称作ISP&#xff08;Image Signal Processing&#xff09;。这个过程会经过图像处理和压缩。 参考文章1&#xff1a;http://t.csdn.cn/LvHH5 参考文章2&#xff1a;htt…

WebSocket实战之四WSS配置

一、前言 上一篇文章WebSocket实战之三遇上PAC &#xff0c;碰到的问题只能上安全的WebSocket&#xff08;WSS&#xff09;才能解决&#xff0c;配置证书还是挺麻烦的&#xff0c;主要是每年都需要重新更新证书&#xff0c;我配置过的证书最长有效期也只有两年&#xff0c;搞不…

【数据结构】排序(2)—冒泡排序 快速排序

目录 一. 冒泡排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 快速排序 基本思想 代码实现 hoare法 挖坑法 前后指针法 时间和空间复杂度 稳定性 一. 冒泡排序 基本思想 冒泡排序是一种交换排序。两两比较数组元素&#xff0c;如果是逆序(即排列顺序与排序后…