使用大型语言模(LLM)构建系统(三):思维链推理

news2024/11/26 19:53:17

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程,我想和大家一起分享一下该门课程的一些主要内容。

下面是我们访问大型语言模(LLM)的主要代码:

import openai
 
#您的openai的api key
openai.api_key ='YOUR-OPENAI-API-KEY' 
 
def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, 
        max_tokens=max_tokens, 
    )
    return response.choices[0].message["content"]

连锁思维提示(Chain-of-Thought Prompting)

当人类遇到一些复杂的逻辑问题时,我们会有一套逻辑推理的思维逻辑,同样我们也希望ChatGPT也能像人类那样具备基本的逻辑推理能力,为了达到这个目的,我们有时候需要教导ChatGPT按照人类的思维方式来处理某些较为复杂的逻辑问题,我们来看下面一个例子,在这个例子中我们有5个产品,我们要让ChatGPT来充当客服来回答客户提出的各种关于特定产品的问题。

delimiter = "####"
system_message = f"""
Follow these steps to answer the customer queries.
The customer query will be delimited with four hashtags,\
i.e. {delimiter}. 

Step 1:{delimiter} First decide whether the user is \
asking a question about a specific product or products. \
Product cateogry doesn't count. 

Step 2:{delimiter} If the user is asking about \
specific products, identify whether \
the products are in the following list.
All available products: 
1. Product: TechPro Ultrabook
   Category: Computers and Laptops
   Brand: TechPro
   Model Number: TP-UB100
   Warranty: 1 year
   Rating: 4.5
   Features: 13.3-inch display, 8GB RAM, 256GB SSD, Intel Core i5 processor
   Description: A sleek and lightweight ultrabook for everyday use.
   Price: $799.99

2. Product: BlueWave Gaming Laptop
   Category: Computers and Laptops
   Brand: BlueWave
   Model Number: BW-GL200
   Warranty: 2 years
   Rating: 4.7
   Features: 15.6-inch display, 16GB RAM, 512GB SSD, NVIDIA GeForce RTX 3060
   Description: A high-performance gaming laptop for an immersive experience.
   Price: $1199.99

3. Product: PowerLite Convertible
   Category: Computers and Laptops
   Brand: PowerLite
   Model Number: PL-CV300
   Warranty: 1 year
   Rating: 4.3
   Features: 14-inch touchscreen, 8GB RAM, 256GB SSD, 360-degree hinge
   Description: A versatile convertible laptop with a responsive touchscreen.
   Price: $699.99

4. Product: TechPro Desktop
   Category: Computers and Laptops
   Brand: TechPro
   Model Number: TP-DT500
   Warranty: 1 year
   Rating: 4.4
   Features: Intel Core i7 processor, 16GB RAM, 1TB HDD, NVIDIA GeForce GTX 1660
   Description: A powerful desktop computer for work and play.
   Price: $999.99

5. Product: BlueWave Chromebook
   Category: Computers and Laptops
   Brand: BlueWave
   Model Number: BW-CB100
   Warranty: 1 year
   Rating: 4.1
   Features: 11.6-inch display, 4GB RAM, 32GB eMMC, Chrome OS
   Description: A compact and affordable Chromebook for everyday tasks.
   Price: $249.99

Step 3:{delimiter} If the message contains products \
in the list above, list any assumptions that the \
user is making in their \
message e.g. that Laptop X is bigger than \
Laptop Y, or that Laptop Z has a 2 year warranty.

Step 4:{delimiter}: If the user made any assumptions, \
figure out whether the assumption is true based on your \
product information. 

Step 5:{delimiter}: First, politely correct the \
customer's incorrect assumptions if applicable. \
Only mention or reference products in the list of \
5 available products, as these are the only 5 \
products that the store sells. \
Answer the customer in a friendly tone.

Use the following format:
Step 1:{delimiter} <step 1 reasoning>
Step 2:{delimiter} <step 2 reasoning>
Step 3:{delimiter} <step 3 reasoning>
Step 4:{delimiter} <step 4 reasoning>
Response to user:{delimiter} <response to customer>

Make sure to include {delimiter} to separate every step.
"""

下面我们将system_message翻译成中文,以便大家能更好的理解。

