《Agentic Design Patterns:构建智能系统的实战指南》- 第六章 规划

书籍名称:Agentic Design Patterns: A Hands-On Guide to Building Intelligent Systems
本书作者:Antonio Gulli
链接地址:https://docs.google.com/document/d/18vvNESEwHnVUREzIipuaDNCnNAREGqEfy9MQYC9wb4o
内容摘要:本文是对《智能体设计模式》第六章的翻译。此章节介绍了规划(Planning)在智能体编程中的作用,以及如何结合规划功能进行设计。
翻译:煤矿工厂

概述

智能行为通常不仅仅是对即时输入做出反应。它需要远见,将复杂的任务分解成更小、更易于管理的步骤,并制定策略来实现期望的结果。这就是规划模式发挥作用的地方。规划的核心是代理或代理系统制定一系列行动以从初始状态迈向目标状态的能力。

在人工智能领域,将规划代理视为您委派复杂目标的专家会很有帮助。当您让它“组织一次团队外出活动”时,您定义的是“什么”(目标及其限制),而不是“如何”。代理的核心任务是自主地规划实现该目标的路径。它必须首先了解初始状态(例如,预算、参与者人数、期望日期)和目标状态(成功预订的外出活动),然后发现连接它们的最佳行动序列。计划不是预先知道的;它是根据请求创建的。

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

然而,认识到灵活性可预测性之间的权衡至关重要。动态规划是一种特定的工具,而不是一个通用的解决方案。当一个问题的解决方案已经很好理解并且可重复时,将代理限制在预定的固定工作流程中会更有效。这种方法限制了代理的自主性,以减少不确定性和不可预测行为的风险,从而保证可靠和一致的结果。因此,决定使用规划代理还是简单的任务执行代理,取决于一个问题:需要“如何”被发现,还是它已经已知

应用和示例

规划模式是自主系统中的核心计算过程,它使智能体能够合成一系列动作以实现特定目标,尤其是在动态或复杂的环境中。在规划模式下,智能体将高级目标转换为由离散、可执行步骤组成的结构化计划

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

机器人技术自主导航中,规划是状态空间遍历的基础。系统,无论是物理机器人还是虚拟实体,都必须生成路径或动作序列以从初始状态转换到目标状态。这涉及优化时间或能源消耗等指标,同时遵守环境限制,例如避开障碍物或遵守交通法规。

此模式对于结构化信息合成也至关重要。当任务是生成像研究报告这样复杂的输出时,智能体可以制定一个计划,其中包括信息收集、数据汇总、内容结构化和迭代完善等不同阶段。同样,在涉及多步骤问题解决的客户支持场景中,智能体可以创建并遵循一个系统的诊断、解决方案实施和升级计划

本质上,规划模式允许智能体超越简单的、反应性的动作,转向目标导向的行为。它为解决需要连贯的相互依赖操作序列的问题提供了必要的逻辑框架。

代码示例上手 (Crew AI)

接下来的部分将演示如何使用 Crew AI 框架实现规划器(Planner)模式。这种模式涉及一个智能体,它首先制定一个多步骤计划来解决一个复杂的查询,然后按顺序执行该计划。

 import os
from dotenv import load_dotenv
from crewai import Agent, Task, Crew, Process
from langchain_openai import ChatOpenAI

# 为安全起见,从 .env 文件加载环境变量
 load_dotenv()

# 1. 为清晰起见,显式定义语言模型
 llm = ChatOpenAI(model="gpt-4-turbo")

# 2. 定义一个清晰且专注的代理
 planner_writer_agent = Agent(
    role='文章规划师和撰写人',
    goal='规划并撰写关于指定主题的简洁、引人入胜的摘要。',
    backstory=(
        '你是一位专业的科技作家和内容策略师。 '
        '你的优势在于在撰写前制定清晰、可行的计划, '
        '确保最终的摘要既信息丰富又易于理解。'
    ),
    verbose=True,
    allow_delegation=False,
    llm=llm # 将特定的LLM分配给代理
 )

# 3. 定义一个具有更结构化和具体预期输出的任务
 topic = "强化学习在人工智能中的重要性"
 high_level_task = Task(
    description=(
        f"1. 为主题“{topic}”的摘要创建一个要点计划。\n"
        f"2. 根据你的计划撰写摘要,保持在200字左右。"
    ),
    expected_output=(
        "一份包含两个独立部分的最终报告:\n\n"
        "### 计划\n"
        "- 一个要点列表,概述摘要的主要内容。\n\n"
        "### 摘要\n"
        "- 对主题的简洁且结构良好的摘要。"
    ),
    agent=planner_writer_agent,
 )

