思维链优化技巧:CoT、ToT、GoT的适用场景对比

思维链的演进脉络 大语言模型的推理能力不完全是"涌现"出来的,很多时候取决于我们如何引导它思考。从最基础的CoT(Chain-of-Thought)到树状的ToT(Tree-of-Thoughts)再到图状的GoT(Graph-of-Thoughts),每一种范式都在扩展前一种的推理边界。 CoT:线性推理的基石 核心思想 CoT的本质是让模型"展示推理过程"。通过在输出最终答案前生成中间推理步骤,降低模型跳过关键逻辑的风险。 # Zero-shot CoT 提示: 一个教室有32个学生,其中3/8是女生。又来了4个女生。现在女生占多少? 附加: 让我们一步一步思考。 # 模型输出 原女生数: 32 × 3/8 = 12 加入后女生数: 12 + 4 = 16 总人数: 32 + 4 = 36 比例: 16/36 = 4/9 ≈ 44.4% Few-shot CoT模板 COT_TEMPLATE = """ # 示例1 问题: {q1} 思考: {reasoning1} 答案: {a1} # 示例2 问题: {q2} 思考: {reasoning2} 答案: {a2} # 请解答 问题: {new_question} 思考: """ CoT的边界 CoT是线性的——一条路径走到底,无法回溯。这在以下场景中会出问题: 需要比较多种可能方案的决策问题 某步骤的推理错误会导致后续全部推理偏移 需要在不同阶段间交叉引用信息 ToT:树状探索推理 核心思想 ToT将推理过程建模为一棵搜索树。在每个决策节点生成多个候选思路,通过评估函数筛选有前途的分支,再继续展开。 ...

2026-07-29 · 3 min · 464 words · 硅基 AGI 探索者
Prompt工程进阶

Prompt工程进阶:Chain-of-Thought的变体与实践

Chain-of-Thought:让模型"思考" Chain-of-Thought(思维链,简称CoT)于2022年提出,至今仍是Prompt工程领域最具影响力的技术之一。核心思想是:让模型显式输出推理过程,而非直接给出答案。 2026年,CoT已经从单一技术演化为一个完整的技术家族,包括CoT-SC、ToT、GoT、PoT等多种变体。本文将系统梳理这些技术,并提供实战代码。 CoT基础:显式推理 为什么CoT有效? # 对比:标准Prompt vs CoT Prompt # 标准Prompt standard_prompt = """ 问:小明有5个苹果,小红给了他3个, 然后小明吃掉了2个。小明现在有多少苹果? 答: """ # CoT Prompt cot_prompt = """ 问:小明有5个苹果,小红给了他3个, 然后小明吃掉了2个。小明现在有多少苹果? 让我们逐步推理: 1. 小明开始有5个苹果 2. 小红给了他3个,所以:5 + 3 = 8个 3. 小明吃掉了2个,所以:8 - 2 = 6个 答:6个 """ CoT有效的原因: 计算重分配:将计算能力分配给推理过程 注意力锚定:中间步骤提供"锚点" 错误可追溯:发现推理错误时容易定位 CoT触发方法 class CoTTriggerMethods: """ 2026年主流CoT触发方法 """ @staticmethod def few_shot_cot(examples: list[dict]) -> str: """ Few-shot CoT:通过示例展示推理过程 """ prompt = "请在回答时展示完整的推理过程。\n\n" prompt += "示例:\n" for ex in examples: prompt += f"问题:{ex['question']}\n" prompt += "推理过程:\n" for step in ex['reasoning_steps']: prompt += f" {step}\n" prompt += f"答案:{ex['answer']}\n\n" return prompt @staticmethod def zero_shot_cot(question: str) -> str: """ Zero-shot CoT:使用触发词 2026年最佳触发词组合 """ return f"""{question} 请逐步思考(Step by Step),展示完整的推理过程,最后给出答案。""" @staticmethod def auto_cot(dataset: list[dict], model) -> list[dict]: """ Auto-CoT:自动构建CoT示例 1. 使用聚类选择多样性问题 2. 使用模型生成推理过程 3. 验证生成的正确性 """ # 步骤1:问题聚类 embeddings = model.encode([d['question'] for d in dataset]) clusters = cluster(embeddings, n_clusters=10) # 步骤2:从每个簇中选择代表性问题 selected = [] for cluster_id in range(10): cluster_samples = [dataset[i] for i in range(len(dataset)) if clusters[i] == cluster_id] # 选择最接近簇中心的问题 centroid = embeddings[clusters == cluster_id].mean(axis=0) closest = min(cluster_samples, key=lambda x: cosine_sim(x['embedding'], centroid)) selected.append(closest) # 步骤3:生成CoT cot_examples = [] for sample in selected: reasoning = model.generate( f"请逐步推理并给出答案:{sample['question']}" ) # 验证正确性(通过答案对比) if verify_reasoning(reasoning, sample['answer']): cot_examples.append({ 'question': sample['question'], 'reasoning': reasoning, 'answer': sample['answer'] }) return cot_examples CoT-SC:Self-Consistency自洽性 核心思想 Self-Consistency(自洽性)通过多次采样+投票提升推理可靠性。 ...

2026-06-30 · 5 min · 994 words · 硅基 AGI 探索者
鲁ICP备2026018361号