吴恩达 LLM Agent 工作流 Prompt 设计详解与实战指南
在深入研究和实测吴恩达提出的四种 Agentic 工作流过程中,我测试了包括反思(Reflection)、工具调用(Tool Use)、规划(Planning)以及多智能体(Multi-Agent)在内的多种框架。通过对这些框架中 Prompt 设计的深入学习与实践,我对大模型代理的工作机制有了更为深刻的认识。
核心原则:对于特定的任务来说,不存在万能的 Prompt,只存在一些通用的模式。要完成特定任务,必须结合该任务特有的 Example(示例)。此外,你需要通过强烈的指令引导(如使用 MUST、奖励机制等措辞)来强化模型的遵循度,这能显著提升大模型对指令的执行力。
如果你希望更好地达成目标,务必提供高质量的 Example。在测试各个框架的过程中,我发现没有任何一个成功的案例不包含 Example。虽然网上也有介绍 Zero Shot(零样本)的 Prompt 方法,例如经典的 Let's think step by step,但在面对稍微复杂点的任务时,它往往力不从心。它仅能做到分步思考,而非步步为营的严密推理。
一个精心设计且针对特定任务的 Prompt,大体需要包含以下几个关键部分:
- 解决任务的方法:明确告诉模型如何处理问题。
- 任务的输入和输出:定义清晰的数据边界。
- 任务的 Example:提供 3 到 5 个左右的典型样例,这是 Few-Shot 学习的核心。
- 任务的历史纪录:如果有的话,用于上下文记忆或反思。
- 用户输入的问题:当前的具体查询。
以下将详细解析四种 LLM Agentic 工作流的 Prompt 设计思路及最佳实践。
1. 规划 Prompt 设计案例
ReAct (Reasoning + Acting)
ReAct 提供了一种更易于人类理解、诊断和控制的决策和推理过程。它的典型流程可以用一个有趣的循环来描述:思考(Thought)→ 行动(Action)→ 观察(Observation),简称 TAO 循环。
- 思考(Thought):首先,面对一个问题,我们需要进行深入的思考。这个思考过程是关于如何定义问题、确定解决问题所需的关键信息和推理步骤。
- 行动(Action):确定了思考的方向后,接下来就是行动的时刻。根据我们的思考,采取相应的措施或执行特定的任务,以期望推动问题向解决的方向发展。
- 观察(Observation):行动之后,我们必须仔细观察结果。这一步是检验我们的行动是否有效,是否接近了问题的答案。
通过循环迭代以上流程,模型能够逐步逼近正确答案。这种结构有效地减少了幻觉,因为每一步行动都基于上一步的观察结果。
Prompt 设计要点: Prompt 设计需包含说明解决问题的方法、输入和输出、样例和用户问题。以下是一个典型的 ReAct Prompt 模板:
用交替进行的"思考、行动、观察"三个步骤来解决问答任务。思考可以对当前情况进行推理,而行动必须是以下三种类型:
(1) Search[entity],在维基百科上搜索确切的实体,并返回第一个段落(如果存在)。如果不存在,将返回一些相似的实体以供搜索。
(2) Lookup[keyword],在上一次成功通过 Search 找到的段落中返回包含关键字的下一句。
(3) Finish[answer],返回答案并结束任务。
你可以采取必要的步骤。确保你的回应必须严格遵循上述格式,尤其是行动必须是以上三种类型之一。
以下是一些参考示例:
问题:科罗拉多造山运动东部地区的海拔范围是多少?
思考 1: 我需要搜索科罗拉多造山运动,找到科罗拉多造山运动东部地区的范围,然后找到该地区的海拔范围。
行动 1: 搜索 [科罗拉多造山运动]
观察 1: 科罗拉多造山运动是科罗拉多州及周边地区的一次造山运动(造山运动)。
思考 2: 它没有提到东部地区。所以我需要查找东部地区的信息。
...
(例子结束)
Question:{question}
{scratchpad}
CoT (Chain of Thought)
想让模型按照思维链这样的方式思考,你一定要给它 Example,并且针对特定的任务。我们看 Reflexion 框架中如何设计的 CoT 式 Prompt:
COT_AGENT_REFLECT_INSTRUCTION = """通过思考来解决问答任务,然后用你的答案完成任务。
思考可以推理当前情况。Finish[answer] 返回答案并完成任务。你将获得一些背景信息,你应该利用这些信息来帮助你回答问题。
以下是一些示例::
{examples}
(END OF EXAMPLES)
相关背景:{context}
问题:{question}{scratchpad}"""


