Skip to main content
章节14 min read

第6章:Planning

第6章:Planning 智能行为往往不仅仅是对即时输入的反应。它需要前瞻性,将复杂任务分解为更小的、可管理的步骤,并制定实现期望结果的策略。这就是 Planning 模式发挥作用的地方。从本质上讲,Planning 是一个 agent 或 agent 系统制定一系列行动以从初始状态向目标状态推进的能力。 Planni...

第6章:Planning

智能行为往往不仅仅是对即时输入的反应。它需要前瞻性,将复杂任务分解为更小的、可管理的步骤,并制定实现期望结果的策略。这就是 Planning 模式发挥作用的地方。从本质上讲,Planning 是一个 agent 或 agent 系统制定一系列行动以从初始状态向目标状态推进的能力。

Planning 模式概述

在 AI 的语境中,将 Planning agent 想象为你将复杂目标委托给的一个专家是有帮助的。当你要求它"组织一次团队外出活动"时,你定义的是"什么"——目标及其约束条件——但不是"如何"。agent 的核心任务是自主规划通往该目标的路径。它必须首先理解初始状态(例如,预算、参与人数、期望日期)和目标状态(一次成功预订的外出活动),然后发现连接它们的最佳行动序列。计划不是预先知道的;它是根据请求创建的。

这个过程的一个标志是适应性。初始计划仅仅是一个起点,而不是一个僵化的脚本。agent 的真正力量在于其整合新信息和围绕障碍引导项目的能力。例如,如果首选的场地变得不可用或选择的餐饮服务商已满,一个有能力的 agent 不会简单地失败。它会适应。它记录新的约束条件,重新评估其选项,并制定新的计划,也许会建议替代的场地或日期。

然而,必须认识到灵活性和可预测性之间的权衡。动态 Planning 是一个特定的工具,而不是通用解决方案。当一个问题的解决方案已经被充分理解和可重复时,将 agent 约束在预定的、固定的工作流中更为有效。这种方法限制了 agent 的自主性以减少不确定性和不可预测行为的风险,保证可靠和一致的结果。因此,使用 Planning agent 还是简单的任务执行 agent 的决定取决于一个问题:"如何"是需要被发现的,还是已知的?

实际应用与用例

Planning 模式是自主系统中的核心计算过程,使 agent 能够综合一系列行动以实现指定目标,特别是在动态或复杂的环境中。该过程将高级目标转化为由离散的、可执行步骤组成的结构化计划。

在程序化任务自动化等领域,Planning 被用于编排复杂的工作流。例如,像新员工入职这样的业务流程可以被分解为有向的子任务序列,如创建系统账户、分配培训模块以及与不同部门协调。agent 生成一个计划来按逻辑顺序执行这些步骤,调用必要的 tool 或与各种系统交互来管理依赖关系。

在机器人和自主导航中,Planning 对于状态空间遍历是基础性的。一个系统(无论是物理机器人还是虚拟实体)必须生成一条路径或一系列行动以从初始状态过渡到目标状态。这涉及优化时间或能耗等指标,同时遵守环境约束,如避开障碍物或遵守交通规则。

该模式对于结构化信息综合也至关重要。当被要求生成复杂输出(如研究报告)时,agent 可以制定一个计划,包括信息收集、数据汇总、内容结构化和迭代优化等不同阶段。类似地,在涉及多步问题解决的客户支持场景中,agent 可以创建并遵循系统化的诊断、解决方案实施和升级计划。

本质上,Planning 模式使 agent 能够超越简单的反应性行动,转向目标导向的行为。它提供了解决需要一系列相互依存操作的连贯序列的问题所需的逻辑框架。

实战代码(Crew AI)

以下部分将演示使用 Crew AI 框架实现 Planner 模式。该模式涉及一个 agent,首先制定一个多步计划来处理复杂查询,然后顺序执行该计划。