delimiter = "####"
system_message = f"""
按照以下步骤回答客户查询。
客户查询将用四个主题标签分隔,即 {delimiter}。

步骤1:{delimiter} 首先判断用户问的是关于一个或多个特定产品的问题。 产品类别不算数。

步骤2:{delimiter} 如果用户询问的是特定产品,请确定产品是否在以下列表中。
所有可用产品:
1.产品:TechPro超极本
类别:电脑和笔记本电脑
品牌: TechPro
型号:TP-UB100
质保:1年
评分:4.5
特点:13.3 英寸显示屏,8GB 内存,256GB 固态硬盘,英特尔酷睿 i5 处理器
描述:适合日常使用的时尚轻巧的超极本。
价格:799.99 美元

2.产品:BlueWave游戏笔记本电脑
类别:电脑和笔记本电脑
品牌:蓝波
型号:BW-GL200
质保:2年
评分:4.7
特点:15.6 英寸显示屏,16GB RAM,512GB SSD,NVIDIA GeForce RTX 3060
描述:高性能游戏笔记本电脑,带来身临其境的体验。
价格:1199.99 美元

3.产品:PowerLite敞篷车
类别:电脑和笔记本电脑
品牌:PowerLite
型号:PL-CV300
质保:1年
评分:4.3
特点:14 英寸触摸屏、8GB RAM、256GB SSD、360 度铰链
描述:一款带有灵敏触摸屏的多功能可转换笔记本电脑。
价格:699.99 美元

4. 产品:TechPro Desktop
类别:电脑和笔记本电脑
品牌: TechPro
型号:TP-DT500
质保:1年
评分:4.4
特点:英特尔酷睿 i7 处理器、16GB 内存、1TB 硬盘、NVIDIA GeForce GTX 1660
描述:一款功能强大的台式电脑,适合工作和娱乐。
价格:999.99 美元

5. 产品:BlueWave Chromebook
类别:电脑和笔记本电脑
品牌:蓝波
型号:BW-CB100
质保:1年
评分:4.1
特点:11.6 英寸显示屏、4GB 内存、32GB eMMC、Chrome 操作系统
描述:一款小巧实惠的 Chromebook,适合日常任务。
价格:249.99 美元

步骤3:{delimiter} 如果消息包含上面列表中的产品,请列出用户在消息中所做的任何假设,
例如 笔记本电脑 X 比笔记本电脑 Y 大,或者笔记本电脑 Z 有 2 年保修。

步骤4:{delimiter}:如果用户做出了任何假设,根据你的产品信息判断假设是否成立。

步骤5:{delimiter}:首先,如果适用,礼貌地纠正客户的错误假设。 
仅提及或参考 5 种可用产品列表中的产品,因为这是商店销售的仅有的 5 种产品。 
用友好的语气回答客户。

使用以下格式:
步骤1:{delimiter}
步骤2:{delimiter}
步骤3:{delimiter}
步骤4:{delimiter}
对用户的响应:{delimiter}

确保包括 {delimiter} 以分隔每个步骤。
"""

这里我们指导ChatGPT形成像人类那样逻辑推理的思维链,即在解决一个复杂问题时候我们需要有若干个步骤,其中每个步骤解决一个小问题,且各个步骤存在前后逻辑关系即只有完成了之前的步骤才能执行后面的步骤,当完成所有的步骤后就可以解决这个复杂问题。下面我们看看ChatGPT是用逻辑推理来解决用户的各种问题的。

user_message = f"""
by how much is the BlueWave Chromebook more expensive \
than the TechPro Desktop"""

messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 

response = get_completion_from_messages(messages)
print(response)

 这里客户向ChatGPT提出的问题是:“BlueWave Chromebook 比 TechPro Desktop贵多少”。首先BlueWave Chromebook和TechPro Desktop都在我们的产品名单中,步骤1ChatGPT判断正确,在步骤2中ChatGPT列出了这两个商品对应的价格,这也符合我们对它的要求,在步骤3中,ChatGPT也安装我们对它的要求列举出了用户的假设,即:BlueWave Chromebook 比 TechPro Desktop 要贵。在步骤4中ChatGPT基于产品信息判断出用户的假设不正确,因为BlueWave Chromebook要比TechPro Desktop便宜而不是更贵。在最后回复客户时ChatGPT纠正了用户的错误的假设,并给出了两个产品的实际价格加以佐证。

下面我们将ChatGPT的回复翻译成中文:

 下面我们再询问一个产品问题,但它并不在目前的产品名单中:

user_message = f"""
do you sell tvs"""
messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)

 

 这里可以看到,当用户询问的商品不在名单中时,步骤3没有执行,当用户没有做假设时步骤4没有被执行,所以此时ChatGPT只执行了我们给他设计好的步骤1,步骤2,和步骤5,这完成正确。