# 创建一个具有明确流程的团队
 crew = Crew(
    agents=[planner_writer_agent],
    tasks=[high_level_task],
    process=Process.sequential,
 )

# 执行任务
 print("## 正在运行规划和撰写任务 ##")
 result = crew.kickoff()

 print("\n\n---\n## 任务结果 ##\n---")
 print(result)

此代码使用 CrewAI 库创建一个人工智能智能体,该智能体负责规划并撰写给定主题的摘要。它首先导入必要的库,包括 CrewAI 和 langchain_openai,并从 .env 文件加载环境变量。一个 ChatOpenAI 语言模型被明确定义用于该智能体。创建了一个名为 planner_writer_agent 的智能体,其具体角色和目标是:先规划,后撰写一份简洁的摘要。该智能体的背景故事强调了其在规划和技术写作方面的专业知识。定义了一个任务,其明确描述是:首先创建一个计划,然后就“强化学习在人工智能中的重要性”这一主题撰写一份摘要,并指定了预期输出的格式。一个 Crew(团队)由该智能体和任务组成,并设置为按顺序处理它们。最后,调用 crew.kickoff() 方法来执行定义的任务并打印结果。

谷歌的 DeepResearch 功能

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

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

《Agentic Design Patterns:构建智能系统的实战指南》- 第六章 规划
图1. 谷歌深度研究智能体使用谷歌搜索的工具,来生成一个研究计划

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

《Agentic Design Patterns:构建智能系统的实战指南》- 第六章 规划
图2. 一个深度研究的运行示例。将谷歌搜索作为工具用于检索各类网络资源

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

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

《Agentic Design Patterns:构建智能系统的实战指南》- 第六章 规划
图3. 谷歌深度研究智能体基于使用搜索工具得到的数据来源,生成的最终输出

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

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

OpenAI Deep Research API

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

深度研究 API 非常有用,因为它将原本需要数小时手动研究的工作自动化,提供专业级、数据驱动的报告,适用于为商业策略、投资决策或政策建议提供信息。其主要优势包括:

  • 结构化、引用的输出:生成组织良好的报告,其中包含链接到来源元数据的内联引用,确保声明可验证且有数据支持。
  • 透明度:与 ChatGPT 中抽象的过程不同,API 公开所有中间步骤,包括代理的推理、其执行的具体网络搜索查询以及它运行的任何代码。这允许进行详细调试与分析,并深入理解最终答案的构建过程。
  • 可扩展性:支持模型上下文协议MCP),使开发人员能够将代理连接到私人知识库和内部数据源,将公共网络研究与专有信息相结合。

要使用 API,您需要向 client.responses.create 端点发送请求,指定模型输入提示以及代理可以使用的工具。输入通常包括定义代理角色和所需输出格式的 system_message,以及 user_query。您必须包含web_search_preview 工具,并可选择添加其他工具,如 code_interpreter 或自定义 MCP 工具(参见第 10 章)以获取内部数据。

 from openai import OpenAI

# 使用您的API密钥初始化客户端
 client = OpenAI(api_key="YOUR_OPENAI_API_KEY")

# 定义代理的角色和用户的研究问题
 system_message = """您是一位专业的、准备结构化、数据驱动报告的研究员。
 专注于数据丰富的见解,使用可靠来源,并包含内联引用。"""
 user_query = "研究司美格鲁肽对全球医疗保健系统的经济影响。"

# 创建深度研究API调用
 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"}]
 )

# 访问并打印响应中的最终报告
 final_report = response.output[-1].content[0].text
 print(final_report)

# --- 访问内联引用和元数据 ---
 print("--- 引用 ---")
 annotations = response.output[-1].content[0].annotations

ifnot annotations:
    print("报告中未找到引用。")
else:
    for i, citation in enumerate(annotations):
        # 引用指向的文本范围
        cited_text = final_report[citation.start_index:citation.end_index]

        print(f"引用 {i+1}:")
        print(f"  被引用文本: {cited_text}")
        print(f"  标题: {citation.title}")
        print(f"  URL: {citation.url}")
        print(f"  位置: 字符 {citation.start_index}–{citation.end_index}")
 print("\n" + "="*50 + "\n")

# --- 检查中间步骤 ---
 print("--- 中间步骤 ---")

# 1. 推理步骤:模型生成的内部计划和摘要。
try:
    reasoning_step = next(item for item in response.output if item.type == "reasoning")
    print("\n[找到推理步骤]")
    for summary_part in reasoning_step.summary:
        print(f"  - {summary_part.text}")
