【hello-agent】Plan-and-Solve
Plan-and-Solve在我们掌握了 ReAct 这种反应式的、步进决策的智能体范式后接下来将探讨一种风格迥异但同样强大的方法Plan-and-Solve。顾名思义这种范式将任务处理明确地分为两个阶段先规划 (Plan)后执行 (Solve)。如果说 ReAct 像一个经验丰富的侦探根据现场的蛛丝马迹Observation一步步推理随时调整自己的调查方向那么 Plan-and-Solve 则更像一位建筑师在动工之前必须先绘制出完整的蓝图Plan然后严格按照蓝图来施工Solve。事实上我们现在用的很多大模型工具的Agent模式都融入了这种设计模式。4.3.1 Plan-and-Solve 的工作原理Plan-and-Solve Prompting 由 Lei Wang 在2023年提出[2]。其核心动机是为了解决思维链在处理多步骤、复杂问题时容易“偏离轨道”的问题。与 ReAct 将思考和行动融合在每一步不同Plan-and-Solve 将整个流程解耦为两个核心阶段如图4.2所示规划阶段 (Planning Phase) 首先智能体会接收用户的完整问题。它的第一个任务不是直接去解决问题或调用工具而是将问题分解并制定出一个清晰、分步骤的行动计划。这个计划本身就是一次大语言模型的调用产物。执行阶段 (Solving Phase) 在获得完整的计划后智能体进入执行阶段。它会严格按照计划中的步骤逐一执行。每一步的执行都可能是一次独立的 LLM 调用或者是对上一步结果的加工处理直到计划中的所有步骤都完成最终得出答案。import os import ast from agent_client import HelloAgentsLLM from dotenv import load_dotenv from typing import List, Dict # 加载 .env 文件中的环境变量处理文件不存在异常 try: load_dotenv() except FileNotFoundError: print(警告未找到 .env 文件将使用系统环境变量。) except Exception as e: print(f警告加载 .env 文件时出错: {e}) # --- 1. LLM客户端定义 --- # 假设你已经有llm_client.py文件里面定义了HelloAgentsLLM类 # --- 2. 规划器 (Planner) 定义 --- PLANNER_PROMPT_TEMPLATE 你是一个顶级的AI规划专家。你的任务是将用户提出的复杂问题分解成一个由多个简单步骤组成的行动计划。 请确保计划中的每个步骤都是一个独立的、可执行的子任务并且严格按照逻辑顺序排列。 你的输出必须是一个Python列表其中每个元素都是一个描述子任务的字符串。 问题: {question} 请严格按照以下格式输出你的计划python与作为前后缀是必要的: python [步骤1, 步骤2, 步骤3, ...] class Planner: def __init__(self, llm_client: HelloAgentsLLM): self.llm_client llm_client def plan(self, question: str) - list[str]: prompt PLANNER_PROMPT_TEMPLATE.format(questionquestion) messages [{role: user, content: prompt}] print(--- 正在生成计划 ---) response_text self.llm_client.think(messagesmessages) or print(f✅ 计划已生成:\n{response_text}) try: plan_str response_text.split(python)[1].split()[0].strip() plan ast.literal_eval(plan_str) return plan if isinstance(plan, list) else [] except (ValueError, SyntaxError, IndexError) as e: print(f❌ 解析计划时出错: {e}) print(f原始响应: {response_text}) return [] except Exception as e: print(f❌ 解析计划时发生未知错误: {e}) return [] # --- 3. 执行器 (Executor) 定义 --- EXECUTOR_PROMPT_TEMPLATE 你是一位顶级的AI执行专家。你的任务是严格按照给定的计划一步步地解决问题。 你将收到原始问题、完整的计划、以及到目前为止已经完成的步骤和结果。 请你专注于解决“当前步骤”并仅输出该步骤的最终答案不要输出任何额外的解释或对话。 # 原始问题: {question} # 完整计划: {plan} # 历史步骤与结果: {history} # 当前步骤: {current_step} 请仅输出针对“当前步骤”的回答: class Executor: def __init__(self, llm_client: HelloAgentsLLM): self.llm_client llm_client def execute(self, question: str, plan: list[str]) - str: history final_answer print(\n--- 正在执行计划 ---) for i, step in enumerate(plan, 1): print(f\n- 正在执行步骤 {i}/{len(plan)}: {step}) prompt EXECUTOR_PROMPT_TEMPLATE.format( questionquestion, planplan, historyhistory if history else 无, current_stepstep ) messages [{role: user, content: prompt}] response_text self.llm_client.think(messagesmessages) or history f步骤 {i}: {step}\n结果: {response_text}\n\n final_answer response_text print(f✅ 步骤 {i} 已完成结果: {final_answer}) return final_answer # --- 4. 智能体 (Agent) 整合 --- class PlanAndSolveAgent: def __init__(self, llm_client: HelloAgentsLLM): self.llm_client llm_client self.planner Planner(self.llm_client) self.executor Executor(self.llm_client) def run(self, question: str): print(f\n--- 开始处理问题 ---\n问题: {question}) plan self.planner.plan(question) if not plan: print(\n--- 任务终止 --- \n无法生成有效的行动计划。) return final_answer self.executor.execute(question, plan) print(f\n--- 任务完成 ---\n最终答案: {final_answer}) # --- 5. 主函数入口 --- if __name__ __main__: try: llm_client HelloAgentsLLM() agent PlanAndSolveAgent(llm_client) question 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果 agent.run(question) except ValueError as e: print(e)终端输出内容(.venv) MacBook-Air section4 % python Plan_and_Solve.py --- 开始处理问题 --- 问题: 一个水果店周一卖出了15个苹果。周二卖出的苹果数量是周一的两倍。周三卖出的数量比周二少了5个。请问这三天总共卖出了多少个苹果 --- 正在生成计划 --- 正在调用 coding-glm-5-free 模型... ✅ 大语言模型响应成功: python [从问题中提取周一卖出的苹果数量, 根据周一的数量计算周二卖出的苹果数量周一数量乘以2, 根据周二的数量计算周三卖出的苹果数量周二数量减去5, 将周一、周二和周三的销量相加以计算总数] ✅ 计划已生成: python [从问题中提取周一卖出的苹果数量, 根据周一的数量计算周二卖出的苹果数量周一数量乘以2, 根据周二的数量计算周三卖出的苹果数量周二数量减去5, 将周一、周二和周三的销量相加以计算总数] --- 正在执行计划 --- - 正在执行步骤 1/4: 从问题中提取周一卖出的苹果数量 正在调用 coding-glm-5-free 模型... ✅ 大语言模型响应成功: 15 ✅ 步骤 1 已完成结果: 15 - 正在执行步骤 2/4: 根据周一的数量计算周二卖出的苹果数量周一数量乘以2 正在调用 coding-glm-5-free 模型... ✅ 大语言模型响应成功: 30 ✅ 步骤 2 已完成结果: 30 - 正在执行步骤 3/4: 根据周二的数量计算周三卖出的苹果数量周二数量减去5 正在调用 coding-glm-5-free 模型... ✅ 大语言模型响应成功: 25 ✅ 步骤 3 已完成结果: 25 - 正在执行步骤 4/4: 将周一、周二和周三的销量相加以计算总数 正在调用 coding-glm-5-free 模型... ✅ 大语言模型响应成功: 70 ✅ 步骤 4 已完成结果: 70 --- 任务完成 --- 最终答案: 70