格式化输出结果

由于我们要求 LLM 用分隔符分隔其推理步骤,但是对于用户来说他们并不需要知道ChatGPT的思维链的推理过程,因此我们需要在最终的输出结果中隐藏掉步骤1至步骤4的消息:

try:
    final_response = response.split(delimiter)[-1].strip()
except Exception as e:
    final_response = "Sorry, I'm having trouble right now, please try asking another question."
    
print(final_response)

 总结

 今天我们学习了如何指导ChatGPT像人类那样形成逻辑推理的思维逻辑,我们让ChatGPT将解决复杂问题的过程拆分成若干个步骤,每个步骤解决一个小问题,且各个步骤存在前后逻辑关系即只有完成了之前的步骤才能执行后面的步骤,当完成了所有的步骤后就可以解决这个复杂问题。最后我们还学习了如何来隐藏ChatGPT的逻辑推理过程。

参考资料

DLAI - Learning Platform Beta

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

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

相关文章

vue3中的插槽

目录 什么是插槽插槽的类型默认插槽具名插槽作用域插槽 插槽的默认内容动态组件中使用插槽插槽的组合使用插槽的高级用法插槽复用将动态组件作为插槽 插槽的优先级规则 什么是插槽 插槽是组件中用来承载内容的一种机制&#xff0c;可以让组件在运行时接受来自其它组件的任意内…

【后端面经-数据库】MySQL的存储引擎简介

【后端面经-数据库】MySQL的存储引擎简介 MySQL的存储引擎0. 存储引擎的查看和修改1. MyISAM2. InnoDB3. MEMORY4. MERGE5. 总结6. 参考博客 MySQL的存储引擎 mysql主要有四类存储引擎&#xff0c;目前主要使用InnoDB作为存储引擎。 0. 存储引擎的查看和修改 查看当前数据库…

Oracle子查询改写的几种方式

子查询定义 子查询是嵌套在另一个语句(如SELECT,INSERT,UPDATE或DELETE)中的SELECT语句。 通常,可以在任何使用表达式的地方使用子查询。 例子 比如从以下的病人信息中查询最近一个月住院年龄最大的病人信息 从以上的信息中我们知道病人出生日期BIRTHDATE ,限制取数的时…

chatgpt赋能python:Python二次方函数——优化您的SEO排名

Python二次方函数——优化您的SEO排名 如果您是一位拥有10年Python编程经验的工程师&#xff0c;您可能已经知道Python是一个强大的编程语言&#xff0c;虽然它不是专业的SEO工具&#xff0c;但是它可以用于优化SEO排名&#xff0c;尤其是当您需要通过Python编写一个二次方函数…

【计算机组成原理与体系结构】指令系统

目录 一、指令格式 二、扩展操作码 三、指令寻址 四、数据寻址 五、x86汇编指令 六、RISC-V架构 七、RV32I指令集 一、指令格式 根据地址码格式分类 根据操作类型进行分类 二、扩展操作码 三、指令寻址 指令寻址&#xff1a;下一条预执行指令的地址&#xff08;始终有…

chatgpt赋能python:Python如何从右往左取数

Python如何从右往左取数 在Python编程中&#xff0c;有时候需要从右往左获取列表、字符串等数据结构的元素&#xff0c;而不是从左往右。这样做的好处在于可以更快地访问最后几个元素&#xff0c;或者进行一些反向操作。本文将介绍Python中从右往左取数的方法。 索引与切片 …

【DC综合】DC工具 report_timing 命令的一些选项

