在智能体运行的动态环境中,最初的计划,无论制定得多么精心,通常都需要修改。意想不到的阻碍、新的信息或工具执行中的失败都可能导致计划的部分内容过时或不够理想。这时,迭代规划和重新规划就显得十分必要。您制定提示来引导智能体进行这些调整的能力,对于构建有韧性且高效的智能体系统具有基础作用。本节主要介绍提示工程技术,这些技术使智能体能够根据不断变化的情况调整其计划。自适应规划的必要性在复杂数字环境中执行任务的智能体,很少有完美可预测的路径。某个网络服务可能不可用,某个数据源可能返回意外结果,或者用户可能在任务进行中引入新的限制。如果无法重新规划,智能体要么失败,要么产生不相关的结果。迭代规划使智能体能够:应对失败: 如果某个规划步骤失败(例如,工具错误),智能体需要找到替代方案。采纳新的信息: 新的数据可能会显现更高效的路径或使当前假设失效。动态优化: 随着任务的进展,可能会出现改进的机会或捷径。提示是您(开发者)指示智能体如何处理这些情况的主要机制。使用提示触发并引导重新规划当智能体遇到需要偏离其当前计划的情况时,会使用一种特定类型的提示,通常称为重新规划提示。此提示的目的是为智能体提供必要的上下文和指示,以生成修订后的计划。一个有效的重新规划提示的主要组成部分包括:原始目标: 强调总体目标,以确保重新规划工作保持一致。当前计划状态: 详细说明原始计划、已完成的步骤以及哪个步骤遇到了问题。问题描述: 清楚说明触发重新规划的错误、新信息或阻碍。这可能是来自工具的错误信息、来自传感器的反馈或来自用户的新输入。相关上下文历史: 包括任何近期观察或短期记忆项,这些可能影响重新规划决策。重新规划的具体指示: 引导大语言模型如何进行重新规划任务。这可能包括要求它:分析失败的原因。提出替代行动或子目标。考虑修订计划的具体限制或偏好。如果存在多个解决方案,评估取舍。以下是重新规划提示模板的示例结构。# 重新规划提示模板示例 # 这将在运行时填充实际数据。 original_goal = "预订下周一从纽约到伦敦的经济舱航班,预算500美元。" previous_plan_steps = [ "1. 在航空公司X上搜索航班(已完成)", "2. 确定500美元以下的合适航班(已完成)", "3. 尝试预订航班AX123(失败)" ] current_step_action = "尝试预订航班AX123" error_message = "航空公司X API 返回: '所选价格的座位不可用'。" new_information = "用户表示如果直飞航班,愿意考虑高达550美元的航班。" re_planning_prompt = f""" 系统: 智能体重新规划模块 原始目标: {original_goal} 先前计划执行: {chr(10).join(previous_plan_steps)} 尝试的当前步骤: {current_step_action} 结果/错误: {error_message} 新的相关信息: {new_information} 任务: 当前预订航班AX123的计划因所需价格下无可用座位而失败。 1. 分析情况。 2. 提出一个修订后的计划,以实现预订航班的原始目标。 3. 您的修订计划应考虑关于直飞航班预算灵活性的新信息。 4. 如果出现多个选项,如果直飞航班符合调整后的预算,则优先选择直飞航班。否则,在原始500美元预算内找到最便宜的选项,可能是在不同的航空公司或包含中转的航班。 5. 清晰列出您修订计划的步骤。 修订计划: """此提示不仅仅是提出问题;它还积极引导智能体的思考过程以生成解决方案。这里的“提示调整”是指实时构建这些定制的提示,用具体、当前的信息调整基本模板,以应对即时的重新规划需求。迭代规划提示的策略有几种策略可以使您的重新规划提示更有效:范围化重新规划: 您可以指示智能体只专注于修改计划中必要的部分,而不是要求智能体从头开始重新规划所有内容。这可以节省计算资源,并保持计划中仍然有效的部分的稳定。示例:“只修订接下来的1-2个步骤以克服此阻碍。如果可能,计划的后续部分应保持不变。”明确要求提供理由: 要求智能体解释其修订计划的推理有助于调试,并鼓励生成更具逻辑性的计划。示例:“对于修订计划中的每个步骤,请简要说明选择它的原因以及它如何处理问题。”提供备选方案或提示: 如果某些失败是常见或有已知解决方案的,您可以直接在提示中嵌入建议或首选备选策略。示例:“如果查询数据库A失败,请尝试数据库B作为替代方案,然后再报告未能找到信息。”管理重新规划的深度: 对于复杂问题,智能体可能陷入深度重新规划循环。如果重新规划在一定次数尝试后失败,您可以引入限制或标准来升级问题。示例:“如果这是针对此特定子任务的第三次重新规划尝试,并且没有找到可行的解决方案,请报告僵局并列出未解决的限制。”以下图表说明了智能体的执行周期流程,突出显示了迭代规划和重新规划如何融入其中。digraph G { rankdir=TB; node [shape=box, style="filled", fontname="Arial", fontsize=10, margin="0.1,0.05"]; edge [fontname="Arial", fontsize=9]; bgcolor="transparent"; Start [label="智能体接收目标", shape=ellipse, fillcolor="#d0bfff"]; InitialPlan [label="1. 制定初始计划\n(提示引导)", fillcolor="#a5d8ff"]; ExecuteStep [label="2. 执行当前计划步骤", fillcolor="#96f2d7"]; MonitorOutcome [label="3. 监控结果与环境", fillcolor="#ffec99"]; Evaluate [label="4. 评估结果", shape=diamond, fillcolor="#eebefa", width=2.5, height=1.2]; RePlanPrompt [label="5a. 构建重新规划提示\n(上下文: 问题, 当前计划, 目标)", fillcolor="#ffd8a8", shape=note]; AdjustPlan [label="5b. 调整/生成新的计划片段\n(大语言模型处理重新规划提示)", fillcolor="#ffc9c9"]; End [label="任务完成 / 目标达成", shape=ellipse, fillcolor="#b2f2bb"]; Start -> InitialPlan; InitialPlan -> ExecuteStep [label=" 新计划 "]; ExecuteStep -> MonitorOutcome; MonitorOutcome -> Evaluate; Evaluate -> ExecuteStep [label=" 结果正常,\n 下一步 ", color="#37b24d"]; Evaluate -> RePlanPrompt [label=" 检测到问题 ", color="#f03e3e"]; RePlanPrompt -> AdjustPlan; AdjustPlan -> ExecuteStep [label=" 修订计划 ", color="#f03e3e"]; Evaluate -> End [label=" 计划完成,\n 目标达成 ", color="#37b24d"]; {rank=same; InitialPlan; AdjustPlan;} {rank=same; ExecuteStep; RePlanPrompt;} }智能体的执行周期。如果某个步骤的结果(4)不如预期,则构建重新规划提示(5a)。此提示包含目标、当前计划和问题,引导大语言模型调整计划(5b),然后反馈到执行循环中。自适应规划的考量在设计迭代规划和重新规划的提示时,请牢记以下几点:失败/变化的清晰度: 智能体需要关于哪里出错了或发生了什么变化的明确信息。您提示中模糊的错误报告将导致模糊或不正确的重新规划。平衡自主性与引导: 提示应提供足够的引导,以确保重新规划富有成效,但也要允许智能体一定的灵活性以找到有创意的解决方案。过度规定性的提示会抑制大语言模型的解决问题能力。资源消耗: 重新规划,特别是如果涉及对大语言模型的多次调用,会消耗令牌和时间。可以设计提示来鼓励高效的重新规划,例如,通过要求最少必要的更改。状态管理: 确保智能体的内部状态(它知道什么,它尝试了什么)在重新规划过程中得到准确反映或可供访问。这对于避免重复失败或循环很重要。通过掌握迭代规划和重新规划的提示,您可以使您的AI智能体能够更有效地应对任务的复杂性和不确定性。这种适应性是更高级智能体系统的一个标志,使其能够从挫折中恢复并动态调整其策略以实现其目标。后续章节将基于这些规划能力,研究智能体如何评估其计划的质量以及管理整体任务执行。