[智能体设计模式] 第6章:规划

规划模式概述

在AI领域,可以将规划智能体视为你委托复杂目标的专家。当你让它“组织一次团队团建”,你定义的是“做什么”目标及约束条件,而不是“怎么做”。智能体的核心任务是自主制定通往目标的路径。它首先要理解初始状态(如预算、参与人数、期望日期)和目标状态(成功预订团建活动),然后发现连接两者的最优行动序列。计划并非预先设定,而是根据请求动态生成。

这一过程的显著特征是适应性。智能体的真正能力在于能根据新信息调整方向,灵活应对障碍。例如,如果首选场地不可用或餐饮供应商已满,优秀的智能体不会直接失败,而是会适应变化,重新评估选项,制定新计划,比如建议替代场地或调整日期。

但也要认识到灵活性与可预测性之间的权衡。动态规划是一种特定工具,并非万能方案。当问题的解决路径已知且可重复时,约束智能体按照预定、固定流程执行更有效。这种方式限制了智能体的自主性,减少了不确定性和不可预测行为,确保结果可靠一致。因此,是否采用规划智能体,关键在于“怎么做”需不需要探索,还是已经明确。

实践应用与场景

规划模式是自主系统中的核心计算过程,使智能体能够在动态或复杂环境下,合成一系列行动以达成指定目标,将高层目标转化为结构化、可执行的步骤。

在流程自动化领域,规划用于编排复杂工作流。例如,企业新员工入职流程可拆解为创建系统账号、分配培训模块、协调各部门等子任务。智能体生成计划,按逻辑顺序执行这些步骤,调用必要工具或与系统交互以管理依赖关系。

在机器人与自主导航领域,规划是状态空间遍历的基础。无论是实体机器人还是虚拟系统,都需生成路径或行动序列,从初始状态到目标状态,优化时间或能耗等指标,同时遵守环境约束,如避障或遵守交通规则。

实战代码(CrewAI)

以下代码演示了如何用CrewAI框架实现规划者模式。智能体首先制定多步骤计划以解决复杂问题,然后按顺序执行。

CrewAI规划者智能体示例

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 = "强化学习在AI中的重要性"
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 = Crew(
    agents=[planner_writer_agent],
    tasks=[high_level_task],
    process=Process.sequential,
)

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

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

上述代码使用CrewAI库创建了一个智能体,负责规划并撰写指定主题的摘要。首先导入必要库并加载环境变量,明确指定ChatOpenAI语言模型。创建名为planner_writer_agent的智能体,设定其角色和目标,强调规划与技术写作能力。定义任务,要求先制定摘要计划,再根据计划撰写内容,并规定输出格式。组建Crew,指定顺序处理,最后调用crew.kickoff()执行任务并输出结果。

OpenAIDeepResearchAPI

OpenAIDeepResearchAPI是专为自动化复杂研究任务设计的工具。它采用先进的智能体模型,能自主推理、规划并从真实世界来源合成信息。与简单问答模型不同,它会将高层查询拆解为子问题,利用内置工具进行网络搜索,最终生成结构化、带引用的报告。API提供完整流程的编程访问,目前支持如o3-deep-research-2025-06-26(高质量合成)和o4-mini-deep-research-2025-06-26(低延迟应用)等模型。

该API的优势在于自动化原本需数小时的人工研究,输出专业级、数据驱动的报告,适用于业务决策、投资分析或政策建议。主要特点包括:

  • 结构化带引用输出:生成有条理的报告,内嵌引用并关联来源元数据,确保结论可验证、数据有据可查。
  • 透明性:与ChatGPT的黑箱过程不同,API公开所有中间步骤,包括智能体推理、具体搜索查询和代码执行,便于调试和深入分析。
  • 可扩展性:支持ModelContextProtocol(MCP),开发者可连接私有知识库和内部数据,实现公私融合检索。

使用方法:向client.responses.create端点发送请求,指定模型、输入提示和可用工具。输入通常包括定义智能体角色和输出格式的system_message,以及用户查询。必须包含web_search_preview工具,可选添加code_interpreter或MCP工具(见第十章)用于内部数据。

OpenAIDeepResearchAPI示例

from openai import OpenAI

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

# 定义智能体角色和用户研究问题
system_message = """你是一名专业研究员,需撰写结构化、数据驱动的报告。
关注数据洞见,使用可靠来源,并在正文中插入引用。"""
user_query = "研究司美格鲁肽对全球医疗体系的经济影响。"

# 创建Deep Research 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

if not 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"链接:{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密钥初始化客户端,定义智能体角色和用户研究问题。构造API调用,指定模型、输入和工具,要求自动推理摘要并启用网络搜索。调用后,提取并打印最终报告。

随后,尝试获取报告中的引用和元数据,包括被引用文本、标题、链接和位置。最后,检查并输出模型的中间步骤,如推理、搜索和代码执行,便于分析智能体的推理和操作过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值