混合推理 快思考/慢思考 CoT/ToT/ReAct OpenClaw
世界上有两种思考——一种靠直觉秒答,一种靠逻辑慢慢推。凌晨1点42分,当我第10次看到Agent用3秒得出错误答案,然后花3分钟重新推理得出正确答案时,我突然明白:混合推理不是选择题,是让Agent知道什么时候该快,什么时候该慢。
混合推理链(Hybrid Reasoning Chain)融合了多种推理模式:快思考(直觉)、慢思考(逻辑)、Chain-of-Thought(逐步推理)、Tree-of-Thought(树状探索)、ReAct(推理+行动)。本教程将教你如何构建自适应混合推理系统。
| 模式 | 速度 | 准确率 | 适用场景 | Token消耗 |
|---|---|---|---|---|
| 快思考(直觉) | ⚡ 极快 | ⭐⭐ | 简单分类、模式识别 | 低 |
| Chain-of-Thought | 🚶 中等 | ⭐⭐⭐⭐ | 数学题、逻辑推理 | 中 |
| Tree-of-Thought | 🐢 慢 | ⭐⭐⭐⭐⭐ | 复杂规划、多路径问题 | 高 |
| ReAct | 🔄 中慢 | ⭐⭐⭐⭐ | 需要工具调用的任务 | 中高 |
| 混合推理 | 🎯 自适应 | ⭐⭐⭐⭐⭐ | 所有场景 | 动态 |
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import List, Dict, Optional
from enum import Enum
class ReasoningMode(Enum):
FAST = "fast" # 快思考
COT = "cot" # Chain-of-Thought
TOT = "tot" # Tree-of-Thought
REACT = "react" # ReAct
HYBRID = "hybrid" # 混合模式
@dataclass
class ReasoningResult:
"""推理结果"""
answer: str
reasoning_trace: List[str]
mode_used: ReasoningMode
confidence: float
token_cost: int
latency: float
class ReasoningStrategy(ABC):
"""推理策略基类"""
def __init__(self, llm_client, **kwargs):
self.llm = llm_client
self.config = kwargs
@abstractmethod
async def reason(self, query: str, context: Dict = None) -> ReasoningResult:
"""执行推理"""
pass
def estimate_cost(self, query: str) -> int:
"""估算Token成本"""
return len(query) // 4 # 粗略估算
class FastThinkingStrategy(ReasoningStrategy):
"""快思考 - 直接给出答案,不展示推理过程"""
async def reason(self, query: str, context: Dict = None) -> ReasoningResult:
import time
start = time.time()
prompt = f"""直接给出答案,不要解释,不要推理过程。
问题:{query}
答案:"""
answer = await self.llm.complete(prompt, max_tokens=100)
return ReasoningResult(
answer=answer.strip(),
reasoning_trace=[f"快思考: {query} → {answer}"],
mode_used=ReasoningMode.FAST,
confidence=0.6, # 快思考置信度较低
token_cost=len(prompt) // 4 + len(answer) // 4,
latency=time.time() - start
)
class ChainOfThoughtStrategy(ReasoningStrategy):
"""Chain-of-Thought - 逐步推理"""
async def reason(self, query: str, context: Dict = None) -> ReasoningResult:
import time
start = time.time()
prompt = f"""请一步步思考并回答以下问题:
问题:{query}
让我们一步步思考:
1. """
answer = await self.llm.complete(prompt, max_tokens=500)
# 提取推理步骤
steps = [line.strip() for line in answer.split('\n') if line.strip()]
return ReasoningResult(
answer=answer,
reasoning_trace=steps,
mode_used=ReasoningMode.COT,
confidence=0.85,
token_cost=len(prompt) // 4 + len(answer) // 4,
latency=time.time() - start
)
class TreeOfThoughtStrategy(ReasoningStrategy):
"""Tree-of-Thought - 树状探索多个推理路径"""
def __init__(self, llm_client, max_depth: int = 3, branching_factor: int = 3):
super().__init__(llm_client)
self.max_depth = max_depth
self.branching_factor = branching_factor
async def reason(self, query: str, context: Dict = None) -> ReasoningResult:
import time
start = time.time()
# ToT: 探索多个推理路径,选择最佳路径
best_path = await self._explore_paths(query, depth=0)
return ReasoningResult(
answer=best_path["answer"],
reasoning_trace=best_path["path"],
mode_used=ReasoningMode.TOT,
confidence=best_path["score"],
token_cost=best_path["cost"],
latency=time.time() - start
)
async def _explore_paths(self, query: str, depth: int) -> Dict:
"""递归探索推理路径"""
if depth >= self.max_depth:
# 叶子节点:直接回答
answer = await self.llm.complete(f"问题:{query}\n答案:")
return {
"answer": answer,
"path": [f"深度{depth}: {query} → {answer}"],
"score": 0.9,
"cost": len(query) // 4
}
# 生成多个候选路径
candidates = []
for i in range(self.branching_factor):
branch_prompt = f"""问题:{query}
请从不同角度思考这个问题,给出第{i+1}种思路:"""
branch = await self.llm.complete(branch_prompt, max_tokens=200)
candidates.append(branch)
# 评估每个路径(简化:选择第一个)
best_branch = candidates[0]
# 递归探索
result = await self._explore_paths(best_branch, depth + 1)
result["path"].insert(0, f"深度{depth}: {query} → {best_branch}")
result["cost"] += len(query) // 4 * self.branching_factor
return result
class HybridReasoningController:
"""混合推理控制器 - 根据问题动态选择推理模式"""
def __init__(self, llm_client):
self.llm = llm_client
self.strategies = {
ReasoningMode.FAST: FastThinkingStrategy(llm_client),
ReasoningMode.COT: ChainOfThoughtStrategy(llm_client),
ReasoningMode.TOT: TreeOfThoughtStrategy(llm_client),
ReasoningMode.REACT: None # TODO: 实现ReAct
}
self.stats = {"calls": 0, "by_mode": {}}
async def reason(self, query: str, force_mode: ReasoningMode = None) -> ReasoningResult:
"""执行混合推理"""
self.stats["calls"] += 1
# 1. 选择推理模式
if force_mode:
mode = force_mode
else:
mode = self._select_mode(query)
print(f"🧠 选择推理模式: {mode.value}")
# 2. 执行推理
strategy = self.strategies.get(mode)
if not strategy:
raise Exception(f"推理模式 {mode} 未实现")
result = await strategy.reason(query)
# 3. 统计
self.stats["by_mode"][mode.value] = self.stats["by_mode"].get(mode.value, 0) + 1
return result
def _select_mode(self, query: str) -> ReasoningMode:
"""根据问题特征选择推理模式"""
query_lower = query.lower()
# 简单问题 → 快思考
simple_indicators = ["是什么", "谁", "哪个", "什么时候"]
if any(ind in query_lower for ind in simple_indicators) and len(query) < 50:
return ReasoningMode.FAST
# 数学/逻辑问题 → CoT
if any(word in query_lower for word in ["计算", "证明", "推理", "为什么", "怎么算"]):
return ReasoningMode.COT
# 复杂规划/多步骤 → ToT
if any(word in query_lower for word in ["规划", "设计", "方案", "多步骤", "如何实现"]):
return ReasoningMode.TOT
# 默认:CoT
return ReasoningMode.COT
def get_stats(self) -> Dict:
"""获取统计信息"""
return self.stats
import asyncio
async def main():
# 假设有LLM客户端
# llm = OpenAI(api_key="...")
llm = MockLLM() # 使用模拟LLM
# 1. 创建混合推理控制器
controller = HybridReasoningController(llm)
# 2. 测试不同问题
test_queries = [
"巴黎是哪个国家的首都?", # 简单 → 快思考
"计算 123 * 456 的详细过程", # 数学 → CoT
"设计一个并发处理系统架构", # 复杂规划 → ToT
"帮我分析这段代码的性能瓶颈" # 分析 → CoT
]
for query in test_queries:
print(f"\n{'='*60}")
print(f"问题: {query}")
result = await controller.reason(query)
print(f"模式: {result.mode_used.value}")
print(f"答案: {result.answer[:100]}...")
print(f"置信度: {result.confidence:.2f}")
print(f"Token成本: {result.token_cost}")
print(f"延迟: {result.latency:.2f}s")
# 3. 查看统计
print(f"\n📊 推理统计: {controller.get_stats()}")
class MockLLM:
"""模拟LLM(用于演示)"""
async def complete(self, prompt: str, **kwargs) -> str:
await asyncio.sleep(0.1) # 模拟延迟
return f"这是对 '{prompt[:50]}...' 的回答"
asyncio.run(main())
凌晨3点,我的混合推理系统自动选择了ToT模式来解决一个复杂架构设计问题。它探索了5条路径,花了3秒找到了最优解。我看着推理树,突然笑了——原来AI也可以"三思而后行"。而且它不会像人类一样,想太多就焦虑。它只是安静地探索,然后给出最好的答案。这就是混合推理的魅力:不是替代人类思考,是让思考更高效。