相关新闻

LeetCode——24(两两交换链表中的节点)

LeetCode——24(两两交换链表中的节点)

题目链接 https://leetcode.cn/problems/swap-nodes-in-pairs/ 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示…

2026/7/3 11:17:02 阅读更多 →
用LLM分析AI机器人流量

用LLM分析AI机器人流量

网站分析中正出现一个日益严重的盲点:AI助手流量背后的用户意图。 每一天,ChatGPT、Claude、Perplexity和其他AI工具都会访问文档、浏览产品页面,并代表真实用户搜索答案来访问内容。虽然现代分析平台拥有复杂的机器人过滤机制,可…

2026/5/17 10:22:12 阅读更多 →
H桥驱动电路

H桥驱动电路

2026/7/3 11:14:11 阅读更多 →

最新新闻

SAP文件上传XSS漏洞攻防:从SVG会话劫持到纵深防御实践

SAP文件上传XSS漏洞攻防:从SVG会话劫持到纵深防御实践

1. 项目概述:从一次“意外”的会话劫持说起 几年前,我在一次针对某大型企业SAP系统的常规安全评估中,遇到了一个让我至今印象深刻的场景。客户的安全团队信誓旦旦地表示,他们的文件上传功能已经做了“万全”的防护,包…

2026/7/3 11:17:38 阅读更多 →
亦唐科技在智慧医疗领域的应用:健康管理的数字化转型

亦唐科技在智慧医疗领域的应用:健康管理的数字化转型

随着科技的迅猛发展,信息技术与医疗行业的深度融合成为推动健康管理和医疗服务改革的重要力量。智慧医疗不仅仅是对医疗资源的智能化管理,更是通过信息技术手段提升医疗服务质量、优化就医体验,降低诊疗成本,实现个性化、精准化的…

2026/7/3 11:13:36 阅读更多 →
百考通AI开题报告用智能技术帮你把构想转化为研究方案

百考通AI开题报告用智能技术帮你把构想转化为研究方案

开题报告是毕业论文或学位研究的“第一张施工图”,它不仅要阐明研究价值,更要清晰界定问题、设计方法、规划路径。然而,许多学生在撰写时常常陷入“有想法却写不出”“懂方向但不会表达”的困境:选题宽泛、文献堆砌、方法模糊、结…

2026/7/3 11:11:35 阅读更多 →
JWT安全漏洞实战:从算法混淆到密钥爆破的靶场通关指南

JWT安全漏洞实战:从算法混淆到密钥爆破的靶场通关指南

1. 项目概述:从JWT到靶场实战如果你正在学习Web安全,尤其是认证与授权相关的漏洞,那么JWT(JSON Web Token)绝对是一个绕不开的核心知识点。它广泛应用于现代Web应用和API的认证流程,从单点登录到微服务间的…

2026/7/3 11:09:34 阅读更多 →
大模型是重型工业品:算力、能源、数据、人才、产业链与政策六要素解析

大模型是重型工业品:算力、能源、数据、人才、产业链与政策六要素解析

1. 项目概述:这不是一场技术竞赛,而是一场“全要素战争”“康波之眼|AI大模型竞争系列专题深度解读”这个标题里,“康波”二字不是随便起的——它直指康德拉季耶夫长周期理论,一个用来解释资本主义经济中约50–60年一轮…

2026/7/3 11:07:33 阅读更多 →
13DOF传感器与PIC18F2682的嵌入式定位导航方案

13DOF传感器与PIC18F2682的嵌入式定位导航方案

1. 项目背景与核心需求 在嵌入式系统开发领域,精确的定位与导航能力一直是技术难点。传统方案往往采用独立的GPS模块和惯性测量单元(IMU),但存在成本高、集成度低的问题。这个项目通过13DOF传感器与PIC18F2682微控制器的创新组合,实现了高性价…

2026/7/3 11:05:33 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