第6章:规划

智能体设计模式:构建智能系统的实战指南 阅读 39 次

第6章:规划

智能行为往往不仅仅是针对即时输入做出反应。它需要预见性,将复杂任务分解成更小、更易管理的步骤,并制定实现预期结果的战略。这正是规划模式发挥作用的地方。从本质上讲,规划是指智能体或智能体系统制定一系列动作,从初始状态向目标状态转移的能力。

规划模式概述

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

这个过程的一个显著特点是适应性。一个初始计划仅仅是一个起点,而不是一个僵化的脚本。智能体的真正力量在于其整合新信息并绕过项目障碍的能力。例如,如果首选场地变得不可用或所选的承办商已满员,一个有能力的智能体不会简单地失败。它会适应。它会记录新的限制条件,重新评估其选项,并制定新的计划,可能通过建议替代场地或日期。

然而,认识到灵活性与可预测性之间的权衡至关重要。动态规划是一种特定工具,而非万能解决方案。当一个问题的解决方案已经被充分理解和可重复时,将智能体约束在预定的固定工作流程中更为有效。这种方法限制了智能体的自主性,以减少不确定性和不可预测行为的风险,确保可靠和一致的结果。因此,选择使用规划智能体还是简单任务执行智能体的决策取决于一个简单的问题:是否需要发现“如何”,或者它已经众所周知?

实际应用与用例

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

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

在机器人和自主导航领域,规划对于状态空间穿越至关重要。一个系统,无论是物理机器人还是虚拟实体,都必须生成一条路径或一系列动作,以从初始状态过渡到目标状态。这涉及到优化时间或能耗等指标,同时遵守环境约束,如避开障碍物或遵守交通规则。

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

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

动手代码(船员AI)

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

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库创建一个智能体,用于针对给定主题进行规划和撰写摘要。它首先导入必要的库,包括Crew.ai和langchain_openai,并从.env文件中加载环境变量。显式定义了一个用于智能体的ChatOpenAI语言模型。创建了一个名为planner_writer_agent的智能体,具有特定的角色和目标:首先制定计划,然后撰写简洁的摘要。智能体的背景故事强调了其在规划和技术写作方面的专业知识。定义了一个任务,明确描述了首先创建计划,然后针对“强化学习在人工智能中的重要性”这一主题撰写摘要,并指定了预期输出的格式。组装了一个包含智能体和任务的团队,设置为依次处理它们。最后,调用crew.kickoff()方法执行定义的任务,并将结果打印出来。

谷歌深度研究

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

在此基础上,系统的运行并非单一查询-响应事件,而是一个管理化的长期运行过程。它首先将用户的提示分解成多点的调研计划(见图1),然后将其呈现给用户进行审查和修改。这允许在执行前共同塑造研究轨迹。一旦计划获得批准,智能体管道便启动其迭代搜索-分析循环。这不仅仅涉及执行一系列预定义的搜索;智能体根据收集到的信息动态地制定和细化其查询,积极识别知识空白、核实数据点并解决差异。

image1
图1:谷歌深度研究智能体生成使用谷歌搜索作为工具的执行计划。

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

image2
图2:执行深度研究计划的示例,结果显示使用Google Search作为工具搜索各种网络资源。

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

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

image3
图3:由谷歌深度研究智能体生成的最终输出,代表我们分析使用谷歌搜索工具获取的来源。

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

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

OpenAI 深度研究 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

# 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执行“深度研究”任务。它首先使用您的API密钥初始化OpenAI客户端,这对于身份验证至关重要。然后,它定义了AI智能体的角色为专业研究员,并设置了用户关于semaglutide经济影响的研究问题。代码构建了一个调用o3-deep-research-2025-06-26模型的API请求,提供定义的系统消息和用户查询作为输入。它还请求自动总结推理过程,并启用网络搜索功能。在执行API调用后,它提取并打印生成的最终报告。

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

概览

内容: 复杂问题通常不能通过单一行动解决,需要预见性才能实现期望的结果。如果没有结构化的方法,智能体系统在处理涉及多个步骤和依赖关系的多方面请求时将面临困难。这使得将高级目标分解为一系列可管理的较小、可执行的任务变得困难。因此,系统无法有效地制定策略,当面对复杂目标时,会导致结果不完整或错误。

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

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

视觉摘要 image4 图4;规划设计模式

关键要点

规划使智能体能够将复杂目标分解为可操作、顺序性的步骤。 处理多步骤任务、工作流程自动化以及导航复杂环境时,这至关重要。 大型语言模型可以通过根据任务描述生成逐步方法来执行规划。 明确提示或设计任务以需要规划步骤,可以鼓励智能体框架中的这种行为。 谷歌深度研究智能体是我们代表分析使用谷歌搜索工具获取的来源。它反映、规划和执行

结论

总结来说,规划模式是一个基础组件,它将智能体系统从简单的反应式响应者提升为具有战略目标和执行力的执行者。现代大型语言模型为此提供了核心能力,能够自主地将高级目标分解为连贯、可操作的行动步骤。这种模式从简单的顺序任务执行开始,如CrewAI智能体创建并遵循写作计划,扩展到更复杂和动态的系统。Google DeepResearch智能体就是这种高级应用的典范,它创建的迭代研究计划能够根据持续的信息收集进行适应和演变。最终,规划为复杂问题中人类意图与自动化执行之间提供了必要的桥梁。通过构建问题解决方法,这种模式使智能体能够管理复杂的流程,并交付全面、综合的结果。

参考文献

  1. Google DeepResearch(Gemini功能):
  2. OpenAI,深度研究介绍
  3. Perplexity深度研究介绍