计划执行推理:让大语言模型像项目经理一样思考
引言
在人工智能领域,如何让大语言模型能够像人类一样,先制定计划再执行行动,是一个重要的研究方向。计划执行(Plan and Execute)推理架构通过将复杂任务分解为规划和执行两个阶段,实现了更加系统化和可控的问题解决方式。本文将深入剖析这个创新的推理架构。
系统架构概述
计划执行推理架构主要包含三个核心阶段:
- 规划(Plan):分析问题并制定详细的执行计划
- 执行(Execute):按照计划逐步执行具体操作
- 综合(Synthesize):整合执行结果得出最终答案
这种设计模拟了项目经理的工作方式:先规划、后执行、最后总结,确保任务的高效完成。
技术实现深度解析
1. 工具系统设计
系统实现了三个核心工具类:
class WebSearch:
def __init__(self, name:str='web_search', threshold:int=8000):
self.system_prompt = """
你是一位洞察研究员。
1. 为用户查询寻找详细信息,并尽可能简单地将内容总结为一句话
2. 如果用户的问题是关于具体数值的,只返回数值结果,不需要任何额外解释。
"""
self.name = name
self.description = "用于网络搜索的工具"
class AbsDifferenceCode:
def __init__(self, name:str="math_code"):
self.name = name
self.description = "使用Python代码计算减法的数学工具,比LLM更准确。"
class AbsDifferenceLLM:
def __init__(self, name:str="math_llm"):
self.name = name
self.description = "使用LLM计算减法的数学工具。"
工具系统的特点:
- 统一接口:所有工具都实现了
__call__
方法 - 清晰描述:每个工具都有明确的功能描述
- 灵活配置:支持自定义参数和提示词
2. 步骤管理
class Step:
def __init__(self,
idx: int,
name: str,
tool: callable,
args: Collection[Any],
dependencies: Collection[int]):
self.idx = idx
self.name = name
self.tool = tool
self.args = args
self.dependencies = dependencies
self.observation = None
def exec(self):
self.observation = self.tool(self.args)
return self.observation
步骤类的设计体现了系统的核心特点:
- 索引管理:每个步骤有唯一标识
- 依赖追踪:记录步骤间的依赖关系
- 结果存储:保存执行观察结果
- 执行封装:统一的执行接口
3. 规划实现
规划阶段使用了精心设计的提示词系统:
def plan(question: str, tools: List[Callable]) -> str:
system_prompt = f"""
让我们首先理解问题并制定解决方案。
请以"计划:"为标题输出计划,然后是编号的步骤列表。
请制定完成任务所需的最少步骤数。
"""
规划系统的特点:
- 示例学习:通过few-shot提示提供参考
- 工具感知:自动整合可用工具信息
- 步骤优化:追求最少必要步骤
4. 执行引擎
执行引擎负责将计划转化为实际行动:
def execute(plans: str, tools: List[Callable]) -> List[str]:
ACTION_PATTERN = r"\n*(\d+)\. (\w+)\((.*)\)(\s*#\w+\n)?"
ID_PATTERN = r"\$\{?(\d+)\}?"
执行引擎的核心功能:
- 模式匹配:解析计划中的步骤
- 依赖解析:处理步骤间的引用关系
- 结果追踪:记录每步执行结果
实际应用案例
让我们看一个具体的示例:
question = '多伦多和纽约市之间的人口差距是多少?'
系统会这样处理:
- 规划阶段
计划:
1. search('多伦多2023年人口')
2. search('纽约市2023年人口')
3. math_code('纽约市和多伦多的人口差值', ['$1', '$2'])
- 执行阶段
- 搜索多伦多人口
- 搜索纽约市人口
- 计算人口差值
- 综合阶段
def synthesize(question: str, execution_results: List[str]) -> str:
synthesis_system_prompt = "你是一位能够分析执行结果并回答问题的助手。"
技术亮点
-
模块化设计
- 工具系统独立
- 步骤管理分离
- 执行引擎解耦
-
智能规划
- Few-shot学习
- 最优步骤设计
- 依赖关系处理
-
错误处理
- 步骤验证
- 依赖检查
- 结果验证
应用场景
-
数据分析
- 多源数据对比
- 统计计算
- 趋势分析
-
信息检索
- 复杂查询处理
- 数据验证
- 信息整合
-
决策支持
- 多步骤推理
- 方案比较
- 结果验证
优化建议
-
规划优化
- 动态调整计划
- 并行步骤支持
- 条件分支处理
-
执行增强
- 错误重试机制
- 中间结果缓存
- 并发执行支持
-
工具扩展
- 更多数学运算
- 复杂数据处理
- 专业领域工具
总结
计划执行推理架构通过将复杂问题分解为规划和执行两个阶段,实现了更加系统化和可控的问题解决方式。系统的模块化设计、智能规划能力和灵活的执行机制,为实际应用提供了强大的支持。通过持续的优化和改进,这个架构将在人工智能领域发挥越来越重要的作用。