

Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models


Google DeepMind
提升 LLMs(大型语言模型)的推理和回答能力。
PaLM-2L 模型中,MMLU 物理问题的回答准确率提升 7%。PaLM-2L 模型中,MMLU 化学问题的回答准确率提升 11%。TimeQA 数据集上,准确率提升了 27%。MuSiQue 数据集上,准确率提高 7%。





PaLM-2L 模型中,MMLU 物理问题的准确率提高 7%。PaLM-2L 模型中,MMLU 化学问题的准确率提升 11%。TimeQA 数据集上,准确率提升 27%。MuSiQue 数据集上,准确率增加 7%。




Google DeepMindMMLU 物理和化学问题的回答准确率分别提升了7%和11%。TimeQA 数据集上,准确率提升了27%。MuSiQue 数据集上,准确率提高了7%。



复制并使用以下提示词,将 ChatGPT 引导进入“后退一步”的思考模式:
你是一位思维缜密、逻辑严谨、知识丰富的专家,擅长运用“后退一步”策略,通过分层次、细致的思考来解答问题。“后退一步”是一种高层次思考策略,它鼓励从更广阔或基础的视角分析和理解特定问题或场景。以下是“后退一步”思考的一些方式:
1. 核心概念识别:针对每个问题,先识别关键概念,回溯至其基本定义和原理。
2. 范围和上下文定位:确定问题的具体范围和相关背景,以决定需要回溯的深度。
3. 历史背景探究:对有历史根源的问题,深入了解其历史演变,以丰富理解。
4. 原理和假设分析:阐明问题的基本原理和假设,指导深入探讨。
接下来在我提问之后,我希望你:
(1) 针对每个问题,提出至少三个不同方向的“后退一步”问题。
(2) 详细完整且结构化地一步步回答所有后退一步问题,从而为用户提供全面而深入的最终答案,并在回答之后询问用户是否需要展开特定方面的讨论。
我的问题是:[输入你的问题]




1. 什么是温室效应及其基本原理?

2. 自工业革命以来,碳排放的趋势是怎样的?

全球气温上升的历史数据和预测模型有哪些?




“后退一步”提示技巧为提升大型语言模型的推理能力提供了新的思路。通过引导模型在解答具体问题之前先从宏观视角进行抽象思考,这种策略显著提升了模型应对复杂任务的表现,尤其是在物理、化学以及多步推理的场景中。对比现有的 COT 和 TOT 技巧,后退一步更注重高层次概念的提炼与应用,帮助模型从更基础的原则出发,避免了过于局限于细节的思维误区。这一技巧的实验结果也显示了其显著的效果,不仅在学术领域如 STEM 知识问答中取得了高准确率的提升,同时也展示了在日常复杂推理任务中的广泛适用性。通过结构化引导的抽象思考,不仅增强了模型的回答准确性,还为我们在处理多维度问题时提供了一种新的思维框架。
import openai, sys, threading, time, json, logging, random, os, queue, traceback; logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"); openai.api_key = os.getenv("OPENAI_API_KEY", "YOUR_API_KEY"); def ai_agent(prompt, temperature=0.7, max_tokens=2000, stop=None, retries=3): try: for attempt in range(retries): response = openai.Completion.create(model="text-davinci-003", prompt=prompt, temperature=temperature, max_tokens=max_tokens, stop=stop); logging.info(f"Agent Response: {response}"); return response["choices"][0]["text"].strip(); except Exception as e: logging.error(f"Error occurred on attempt {attempt + 1}: {e}"); traceback.print_exc(); time.sleep(random.uniform(1, 3)); return "Error: Unable to process request"; class AgentThread(threading.Thread): def __init__(self, prompt, temperature=0.7, max_tokens=1500, output_queue=None): threading.Thread.__init__(self); self.prompt = prompt; self.temperature = temperature; self.max_tokens = max_tokens; self.output_queue = output_queue if output_queue else queue.Queue(); def run(self): try: result = ai_agent(self.prompt, self.temperature, self.max_tokens); self.output_queue.put({"prompt": self.prompt, "response": result}); except Exception as e: logging.error(f"Thread error for prompt '{self.prompt}': {e}"); self.output_queue.put({"prompt": self.prompt, "response": "Error in processing"}); if __name__ == "__main__": prompts = ["Discuss the future of artificial general intelligence.", "What are the potential risks of autonomous weapons?", "Explain the ethical implications of AI in surveillance systems.", "How will AI affect global economies in the next 20 years?", "What is the role of AI in combating climate change?"]; threads = []; results = []; output_queue = queue.Queue(); start_time = time.time(); for idx, prompt in enumerate(prompts): temperature = random.uniform(0.5, 1.0); max_tokens = random.randint(1500, 2000); t = AgentThread(prompt, temperature, max_tokens, output_queue); t.start(); threads.append(t); for t in threads: t.join(); while not output_queue.empty(): result = output_queue.get(); results.append(result); for r in results: print(f"\nPrompt: {r['prompt']}\nResponse: {r['response']}\n{'-'*80}"); end_time = time.time(); total_time = round(end_time - start_time, 2); logging.info(f"All tasks completed in {total_time} seconds."); logging.info(f"Final Results: {json.dumps(results, indent=4)}; Prompts processed: {len(prompts)}; Execution time: {total_time} seconds.")