【llm_inference】plan-and-execute(最小code实现)

计划执行推理:让大语言模型像项目经理一样思考

GitHub Code: 人人都能看懂的最小实现

引言

在人工智能领域,如何让大语言模型能够像人类一样,先制定计划再执行行动,是一个重要的研究方向。计划执行(Plan and Execute)推理架构通过将复杂任务分解为规划和执行两个阶段,实现了更加系统化和可控的问题解决方式。本文将深入剖析这个创新的推理架构。

系统架构概述

计划执行推理架构主要包含三个核心阶段:

  1. 规划(Plan):分析问题并制定详细的执行计划
  2. 执行(Execute):按照计划逐步执行具体操作
  3. 综合(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计算减法的数学工具。"

工具系统的特点:

  1. 统一接口:所有工具都实现了 __call__ 方法
  2. 清晰描述:每个工具都有明确的功能描述
  3. 灵活配置:支持自定义参数和提示词

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"""
让我们首先理解问题并制定解决方案。
请以"计划:"为标题输出计划,然后是编号的步骤列表。
请制定完成任务所需的最少步骤数。
"""

规划系统的特点:

  1. 示例学习:通过few-shot提示提供参考
  2. 工具感知:自动整合可用工具信息
  3. 步骤优化:追求最少必要步骤

4. 执行引擎

执行引擎负责将计划转化为实际行动:

def execute(plans: str, tools: List[Callable]) -> List[str]:
    ACTION_PATTERN = r"\n*(\d+)\. (\w+)\((.*)\)(\s*#\w+\n)?"
    ID_PATTERN = r"\$\{?(\d+)\}?"

执行引擎的核心功能:

  1. 模式匹配:解析计划中的步骤
  2. 依赖解析:处理步骤间的引用关系
  3. 结果追踪:记录每步执行结果

实际应用案例

让我们看一个具体的示例:

question = '多伦多和纽约市之间的人口差距是多少?'

系统会这样处理:

  1. 规划阶段
计划:
1. search('多伦多2023年人口')
2. search('纽约市2023年人口')
3. math_code('纽约市和多伦多的人口差值', ['$1', '$2'])
  1. 执行阶段
  • 搜索多伦多人口
  • 搜索纽约市人口
  • 计算人口差值
  1. 综合阶段
def synthesize(question: str, execution_results: List[str]) -> str:
    synthesis_system_prompt = "你是一位能够分析执行结果并回答问题的助手。"

技术亮点

  1. 模块化设计

    • 工具系统独立
    • 步骤管理分离
    • 执行引擎解耦
  2. 智能规划

    • Few-shot学习
    • 最优步骤设计
    • 依赖关系处理
  3. 错误处理

    • 步骤验证
    • 依赖检查
    • 结果验证

应用场景

  1. 数据分析

    • 多源数据对比
    • 统计计算
    • 趋势分析
  2. 信息检索

    • 复杂查询处理
    • 数据验证
    • 信息整合
  3. 决策支持

    • 多步骤推理
    • 方案比较
    • 结果验证

优化建议

  1. 规划优化

    • 动态调整计划
    • 并行步骤支持
    • 条件分支处理
  2. 执行增强

    • 错误重试机制
    • 中间结果缓存
    • 并发执行支持
  3. 工具扩展

    • 更多数学运算
    • 复杂数据处理
    • 专业领域工具

总结

计划执行推理架构通过将复杂问题分解为规划和执行两个阶段,实现了更加系统化和可控的问题解决方式。系统的模块化设计、智能规划能力和灵活的执行机制,为实际应用提供了强大的支持。通过持续的优化和改进,这个架构将在人工智能领域发挥越来越重要的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值