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,一经查实,立即删除!

相关文章

Oracle ASM (Automatic Storage Management)

[TOC](Oracle ASM (Automatic Storage Management)) Oracle ASM (Automatic Storage Management) 是 Oracle 的一个磁盘管理和文件系统服务,用于简化数据库文件的分布。 在使用 ASM 管理磁盘时,如果想要增加存储空间,您可以向现有的磁盘组添加…

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

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

block层:7. 请求下发

blk_dispatch 源码基于5.10 1. blk_mq_sched_dispatch_requests void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx) {// 队列struct request_queue *q hctx->queue;// 队列已停止或者被暂停if (unlikely(blk_mq_hctx_stopped(hctx) || blk_queue_quiesc…

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

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

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

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

BPM在企业扮演什么角色?一文秒懂!

如果将企业各职能部门比作各司其职的器官组织,那工作流程就是将其串联为整体,指挥其发挥作用的中枢神经网络,流程作为企业管理意志的延伸,对企业运营管理的影响至关重要。 但随着企业IT建设的多元化,系统能力边界扩展&…

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…

AUTOSAR汽车电子系统架构标准

AUTOSAR 目录 AUTOSAR RTE SWC和BSW SWC访问代码实现 ARXML(AUTOSAR XML) Interface Client-Server接口代码实现 AutoSAR OS Application AUTOSAR(Automotive Open System Architecture)正式发布日期是2003年,…

Linux系统编程:基础知识入门学习笔记汇总

Linux基础shell编程——>Linux 系统编程——>(计算机网络)——>Linux 网络编程 来源:黑马程序员-Linux系统编程 45小时 评价 这个老师好像讲了很多课程,都还不错我由于赶时间之前学过Linux的Shell编程和Linux的网络编程&…

swagger 2.10.5 整合 spring boot

参考: http://springfox.github.io/springfox/ https://github.com/springfox/springfox http://springfox.github.io/springfox/docs/current/ https://github.com/springfox/springfox-demos https://github.com/springfox/springfox-demos/tree/2.9.2 https://gi…

pandas读取excel,再写入excel

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

设计模式-职责链模式

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

【电路设计】220V AC转低压DC电路概述

前言 最近因项目需要,电路板上要加上一个交流220V转低压直流,比如12V或者5V这种。一般来说,比较常见也比较简单的做法是使用一个变压器将220V AC进行降压,比如降到22V AC,但是很遗憾的是,支持220V的变压器一般体积很大,而板子留给电源部分的面积又非常有限,所以不得不研…

OpenHarmony组件复用示例

本文转载自《#2023盲盒码# OpenHarmony组件复用示例》,作者zhushangyuan_ 摘要:在开发应用时,有些场景下的自定义组件具有相同的组件布局结构,仅有状态变量等承载数据的差异。这样的组件缓存起来,需要使用到该组件时直…

C++中的运算符总结(7):复合赋值运算符

C中的运算符总结(7):复合赋值运算符 复合赋值运算符将运算结果赋给左边的操作数。 请看下面的代码: int num1 22; int num2 5; num1 num2; // num1 contains 27 after the operation其中最后一行代码与下面的代码等效&#…

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

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