ChatGPT Prompting开发实战(二)

一、基于LangChain源码react来解析prompt engineering

在LangChain源码中一个特别重要的部分就是react,它的基本概念是,LLM在推理时会产生很多中间步骤而不是直接产生结果,这些中间步骤可以被用来与外界进行交互,然后产生new context:

我们先看下textworld_prompt这个文件,按照前面提到的“thought”,“action”,“observation”的结构给出了如下样例,其中observation部分以文字的形式提供了一种类似于解题的思路来说明如何完成具体的action:

另外看一下wiki_prompt这个文件,在所给的例子中,首先也是给出一个question,然后针对问题给出thought,也就是如何进行推理:

Question: What is the elevation range for the area that the eastern sector of the Colorado orogeny extends into?

Thought: I need to search Colorado orogeny, find the area that the eastern sector of the Colorado orogeny extends into, then find the elevation range of the area.

Action: Search[Colorado orogeny]

在这里,执行action的不是LLM,而是agent,执行wiki搜索之后返回结果:

Observation: The Colorado orogeny was an episode of mountain building (an orogeny) in Colorado and surrounding areas.

Thought: It does not mention the eastern sector. So I need to look up eastern sector.

Action: Lookup[eastern sector]

从上面的返回结果看,并没有提到关键信息“eastern sector”,因此上面的thought提示需要查找这部分信息:

Observation: (Result 1 / 1) The eastern sector extends into the High Plains and is called the Central Plains orogeny.

Thought: The eastern sector of Colorado orogeny extends into the High Plains. So I need to search High Plains and find its elevation range.

Action: Search[High Plains]

根据上面查询“eastern sector”的结果,接下来需要搜索关于“High Plains”的信息:

Observation: High Plains refers to one of two distinct land regions

Thought: I need to instead search High Plains (United States).

Action: Search[High Plains (United States)]

由于上面的搜索结果提到了“two distinct land regions”,所以接下来的步骤就是搜索关于“High Plains (United States)”的信息:

Observation: The High Plains are a subregion of the Great Plains. From east to west, the High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130 m).[3]

Thought: High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer is 1,800 to 7,000 ft.

Action: Finish[1,800 to 7,000 ft]

基于上面的搜索结果进行推理,最后获得了我们想要的数据:1,800 to 7,000 ft。

上面重复迭代多次的observation+thought+action就构成了一个链式的过程。

二、结合Chain of Thought(COT)经典案例剖析prompt

接下来我们针对这样一个链式的过程,来看一个应用案例。在这个例子中,我们使用了OpenAI的API来调用GPT-3.5模型,并没有使用LangChain的方式:

我们来看下关于“Chain-of-Thought Prompting”是如何进行构造的,这个prompt是跟客户查询有关的,定义了多个步骤来回答客户的问题:

Step 1是检查用户的问题是否针对一个具体的产品或者一组产品来说的

Step 2是检查用户问题涉及到的产品是否是以下列出的这些产品,这里可能是为了演示的方便,所以直接以文本的形式呈现出来,当然这些产品信息可以存储在数据库里

Step 3判断如果用户问题涉及以上产品,那么列出用户针对产品会提什么问题的任意假设:

Step 4基于现有的产品信息来判断用户提出的问题是否有匹配的答案:

       Step 5提示应该以对用户友好的方式来修正用户提到的不正确的问题假设,也就是说用户只能针对5个可用的产品来提相关问题:

以上部分都可以看做是基本的上下文信息(system message),接下来设定user_message的内容,调用方法get_completion_from_messages获得结果:

打印的结果如下,由于用户问题提到了具体产品和价格,所以step 2给出了每一种产品的价格,并对用户的假设进行了判断:

设定用户的问题如下:

do you sell tvs

这次给出的结果如下,推理步骤1和2共同判断了用户提到的TVs不在当前可用产品列表中,所以模型在运行时会按照之前的系统设定来给出恰当的回复给用户:

Step 1:#### The user is asking about a specific product category, TVs.

Step 2:#### The list of available products does not include any TVs.

Response to user:#### I'm sorry, but we do not sell TVs at this time. Our store specializes in computers and laptops. However, if you are interested in purchasing a computer or laptop, please let me know and I would be happy to assist you.

这个例子看上去不复杂,但是它的意义重大,因为上面所列的系统信息都是私有数据,如果已经告诉模型只能从私有数据中去查询,那么模型就不会从其它地方去获取数据,譬如针对上面step 2所列的信息,可以修改为从数据库或者vector store中进行查询(也就是使用具体的工具),如果使用LangChain,那么它可以帮我们封装这个过程,如果不使用LangChain,那么可以自己来封装。

If the user is asking about \

specific products, identify whether \

the products are in the following list.

接下来设定用户信息如下:

推理过程如下,step1 是针对用户问题的理解,因此step 2列出了当前可用的产品信息,由于用户问题中并没有给出明确的假设,所以step 4的内容是基于LLM的理解给出的,然后与本地的私有数据进行匹配,之后基于这些信息来回复给用户,所以整个过程都是LLM来驱动的:

Step 1:#### The user is asking for a recommendation for a laptop based on their profession.

Step 2:#### The available laptops are:

1. TechPro Ultrabook

2. BlueWave Gaming Laptop

3. PowerLite Convertible

4. TechPro Desktop

5. BlueWave Chromebook

Step 3:#### There are no assumptions made by the user in this message.

Step 4:#### Based on the user's profession as an iOS developer, they would require a laptop with a powerful processor and sufficient RAM to handle development tasks. The TechPro Ultrabook and the BlueWave Gaming Laptop would be suitable options for an iOS developer due to their powerful processors and high RAM capacity.

Response to user:#### As an iOS developer, I would recommend either the TechPro Ultrabook or the BlueWave Gaming Laptop. Both laptops have powerful processors and high RAM capacity, which are essential for development tasks.

通过以上经典案例展示了用LLM来驱动一切,驱动的关键在于你自己的prompt要写得很清楚。

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

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

相关文章

IdentityServer密码长度超长会导致跳转到登录页

应用系统项目的安全要求越来越高,基本都是采取https等加密证书传输,无法使用https的,也是要求不能明文传输内容,因此做一些等保要求,密码需要加密后才能传输给服务端,所以前端会采取一些密码手段&#xff0…

【Android Framework系列】第12章 RecycleView相关原理及四级缓存策略分析

1 RecyclerView简介 RecyclerView是一款非常强大的widget,它可以帮助您灵活地显示列表数据。当我开始学习 RecyclerView的时候,我发现对于复杂的列表界面有很多资源可以参考,但是对于简单的列表展现就鲜有可参考的资源了。虽然RecyclerView的…

『赠书活动 | 第十八期』《深入浅出SSD:固态存储核心技术、原理与实战》

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 『赠书活动 | 第十八期』 本期书籍:《深入浅出SSD:固态存储核心技术、原理与实战》 赠书规则:评论区:点赞&…

Java 线程池

线程池 Java 线程池是一种多线程处理技术,它可以在程序中预先创建一定数量的线程,将任务提交到线程池中,线程池会自动调度线程执行任务。通过使用线程池,可以避免反复创建和销毁线程的开销,提高程序性能,同…

monorepo更新组件报错,提示“无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本”

解决方法: 第一步:管理员身份运行 window.powershell, win x打开powerShell命令框,进入到对应项目路径。 第二步:执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 第…

面试前的准备:程序员应该如何备战面试

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

盲盒电商小程序

一、准备阶段 在开始制作盲盒小程序前,你需要在乔拓云平台上创建一个账号,并登录到后台管理页面。在后台管理页面,你可以找到商城管理模块,点击进入商城编辑制作页面。 二、小程序商城模板选择与编辑 1.在商城编辑制作页面&#x…