python
import os from dotenv import load_dotenv from crewai import Agent, Task, Crew, Process from langchain_openai import ChatOpenAI # Load environment variables from .env file for security load_dotenv() # 1. Explicitly define the language model for clarity llm = ChatOpenAI(model="gpt-4-turbo") # 2. Define a clear and focused agent planner_writer_agent = Agent( role='Article Planner and Writer', goal='Plan and then write a concise, engaging summary on a specified topic.', backstory=( 'You are an expert technical writer and content strategist. ' 'Your strength lies in creating a clear, actionable plan before writing, ' 'ensuring the final summary is both informative and easy to digest.' ), verbose=True, allow_delegation=False, llm=llm # Assign the specific LLM to the agent ) # 3. Define a task with a more structured and specific expected output topic = "The importance of Reinforcement Learning in AI" high_level_task = Task( description=( f"1. Create a bullet-point plan for a summary on the topic: '{topic}'.\n" f"2. Write the summary based on your plan, keeping it around 200 words." ), expected_output=( "A final report containing two distinct sections:\n\n" "### Plan\n" "- A bulleted list outlining the main points of the summary.\n\n" "### Summary\n" "- A concise and well-structured summary of the topic." ), agent=planner_writer_agent, ) # Create the crew with a clear process crew = Crew( agents=[planner_writer_agent], tasks=[high_level_task], process=Process.sequential, ) # Execute the task print("## Running the planning and writing task ##") result = crew.kickoff() print("\n\n---\n## Task Result ##\n---") print(result)

这段代码使用 CrewAI 库创建了一个 AI agent,用于对给定主题进行规划并撰写摘要。它首先导入必要的库,包括 CrewAI 和 langchain_openai,并从 .env 文件加载环境变量。显式定义了一个 ChatOpenAI 语言模型供 agent 使用。创建了一个名为 planner_writer_agent 的 Agent,具有特定的角色和目标:先规划再撰写简洁的摘要。agent 的背景故事强调了其在规划和技术写作方面的专业知识。定义了一个 Task,其描述清楚地指示首先创建计划,然后针对主题"The importance of Reinforcement Learning in AI"撰写摘要,并指定了预期输出的格式。组装了一个 Crew,包含 agent 和任务,设置为顺序处理。最后,调用 crew.kickoff() 方法来执行定义的任务并打印结果。

Google DeepResearch

Google Gemini DeepResearch(见图1)是一个基于 agent 的系统,设计用于自主信息检索和综合。它通过一个多步 agentic 管道运行,动态且迭代地查询 Google Search,以系统地探索复杂主题。该系统被设计用于处理大量基于网络的来源语料库,评估收集数据的相关性和知识空白,并执行后续搜索来解决这些问题。最终输出将经过审查的信息整合为一个结构化的、多页面的摘要,并附有对原始来源的引用。

进一步扩展这一点,系统的运作不是单一的查询-响应事件,而是一个受管理的长时间运行过程。它首先将用户的提示分解为多点研究计划(见图1),然后将其呈现给用户进行审查和修改。这允许在执行之前协作地塑造研究轨迹。一旦计划获得批准,agentic 管道就会启动其迭代的搜索-分析循环。这不仅仅是执行一系列预定义的搜索;agent 会根据收集到的信息动态地制定和优化其查询,主动识别知识空白、交叉验证数据点并解决差异。

Google Deep Research agent 生成执行计划,使用 Google Search 作为 tool

该系统的一个关键架构组件是其异步管理此过程的能力。这种设计确保了可能涉及分析数百个来源的调查对单点故障具有弹性,并允许用户脱离并在完成时收到通知。系统还可以整合用户提供的文档,将来自私有来源的信息与其基于网络的研究相结合。最终输出不是一个简单的发现列表拼接,而是一个结构化的、多页面的报告。在综合阶段,模型对收集的信息进行批判性评估,识别主要主题并将内容组织成具有逻辑章节的连贯叙述。该报告被设计为交互式的,通常包括音频概览、图表和指向原始引用来源的链接等功能,允许用户进行验证和进一步探索。除了综合结果之外,模型还显式返回其搜索和咨询的完整来源列表(见图2)。这些以引用的形式呈现,提供了完全的透明度和对主要信息的直接访问。这整个过程将一个简单的查询转化为一个全面的、综合的知识体。

Deep Research 计划执行的示例,使用 Google Search 作为 tool 搜索各种网络来源

通过减轻手动数据获取和综合所需的大量时间和资源投入,Gemini DeepResearch 为信息发现提供了一种更结构化和更详尽的方法。系统的价值在各种领域的复杂、多方面的研究任务中尤为明显。

例如,在竞争分析中,可以指示 agent 系统地收集和整理有关市场趋势、竞争对手产品规格、来自各种在线来源的公众情绪以及营销策略的数据。这种自动化过程取代了手动跟踪多个竞争对手的繁重工作,使分析师能够专注于更高层次的战略解读而非数据收集(见图3)。