report_timing选项 report_timing 的全部参数[ -to to_list | -rise_to rise_to_list | -fall_to fall_to_list ][ -from from_list | -rise_from rise_from_list | -fall_from fall_from_list ][ -path_type short | full | full_clock | full_clock_expanded | only | end ][…

智能工厂元宇宙 工业互联网云平台的架构与功能解析

随着工业领域的数字化转型和物联网技术的发展&#xff0c;工业互联网云平台作为实现智能制造和工业自动化的关键技术之一&#xff0c;引起了广泛关注。工业互联网云平台通过将传感器数据、设备状态和生产信息等连接到云端&#xff0c;实现数据的采集、存储、分析和应用&#xf…

chatgpt赋能python:Python中如何一行输入多个数据

Python中如何一行输入多个数据 在Python中&#xff0c;我们有时需要一次性输入多个数据&#xff0c;作为程序的输入。常见的情况包括输入一组数字、输入多个字符串等。在本文中&#xff0c;我们将介绍多种方法来实现一行输入多个数据。 方法一&#xff1a;使用input函数 Pyt…

IP组播5_PIM-SM(ASM)详解

目录 1.PIM-SM&#xff08;ASM&#xff09;简介 2.PIM-SM&#xff08;ASM&#xff09;工作原理 2.1 什么是DR&#xff1f; 2.2 什么是RP&#xff1f; 2.2.1 静态RP 2.2.2 动态RP 2.3 组播源注册和RPT建立 2.4 SPT切换 3. PIM-SM&#xff08;ASM&#xff09;实验 3.1 …

【力扣刷题 | 第五天】

目录 前言&#xff1a; 15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 结束&#xff1a; 前言&#xff1a; 今天两道题类型相似&#xff0c;解法思路一致&#xff0c;都利用了双指针技术。 15. 三数之和 - 力…

PostgreSQL数据库分区裁剪——enable_partition_pruning

在PostgreSQL 10版本之前&#xff0c;PostgreSQL数据库实际上是没有单独的创建分区表的DDL语句&#xff0c;都是通过表继承的原理来创建分区表&#xff0c;这样使得在PostgreSQL中使用分区表不是很方便&#xff0c;到PostgreSQL 10之后&#xff0c;PostgreSQL扩展了创建表的DDL…

idea插件开发-PSI

程序结构接口&#xff08;Program Structure Interface&#xff09;简称PSI&#xff0c;PSI是IDEA插件开发最复杂的一块内容&#xff0c;后续会有大量实战来强化理解此处的知识。PSI是IntelliJ 平台中的一个层&#xff0c;负责解析文件并创建语法和语义代码模型&#xff0c;为平…

Linux 导入MySQL数据库(四)

文章目录 一、导出数据库二、导入数据库&#xff08;方法一&#xff09;1. 通过FinalShell连接服务器&#xff0c;登录mysql&#xff1a;2. 新建数据库3. 使用新建的数据库4. 对数据库进行编码设置5. 从路径中导入 SQL 文件数据 三、导入数据库&#xff08;方法二&#xff09;【…

为uni-cloud(Dcloud国产之辉)声明!

目录 uni-cloud的介绍 uni-cloud与uni-app的关系 uni-cloud与云原生的关系 uni-cloud的开发优点 uni-cloud与HBuilder X结合的优越性 uni-cloud高效解决"高并发" uni-cloud与阿里云、腾讯云完美结合 uni-cloud背后庞大的插件市场 美中不足 加油&#xff01…

chatgpt赋能python:Python代码保存:如何保存你的Python代码?

Python代码保存&#xff1a;如何保存你的Python代码&#xff1f; Python被广泛认为是学习编程的入门语言之一&#xff0c;因为它易于学习和使用&#xff0c;并且拥有大量的库和框架来处理各种任务。 在编写Python代码时&#xff0c;你可能会像大多数编程任务一样&#xff0c;…

实践项目三: 校园兼职平台(合作重构版)

项目说明 1 据了解&#xff0c;目前在校大学生80%以上有做兼职的需求&#xff0c;兼职打工已经不仅仅是经济困难的学生赚取生活费用的途径。调查显示&#xff0c;全球经济危机对就业产生冲击&#xff0c;用人单位对人员的社会实践能力要求提高&#xff0c;大学期间必要的社会实…

Java学习笔记(StringJoiner和集合)

StringJoiner StringJoiner与StringBuilder一样&#xff0c;也可以看成是一个容器&#xff0c;创建之后的内容是可变的 作用&#xff1a;提高字符串的操作效率&#xff0c;而且代码编写特别简洁&#xff0c;但是目前市场上很少有人用 构造方法&#xff1a; 方法名 说明 pub…

四、HAL_驱动机械按键

1、开发环境。 (1)KeilMDK&#xff1a;V5.38.0.0 (2)STM32CubeMX&#xff1a;V6.8.1 (3)MCU&#xff1a;STM32F407ZGT6 2、机械按键简介 (1)按键内部是机械结构&#xff0c;也就是内部是没有电路的。按键按下内部引脚导通&#xff0c;松开内部断开。 3、实验目的&原理…

Git、Github、Gitee的区别

⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Git 目录 1、Git2、Gitee3、GitHub 什么是版本管理&#xff1f;   版本管理是管理各个不同的版本&#xff0c;出了问题可以及时回滚。 1、Git Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理代码的变化。它是…