except StopIteration:
    print("\n未找到推理步骤。")

# 2. 网页搜索调用:代理执行的确切搜索查询。
try:
    search_step = next(item for item in response.output if item.type == "web_search_call")
    print("\n[找到网页搜索调用]")
    print(f"  执行的查询: '{search_step.action['query']}'")
    print(f"  状态: {search_step.status}")
except StopIteration:
    print("\n未找到网页搜索步骤。")

# 3. 代码执行:代理使用代码解释器运行的任何代码。
try:
    code_step = next(item for item in response.output if item.type == "code_interpreter_call")
    print("\n[找到代码执行步骤]")
    print("  代码输入:")
    print(f"  ```python\n{code_step.input}\n  ```")
    print("  代码输出:")
    print(f"  {code_step.output}")
except StopIteration:
    print("\n未找到代码执行步骤。")

此代码片段利用 OpenAI API 执行“深度研究”任务。它首先使用您的 API 密钥初始化 OpenAI 客户端(这对身份验证至关重要)。然后,将 AI 代理的角色定义为专业研究员,并设置用户关于“司美格鲁肽对全球医疗保健系统的经济影响”的研究问题。该代码构建了对 o3-deep-research-2025-06-26 模型的 API 调用,提供定义的 system_message 和 user_query 作为输入,并请求自动总结推理、启用网页搜索功能

进行 API 调用后,它提取并打印最终生成的报告。随后,尝试访问并显示报告注释中的内联引用和元数据,包括引用的文本、标题、URL 以及在报告中的位置。最后,它检查并打印模型采取的中间步骤详情,例如推理步骤、网络搜索调用(含执行的查询),以及若使用了代码解释器,则还包括代码执行步骤

摘要

内容:复杂问题通常无法通过单一行动解决,需要远见才能达到预期结果。如果没有结构化方法,代理系统难以处理涉及多个步骤和依赖项的多方面请求。这使得将高级目标分解为一系列可管理的小型可执行任务变得困难。因此,系统在面对复杂目标时无法有效制定策略,导致结果不完整或不正确

原因规划模式通过让代理系统首先创建连贯的计划来解决目标,从而提供标准化解决方案。它涉及将高级目标分解为一系列更小、可操作的步骤或子目标。这使得系统能够管理复杂的工作流程、协调各种工具并按逻辑顺序处理依赖项。大型语言模型(LLM)特别适合此任务,因为它们可以根据其庞大的训练数据生成合理有效的计划。这种结构化方法将简单的反应式代理转变为战略执行者,可以主动实现复杂目标,甚至在必要时调整计划

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

总结图示

《Agentic Design Patterns:构建智能系统的实战指南》- 第六章 规划
图4. 规划模式设计示意

要点

  • 规划使代理能够将复杂目标分解为可操作的顺序步骤
  • 它对于处理多步骤任务工作流自动化驾驭复杂环境至关重要。
  • LLM 可以根据任务描述生成分步方法来执行规划。
  • 明确提示设计需要规划步骤的任务会鼓励代理框架中的这种行为。
  • Google Deep Research 是一个代理,它使用 Google Search 作为工具分析获取的来源,并进行反思、规划和执行

结论

总之,规划模式是一个基础组件,它将代理系统从简单的反应式响应者提升为战略性、面向目标的执行者。现代大型语言模型(LLM)为此提供了核心能力,能够自主将高级目标分解为连贯、可操作的步骤。这种模式可以从直接的顺序任务执行(如 CrewAI 代理创建和遵循写作计划所展示的)扩展到更复杂和动态的系统。Google DeepResearch 代理就是这种高级应用的典范:它创建迭代研究计划,并根据持续的信息收集进行调整和演变

最终,规划为复杂问题的人类意图与自动化执行提供了必要的桥梁。通过构建问题解决方法,这种模式使代理能够管理复杂的工作流程并提供全面、综合的结果。

参考文献

  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

往期回顾

《Agentic Design Patterns:构建智能系统的实战指南》- 前言

《Agentic Design Patterns:构建智能系统的实战指南》- 第一章 提示链

《Agentic Design Patterns:构建智能系统的实战指南》- 第二章 路由

《Agentic Design Patterns:构建智能系统的实战指南》- 第三章 并行化

《Agentic Design Patterns:构建智能系统的实战指南》- 第四章 反思

《Agentic Design Patterns:构建智能系统的实战指南》- 第五章 工具使用

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论