Google Deep Research agent 生成的最终输出,代表我们分析使用 Google Search 作为 tool 获取的来源

类似地,在学术探索中,该系统是进行广泛文献综述的强大工具。它可以识别和总结基础论文、追踪概念在大量出版物中的发展,并映射特定领域内的新兴研究前沿,从而加速学术探究中最初始和最耗时的阶段。

这种方法的效率源于对迭代的搜索-过滤循环的自动化,这是手动研究中的核心瓶颈。全面性是通过系统处理比人类研究人员在可比时间范围内通常可行的更大数量和更多样性信息来源的能力来实现的。这种更广泛的分析范围有助于减少选择偏差的潜在可能性,并增加发现不那么明显但可能至关重要的信息的可能性,从而形成对主题更健壮和更有据可依的理解。

OpenAI Deep Research API

OpenAI Deep Research API 是一个专门的工具,设计用于自动化复杂的研究任务。它利用一个先进的 agentic 模型,能够独立推理、规划和综合来自真实世界来源的信息。与简单的问答模型不同,它接受高级查询并自主将其分解为子问题,使用其内置 tool 执行网络搜索,并交付一个结构化的、引用丰富的最终报告。该 API 提供对整个过程的直接编程访问,在撰写本文时使用 o3-deep-research-2025-06-26 模型进行高质量综合,以及更快的 o4-mini-deep-research-2025-06-26 用于延迟敏感的应用。

Deep Research API 之所以有用,是因为它自动化了原本需要数小时手动研究的工作,交付专业级、数据驱动的报告,适用于为商业战略、投资决策或政策建议提供信息。其主要优势包括:

  • 结构化的、带引用的输出:它生成组织良好的报告,附有链接到来源元数据的行内引用,确保声明可验证且有数据支撑。
  • 透明性:与 ChatGPT 中抽象的过程不同,API 暴露了所有中间步骤,包括 agent 的推理、其执行的具体网络搜索查询以及它运行的任何代码。这允许进行详细的调试、分析以及对最终答案构建方式的更深入理解。
  • 可扩展性:它支持 Model Context Protocol (MCP),使开发者能够将 agent 连接到私有知识库和内部数据源,将公共网络研究与专有信息融合。

要使用该 API,你向 client.responses.create 端点发送请求,指定模型、输入提示和 agent 可以使用的 tool。输入通常包括一个定义 agent 人设和期望输出格式的 system_message,以及 user_query。你还必须包含 web_search_preview tool,并可以选择添加其他 tool,如 code_interpreter 或自定义 MCP tool(见第10章)用于内部数据。

python
from openai import OpenAI # Initialize the client with your API key client = OpenAI(api_key="YOUR_OPENAI_API_KEY") # Define the agent's role and the user's research question system_message = """You are a professional researcher preparing a structured, data-driven report. Focus on data-rich insights, use reliable sources, and include inline citations.""" user_query = "Research the economic impact of semaglutide on global healthcare systems." # Create the Deep Research API call response = client.responses.create( model="o3-deep-research-2025-06-26", input=[ { "role": "developer", "content": [{"type": "input_text", "text": system_message}] }, { "role": "user", "content": [{"type": "input_text", "text": user_query}] } ], reasoning={"summary": "auto"}, tools=[{"type": "web_search_preview"}] ) # Access and print the final report from the response final_report = response.output[-1].content[0].text print(final_report) # --- ACCESS INLINE CITATIONS AND METADATA --- print("--- CITATIONS ---") annotations = response.output[-1].content[0].annotations if not annotations: print("No annotations found in the report.") else: for i, citation in enumerate(annotations): # The text span the citation refers to cited_text = final_report[citation.start_index:citation.end_index] print(f"Citation {i+1}:") print(f" Cited Text: {cited_text}") print(f" Title: {citation.title}") print(f" URL: {citation.url}") print(f" Location: chars {citation.start_index}{citation.end_index}") print("\n" + "="*50 + "\n") # --- INSPECT INTERMEDIATE STEPS --- print("--- INTERMEDIATE STEPS ---") # 1. Reasoning Steps: Internal plans and summaries generated by the model. try: reasoning_step = next(item for item in response.output if item.type == "reasoning") print("\n[Found a Reasoning Step]") for summary_part in reasoning_step.summary: print(f" - {summary_part.text}") except StopIteration: print("\nNo reasoning steps found.") # 2. Web Search Calls: The exact search queries the agent executed. try: search_step = next(item for item in response.output if item.type == "web_search_call") print("\n[Found a Web Search Call]") print(f" Query Executed: '{search_step.action['query']}'") print(f" Status: {search_step.status}") except StopIteration: print("\nNo web search steps found.") # 3. Code Execution: Any code run by the agent using the code interpreter. try: code_step = next(item for item in response.output if item.type == "code_interpreter_call") print("\n[Found a Code Execution Step]") print(" Code Input:") print(f" ```python\n{code_step.input}\n ```") print(" Code Output:") print(f" {code_step.output}") except StopIteration: print("\nNo code execution steps found.")

