我们在之前的讨论中提到过 Agent 的四种核心工作流:反思、工具使用、推理和多智能体协作。此前,我们已从论文和代码层面分别讲解了大语言模型(LLM)中 Agent 的反思机制与工具使用模式。本文将深入探讨 Agentic Design Pattern 中的第三部分——规划工作流(Planning)。
规划是指利用大语言模型自主决策如何拆分任务,以完成更大或更复杂的任务。许多复杂任务无法通过单个指令或单次工具调用解决,但 Agent 可以自主决定将任务拆分为更小的子任务。例如,判断输入图像中是否包含特定人物,LLM 可能考虑的步骤包括:检测是否存在人脸、截取人脸区域、调用人脸匹配库、输出结果。
规划是一种非常强大的能力,但由于 LLM 的自主决策特性,其结果往往难以预测。Andrew Ng 曾指出,反射(Reflection)和使用工具(Tool Use)这两种 Agent 设计模式是可以可靠工作的,并能显著提高应用程序性能;而规划是一种相对不成熟的技术,很难在事前准确预测其行为。尽管如此,该领域正在快速发展,规划能力的提升值得期待。
1. Chain of Thought Prompting(思维链提示)
思维链提示(Chain-of-Thought Prompting, CoT)旨在引导大型语言模型进行显式的逐步推理。研究表明,通过在提示中明确展示中间推理步骤,可以显著提高模型在复杂推理任务上的表现。
传统的提示通常直接提供问题和答案,而思维链提示则在两者之间插入多个中间推理步骤。这样做不仅帮助模型理解问题的结构,还能引导其逐步推导出正确答案。实验涵盖了数学问题、常识推理和代码生成等多种任务。思维链提示在各类推理任务中均显著提升了模型的表现。例如,在解决数学题时,思维链提示比传统提示方法提高了模型的准确率。此外,模型规模越大,思维链提示的效果越显著,这表明大型模型具有更强的推理和理解能力。下图表明模型在至少要在 8B 以上才会有明显的提升。
以论文对于推理数学问题的 Prompt 为例:
Here's examples when you are answer.
Q: There are 15 trees in the grove. Grove workers will plant trees in the grove today. After they are done, there
will be 21 trees. How many trees did the grove workers plant today?
A: There are 15 trees originally. Then there were 21 trees after some more were planted. So there must have
been 21 - 15 = 6. The answer is 6.
...
Q: Olivia has $23. She bought five bagels for $3 each. How much money does she have left?
A: Olivia had 23 dollars. 5 bagels for 3 dollars each will be 5 x 3 = 15 dollars. So she has 23 - 15 dollars left. 23
- 15 is 8. The answer is 8.
Q: Tracy used a piece of wire 4 feet long to support tomato plants in the garden. The wire was cut into pieces 6 inches long. How many pieces did she obtain?
A:
如果复制完整的实例,ChatGPT 会按照上述推理步骤回复:
Tracy used a piece of wire 4 feet long. There are 12 inches in a foot, so the wire was 4 * 12 = 48 inches long. The wire was cut into pieces 6 inches long. To find the number of pieces, we divide the total length of the wire by the length of each piece: 48 / 6 = 8. The answer is 8.
这里通过对指定类型的问题,给出 Chain-of-Thoughts 的拆解过程 Example,从而提示 LLM 如何思考分布并得出答案。在实际应用中,我们可以针对特定领域的任务构建 Few-Shot 示例,让模型模仿这种推理路径。
2. HuggingGPT 系统架构
HuggingGPT 是一种结合了 ChatGPT 和 Hugging Face 平台上各种专家模型的系统,旨在解决复杂的 AI 任务。该系统的工作流程主要分为以下几个步骤:
- 任务规划:使用 ChatGPT 分析用户的请求,理解他们的意图,并将其分解为可能可解决的任务。
- 模型选择:为了完成规划的任务,ChatGPT 根据模型的描述选择托管在 Hugging Face 上的专家模型。
- 任务执行:调用并执行每个选定的模型,然后将结果返回给 ChatGPT。
- 响应生成:最后,使用 ChatGPT 整合所有模型的预测结果,并生成最终响应。
HuggingGPT 支持 24 种不同的 AI 任务,涵盖语言处理、视觉处理、语音识别等领域。为了评估系统的任务规划能力,研究人员采用了 GPT-4 作为评估者,通过特定的评分标准来判断任务规划的准确性和合理性。
在任务规划阶段,Prompt 设计如下:
The AI assistant performs task parsing on user input, generating a list of tasks with the following format: [{"task": task, "id", task_id, "dep": dependency_task_ids,
"args": {"text": text, "image": URL, "audio": URL, "video": URL}}].
The "dep" field denotes the id of the previous task which generates a new resource upon which the current task
relies.
The tag "<resource>-task_id" represents the generated text, image, audio, or video from
dependency task with the corresponding task_id.
The task must be selected from the following options: {{ Available Task List }}.
Please note that there exists a logical connections and order
between the tasks. In case the user input cannot be parsed, an empty JSON response should be
provided.
Here are several cases for your reference: {{ Demonstrations }}.
To assist with task planning, the chat history is available as {{ Chat Logs }}, where you can trace the user-mentioned
resources and incorporate them into the task planning stage.
详细分析这个 Prompt 设计,它有助于我们设计自己的 Prompt:
- 描述任务的输入和输出,要求根据用户输入生成一个特定任务列表。
- 描述输出的各个字段,包括 task、dep 和 tag 等,以及可选 task 列表。
- 描述 Corner Case,说明输出在某些情况下也可以是空 JSON。
- 给出 Examples。
- 最后将聊天历史记录附着上去,协助任务规划。
3. LLM Agent 规划综述
综述《Understanding the planning of LLM agents: A survey》系统地探讨了如何利用大型语言模型(LLMs)提升自主代理的规划能力。这是人工智能研究中的一个新兴且重要领域,总结了现有工作,并对如何改善 LLMs 在规划任务中的表现进行分类分析,同时也指出了未来研究面临的挑战。论文认为当前 LLM 代理规划主要分为以下几类:
- 任务分解:通过'分而治之'的策略,将复杂任务拆解为多个子任务,分别进行规划。代表作:CoT、ReAct 和 HuggingGPT。
- 多计划选择:生成多个备选计划,并使用搜索算法(如树搜索)从中选择最优方案。代表作:ToT(Tree of Thoughts)、GoT(Graph of Thoughts)、CoT-SC(Self-Consistency)。
- 外部模块辅助规划:结合外部规划器,提升规划效率和可行性,同时利用 LLM 进行任务形式化。代表作:LLM+P、LLM+PDDL。
- 反思与精炼:通过自我反思和总结失败经验,提升错误纠正能力,避免'思维循环'。代表作:Reflexion、CRITIC、Self-Refine。
- 记忆增强规划:引入额外的记忆模块,存储常识、过往经验等,辅助规划过程。代表作:REMEMBER、MemoryBank。
在之前的研究中,我们已经深入探讨了基于 Reflexion、CRITIC 和 Self-Refine 的代理(Agent)反思机制。'思维链'(Chain-of-Thoughts, CoT)作为一种任务分解策略,其核心思想在于通过逐步推理来解决问题。为了评估不同 Agent 框架的性能,我们对四个数据集进行了实验,比较了包括 Z-CoT(零样本思维链)、F-CoT(少样本思维链)、CoT-SC(自洽思维链)、SayCan、ReAct 以及 Reflexion 等代表性模型在成功率(SR)、平均奖励(AR)和成本(EX)上的表现。
实验结果表明,Reflexion 框架在所有数据集中均展现出最高的成功率,但与此同时,其成本也相对较高。这是因为 Reflexion 框架在 ReAct 或 CoT 的基础上,增加了多轮反思迭代,从而提高了解决问题的深度和准确性,但相应的资源消耗也随之增加。相比之下,CoT-SC 在成本和成功率之间取得了较好的平衡。其成功率与 ReAct 相近,但成本明显较低,这使得 CoT-SC 成为一个在成本效益和性能之间做出折衷选择的优选方案。然而,对于自建的大型语言模型(LLM)且对实时性要求不高的应用场景,Reflexion 框架仍然是一个更为理想的选择。它通过增加迭代次数,虽然提高了成本,但也显著提升了问题解决的质量和深度。
4. 实施建议与最佳实践
在实际部署规划型 Agent 时,除了选择合适的框架,还需注意以下工程实践:
- 上下文管理:规划过程往往涉及多步交互,需合理管理 Token 上下文窗口,避免关键信息丢失。可使用滑动窗口或摘要技术压缩历史对话。
- 容错机制:由于规划的不确定性,Agent 可能会陷入死循环或产生无效路径。应设置最大迭代次数限制,并在检测到异常状态时触发回退机制。
- 工具标准化:确保所有可调用的工具接口定义清晰,参数校验严格,减少因工具调用错误导致的规划中断。
- 监控与日志:记录每一步规划决策的依据和执行结果,便于后续分析和优化 Prompt 策略。
5. 总结
综上所述,选择合适的 Agent 框架需要根据具体的应用需求、成本预算以及对实时性的要求来综合考量。在资源充足且对性能有较高要求的情况下,Reflexion 框架的优势更为明显;而在成本敏感或实时性要求较高的应用中,CoT-SC 等平衡性更好的框架可能更为合适。后续,我们会深入代码分析 Reflexion 框架中基于 CoT 的反思设计和 HuggingGPT 的具体实现细节。
规划工作流是构建高级智能体的关键一环。随着基础模型能力的增强和推理技术的进步,未来的 Agent 将具备更强的自主规划和解决问题的能力。开发者应关注这一领域的最新进展,并结合实际业务场景灵活应用相关技术。

