#LLM入门|Prompt#2.5_思维链推理_Chain_of_Thought_Reasoning

第五章 处理输入-思维链推理

思维链推理”(Chain of Thought Reasoning)的策略,在查询中明确要求语言模型先提供一系列相关推理步骤,进行深度思考,然后再给出最终答案,这更接近人类解题的思维过程。
引导语言模型逐步推理而非直接要求输出结果,可以减少其匆忙错误,生成更准确可靠的响应。思维链推理使语言模型更好地模拟人类逻辑思考,是提升其回答质量的重要策略之一。
?如何处理语言模型的输入,以生成高质量的输出。
?如何构建思维链推理 Prompt ,并通过案例分析这种方法的效果。

一、思维链提示设计

思维链提示是一种通过分步骤引导语言模型进行推理的方法,模拟人类解决问题的逻辑过程。它包括初步理解问题、列出考虑因素、逐个分析这些因素,并最终得出结论。这种方法提高了推理质量和结论的可靠性,适用于需要复杂分析的问题。

1.1 系统消息设计

首先,在系统消息中使用思维链提示:

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} 对步骤和步骤的推理进行分隔。
"""

1.2 用户消息测试

接下来,在用户消息中测试在系统消息中设置的思维链提示:

1.2.1 更贵的电脑
from tool import get_completion_from_messages

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。
1.2.2 你有电视么?
user_message = f"""你有电视机么"""
messages =  [  
{'role':'system', 
 'content': system_message},    
{'role':'user', 
 'content': f"{delimiter}{user_message}{delimiter}"},  
] 
response = get_completion_from_messages(messages)
print(response)
步骤 1: 我们需要确定用户是否正在询问有关特定产品或产品的问题。产品类别不计入范围。

步骤 2: 在可用产品列表中,没有提到任何电视机产品。

回复客户: 很抱歉,我们目前没有可用的电视机产品。我们的产品范围主要包括计算机和笔记本电脑。如果您对其他产品有任何需求或疑问,请随时告诉我们。

二、内心独白

“内心独白”技巧用于隐藏语言模型的推理过程,通过在Prompt中指示模型将中间推理存储为变量,仅向用户展示有价值的输出,而不展示完整推理。这保护了敏感信息,同时保留了模型的推理能力,适用于需要保护答案或鼓励用户独立思考的场景。开发者应根据用户需求定制信息呈现策略。

具体操作“内心独白”技巧的步骤如下:

  1. 设计Prompt:在设计Prompt时,明确指示语言模型在处理问题时,将推理过程中的关键步骤或敏感信息存储为变量或以某种结构化格式保留。
  2. 存储中间结果:在模型的推理过程中,将中间步骤的结果(如计算、分析、假设等)存储在预设的变量中,而不是直接展示。
  3. 隐藏推理链:在模型生成最终输出时,不展示这些存储的中间结果,只呈现最终的结论或对用户有价值的信息。
  4. 呈现关键信息:确保最终输出中包含用户需要的关键信息,同时避免透露可能导致答案泄露的详细推理过程。
  5. 调整输出:根据用户的需求和场景,调整输出的内容和形式,以确保既能激发用户的思考,又能提供必要的指导。

通过这种方式,可以在不直接展示完整推理过程的情况下,有效地利用语言模型的推理能力,同时保护用户的学习过程或敏感信息。

try:
    if delimiter in response:
        final_response = response.split(delimiter)[-1].strip()
    else:
        final_response = response.split(":")[-1].strip()
except Exception as e:
    final_response = "对不起,我现在有点问题,请尝试问另外一个问题"
    
print(final_response)

很抱歉,我们目前没有可用的电视机产品。我们的产品范围主要包括计算机和笔记本电脑。如果您对其他产品有任何需求或疑问,请随时告诉我们。

在复杂任务中,多轮交互和逐步推理是必要的,尝试在一个Prompt中完成所有任务会要求过高,降低成功率。

下一章将介绍提示链(Prompt Chaining) step-by-step策略,通过将复杂任务分解为多个子任务,并为每个子任务设计明确的Prompt,逐步引导语言模型完成多步骤任务。这是提升任务完成效率的关键技能。

你可能感兴趣的:(LLM入门教程笔记,prompt,电脑,AIGC,人工智能)