这段代码片段利用 OpenAI API 执行"Deep Research"任务。它首先使用你的 API key 初始化 OpenAI 客户端,这对于身份验证至关重要。然后,它将 AI agent 的角色定义为专业研究员,并设置了用户关于司美格鲁肽对全球医疗系统经济影响的研究问题。代码构建了一个对 o3-deep-research-2025-06-26 模型的 API 调用,将定义的系统消息和用户查询作为输入提供。它还请求自动推理摘要并启用网络搜索功能。在进行 API 调用后,它提取并打印最终生成的报告。

随后,它尝试访问并显示报告注释中的行内引用和元数据,包括引用的文本、标题、URL 以及在报告中的位置。最后,它检查并打印模型所采取的中间步骤的详细信息,如推理步骤、网络搜索调用(包括执行的查询),以及如果使用了代码解释器时的任何代码执行步骤。

一览

是什么:复杂问题通常无法通过单一操作解决,需要前瞻性才能实现期望的结果。如果没有结构化的方法,agentic 系统难以处理涉及多个步骤和依赖关系的多方面请求。这使得将高级目标分解为可管理的、较小的可执行任务系列变得困难。因此,当面对复杂目标时,系统无法有效制定策略,导致不完整或不正确的结果。

为什么:Planning 模式通过让 agentic 系统首先创建一个连贯的计划来处理目标,提供了标准化的解决方案。它涉及将高级目标分解为一系列较小的、可操作的步骤或子目标。这使系统能够管理工作流、编排各种 tool 并以逻辑顺序处理依赖关系。LLM 特别适合于此,因为它们可以基于其海量的训练数据生成合理有效的计划。这种结构化的方法将简单的反应式 agent 转变为战略执行者,能够主动朝着复杂目标努力,甚至在必要时调整其计划。

经验法则:当用户的请求过于复杂而无法通过单一操作或 tool 处理时,使用此模式。它非常适合自动化多步流程,如生成详细的研究报告、新员工入职或执行竞争分析。每当任务需要一系列相互依存的操作以达到最终的综合性结果时,应用 Planning 模式。

视觉总结

Planning 设计模式

关键要点

  • Planning 使 agent 能够将复杂目标分解为可操作的、顺序的步骤。
  • 它对于处理多步任务、工作流自动化和导航复杂环境至关重要。
  • LLM 可以通过基于任务描述生成逐步方法来执行 Planning。
  • 显式地提示或设计任务以要求 Planning 步骤可以在 agent 框架中鼓励这种行为。
  • Google Deep Research 是一个 agent,它代表我们分析使用 Google Search 作为 tool 获取的来源。它进行 Reflection、Planning 和执行。

结论

综上所述,Planning 模式是一个基础组件,它将 agentic 系统从简单的反应式响应者提升为战略性的、目标导向的执行者。现代大语言模型为此提供了核心能力,自主地将高级目标分解为连贯的、可操作的步骤。该模式从简单的顺序任务执行(如 CrewAI agent 创建并遵循写作计划所演示的)扩展到更复杂和动态的系统。Google DeepResearch agent 体现了这种高级应用,创建基于持续信息收集而适应和演变的迭代研究计划。最终,Planning 为人类意图和针对复杂问题的自动化执行之间提供了必要的桥梁。通过结构化的问题解决方法,该模式使 agent 能够管理复杂的工作流并交付全面的、综合的结果。

参考资料

  1. Google DeepResearch (Gemini Feature): gemini.google.com
  2. OpenAI, Introducing deep research https://openai.com/index/introducing-deep-research/
  3. Perplexity, Introducing Perplexity Deep Research, https://www.perplexity.ai/hub/blog/introducing-perplexity-deep-research