2023.08.27 学习周报

文章目录 摘要文献阅读1.题目2.重点3.引言4.方法5.实验结果6.结论 深度学习Majorization-Minimization算法1.基本思想2.要求3.示意图 总结 摘要 This week, I read a computer science on the prediction of atmospheric pollutants in urban environments based on coupled d…

pandas读取excel,再写入excel

需求是这样的,从一个表读取数据,然后每次执行创建一个新表将值写入 读取这个表 写入到这个表 分别对应的是e、h列数据,代码如下: import pandas as pd import openpyxl import datetime dfpd.read_excel(rC:\Users\admin\Deskt…

设计模式-职责链模式

文章目录 职责链模式模式概述主要角色适用场景实现步骤优点注意事项 定义职责链结构示例总结 职责链模式 职责链模式是一种行为设计模式,它可以将请求的发送者和请求的处理者解耦,并按照预定义的顺序处理请求。职责链模式常用于需要逐级审批或转交处理的…

玩转软件|钉钉个人版内测启动:AI探索未来的工作方式

目录 前言 正文 AI为核心,个人效率为王! 指令中心,解锁AI技巧! 灵感Store,探索更多可能! 未来的AI,即将问世! 个人内测体验 前言 重磅消息:钉钉个人版在8月16日正…

c# modbus CRC计算器(查表法)

一、简介: 本案例为crc计算器,通过查表法计算出结果 1.窗体后台源代码 using Crc; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text…

Stm32的时钟系统以及使用SysTick滴答定时器实现延时

前言 STM32的时钟系统由多个时钟源和时钟树组成时钟源包括主时钟源(HSE)、内部高速时钟源(HSI)、内部低速时钟源(LSI)和外部低速时钟源(LSE)。时钟树由多个时钟分频器和时钟门控器组…

一道经典面试题:@Configuration 和 @Component 有何区别?

关于 Configuration 注解有一个特别经典的面试题: Configuration 和 Component 有什么区别? 无论小伙伴们之前是否背过相关的面试题,今天这篇文章学完之后相信大家对这个问题都会有更深一层的理解,废话不多少,咱们开…

容器和宿主机之间的存储问题

简介 作用:方便备份恢复数据,实现数据共享 一、单台机器中 用数据卷挂载 二、多台机器中 ssh 建立免密通道将数据scp过去,然后再用卷挂载到容器内 nfs 网络文件系统 搭建nfs服务器客户端挂载 过程如下 一.安装软件包yum install -…

新能源汽车技术的最新进展和未来趋势

文章目录 电池技术的进步智能驾驶与自动驾驶技术充电基础设施建设新能源汽车共享和智能交通未来趋势展望结论 🎉欢迎来到AIGC人工智能专栏~探索新能源汽车技术的最新进展和未来趋势 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客…

融媒行业落地客户旅程编排,详解数字化用户运营实战

移动互联网时代是流量红利的时代,企业常用低成本的方式进行获客,“增长黑客”的概念大范围传播。与此同时,机构媒体受到传播环境的影响,也开始启动全行业的媒体融合转型。在此背景下,2015 年神策数据成立,核…

港联证券:为什么好股票拿不住?股票怎么买更赚钱?

股票是一种高危险高收益的出资方式,要想挣钱仍是需求掌握一些技巧。那么为什么好股票拿不住?股票怎样买更挣钱?港联证券也为大家准备了相关内容,以供参考。 为什么好股票拿不住? 1、心态不稳。许多出资者缺少长时间的…

Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em

​ 鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工…

bootloader串口更新程序[瑕疵学习板]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、储备知识二、程序步骤2.程序展示1.bootloader2.然后是主运行函数总结前言 很久没有更新文章了。最近工作太忙,没有学习很多的知识,然后这两天不忙了,就学习了一下bootloader的程序升级…