Building Systems with the ChatGPT API 使用 ChatGPT API 搭建系统(第五章学习笔记及总结)
章节导航:
第二章:Language Models, the Chat Format and Tokens(语言模型,提问范式与 Token)
第三章:Classification(评估输入-分类 )
第四章:Moderation(检查输入-监督)
👉第五章:Chain of Thought Reasoning(处理输入-思维链推理 )
目录
5 处理输入-思维链推理
5.1 思维链 Prompt 设计
5.2 内心独白(Inner monologue)
5 处理输入-思维链推理
5.1 思维链 Prompt 设计
语言模型需要进行详细的逐步推理才能回答特定问题。如果过于匆忙得出结论,很可能在推理链中出现错误。因此,我们可以通过“思维链推理”(Chain of Thought Reasoning)的策略,在查询中明确要求语言模型先提供一系列相关推理步骤,进行深度思考,然后再给出最终答案,这更接近人类解题的思维过程。
其实这就是设计Prompt的两个关键原则的结合,形成思维链推理。
两个原则:1.编写清晰、具体的指令。2. 给予模型充足思考时间。
相比直接要求输出结果,这种引导语言模型逐步推理的方法,可以减少其匆忙错误,生成更准确可靠的响应。思维链推理使语言模型更好地模拟人类逻辑思考,是提升其回答质量的重要策略之一。
下面给了一个特别好的案例:
这个案例我觉得完美的融合了前几章所学到的知识点:第三章的评估输入-分类 Classification;第四章的 检查输入-监督 Moderation
delimiter = "####"
system_message = f"""
请按照以下步骤回答客户的查询。客户的查询将以四个井号(#)分隔,即 {delimiter}。步骤 1:{delimiter} 首先确定用户是否正在询问有关特定产品或产品的问题。产品类别不计入范围。步骤 2:{delimiter} 如果用户询问特定产品,请确认产品是否在以下列表中。所有可用产品:产品:TechPro 超极本
类别:计算机和笔记本电脑
品牌:TechPro
型号:TP-UB100
保修期:1 年
评分:4.5
特点:13.3 英寸显示屏,8GB RAM,256GB SSD,Intel Core i5 处理器
描述:一款适用于日常使用的时尚轻便的超极本。
价格:$799.99产品:BlueWave 游戏笔记本电脑
类别:计算机和笔记本电脑
品牌:BlueWave
型号:BW-GL200
保修期:2 年
评分:4.7
特点:15.6 英寸显示屏,16GB RAM,512GB SSD,NVIDIA GeForce RTX 3060
描述:一款高性能的游戏笔记本电脑,提供沉浸式体验。
价格:$1199.99产品:PowerLite 可转换笔记本电脑
类别:计算机和笔记本电脑
品牌:PowerLite
型号:PL-CV300
保修期:1年
评分:4.3
特点:14 英寸触摸屏,8GB RAM,256GB SSD,360 度铰链
描述:一款多功能可转换笔记本电脑,具有响应触摸屏。
价格:$699.99产品:TechPro 台式电脑
类别:计算机和笔记本电脑
品牌:TechPro
型号:TP-DT500
保修期:1年
评分:4.4
特点:Intel Core i7 处理器,16GB RAM,1TB HDD,NVIDIA GeForce GTX 1660
描述:一款功能强大的台式电脑,适用于工作和娱乐。
价格:$999.99产品:BlueWave Chromebook
类别:计算机和笔记本电脑
品牌:BlueWave
型号:BW-CB100
保修期:1 年
评分:4.1
特点:11.6 英寸显示屏,4GB RAM,32GB eMMC,Chrome OS
描述:一款紧凑而价格实惠的 Chromebook,适用于日常任务。
价格:$249.99步骤 3:{delimiter} 如果消息中包含上述列表中的产品,请列出用户在消息中做出的任何假设,例如笔记本电脑 X 比笔记本电脑 Y 大,或者笔记本电脑 Z 有 2 年保修期。步骤 4:{delimiter} 如果用户做出了任何假设,请根据产品信息确定假设是否正确。步骤 5:{delimiter} 如果用户有任何错误的假设,请先礼貌地纠正客户的错误假设(如果适用)。只提及或引用可用产品列表中的产品,因为这是商店销售的唯一五款产品。以友好的口吻回答客户。使用以下格式回答问题:
步骤 1:{delimiter} <步骤 1 的推理>
步骤 2:{delimiter} <步骤 2 的推理>
步骤 3:{delimiter} <步骤 3 的推理>
步骤 4:{delimiter} <步骤 4 的推理>
回复客户:{delimiter} <回复客户的内容>请确保在每个步骤之间使用 {delimiter} 进行分隔。
"""
user_message = f"""BlueWave Chromebook 比 TechPro 台式电脑贵多少?"""messages = [
{'role':'system', 'content': system_message},
{'role':'user', 'content': f"{delimiter}{user_message}{delimiter}"},
] response = get_completion_from_messages(messages)
print(response)
以下是模型的输出:
步骤 1:#### 用户正在询问两款特定产品的价格差异,因此是关于特定产品的查询。
步骤 2:#### 用户在消息中提到的两款产品都在提供的列表中:BlueWave Chromebook 和 TechPro 台式电脑。
步骤 3:#### 用户假设 BlueWave Chromebook 比 TechPro 台式电脑贵,并询问贵多少。
步骤 4:#### 根据产品信息,BlueWave Chromebook 的价格是 $249.99,而 TechPro 台式电脑的价格是 $999.99。因此,TechPro 台式电脑实际上比 BlueWave Chromebook 贵 $750。
回复客户:#### 您好,实际上 TechPro 台式电脑($999.99)比 BlueWave Chromebook($249.99)贵 $750,而不是 BlueWave Chromebook 比 TechPro 台式电脑贵。希望这能帮助您!如果您有其他问题或需要进一步的帮助,请随时告诉我。
上面的这个案例 system_message 和 messages 都使用了delimiter 作为分割符(防止Prompt 注入),system_message 的整个步骤流程进行了对商品类别推断,分类等。
5.2 内心独白(Inner monologue)
对于某些应用程序,模型的推理过程可能不适合与用户共享。例如,在辅导类应用程序中,我们可能希望鼓励学生自行解决问题,但模型对学生解决方案的推理过程可能会泄露答案。
内心独白(Inner monologue)是一种可以用来缓解这种情况的策略,这是一种隐藏模型推理过程的高级方法。
内心独白的思想是让模型以一种不会透露答案的方式生成部分输出,这样用户就无法看到完整的推理过程。目标是将这些部分隐藏在一个结构化的格式中,使得传递它们变得容易。然后,在向用户呈现输出之前,对输出进行一些转化,使得只有部分输出是可见的。
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)
经过上面代码的处理,就可以只提供回复客户的内容(如下)。
您好,实际上 TechPro 台式电脑($999.99)比 BlueWave Chromebook($249.99)贵 $750,而不是 BlueWave Chromebook 比 TechPro 台式电脑贵。希望这能帮助您!如果您有其他问题或需要进一步的帮助,请随时告诉我。