在详解和实测吴恩达 4 种 Agentic 工作流之中,测试了各种框架诸如反思、工具调用、规划、多智能体。在学习了其中各种 Prompt 设计后,有了一些新的认识。
对于特定的任务来说,没有万能的 Prompt,只有一些通用的模式,要完成这个任务还需要这个任务特定的 Example。另外,一定要强化指令,使用类似 MUST、奖励等字眼来引导它,这样能让大模型更好的跟随指令。
对你没看错,如果你想要更好的达成你的目的,你一定要给它 Example,我在测试各个框架过程中,没有一个不包含 Example。虽说网上也有介绍 Zero Shot 的 Prompt,比如 Let's think step by step,但遇到稍微复杂点的任务,它就不一定能解决了,它只是分步思考,并不是步步为营。
一个精心设计完成特定任务的 Prompt 大体需要包含这几部分:
- 解决任务的方法
- 任务的输入和输出
- 任务的 Example,3 到 5 个左右。
- 任务的历史纪录,如果有的话
- 用户输入的问题。
话不多说,我们来看看 4 种 LLM Agentic 工作流 Prompt 设计。
1. 规划 Prompt 设计案例
- ReAct
ReAct 提供了一种更易于人类理解、诊断和控制的决策和推理过程。它的典型流程可以用一个有趣的循环来描述:思考(Thought)→ 行动(Action)→ 观察(Observation),简称 TAO 循环。
思考(Thought)首先,面对一个问题,我们需要进行深入的思考。这个思考过程是关于如何定义问题、确定解决问题所需的关键信息和推理步骤。 行动(Action)确定了思考的方向后,接下来就是行动的时刻。根据我们的思考,采取相应的措施或执行特定的任务,以期望推动问题向解决的方向发展。 观察(Observation)行动之后,我们必须仔细观察结果。这一步是检验我们的行动是否有效,是否接近了问题的答案。
循环迭代以上流程。
Prompt 设计如下所示,包含说明解决问题的方法、输入和输出、样例和用户问题。
用交替进行的"思考、行动、观察"三个步骤来解决问答任务。思考可以对当前情况进行推理,而行动必须是以下三种类型:
(1) Search[entity],在维基百科上搜索确切的实体,并返回第一个段落(如果存在)。如果不存在,将返回一些相似的实体以供搜索。
(2) Lookup[keyword],在上一次成功通过 Search 找到的段落中返回包含关键字的下一句。
(3) Finish[answer],返回答案并结束任务。
你可以采取必要的步骤。确保你的回应必须严格遵循上述格式,尤其是行动必须是以上三种类型之一。
以下是一些参考示例:
问题:科罗拉多造山运动东部地区的海拔范围是多少?
思考 1: 我需要搜索科罗拉多造山运动,找到科罗拉多造山运动东部地区的范围,然后找到该地区的海拔范围。
行动 1: 搜索 [科罗拉多造山运动]
观察 1: 科罗拉多造山运动是科罗拉多州及周边地区的一次造山运动(造山运动)。
思考 2: 它没有提到东部地区。所以我需要查找东部地区的信息。...
(例子结束)
Question:{question}
{scratchpad}
- CoT
想让模型按照思维链这样的方式思考,你一定要给他 Example,并且针对特定的任务。我们看 reflexion 框架中如何设计的 CoT 式 Prompt:
COT_AGENT_REFLECT_INSTRUCTION = """通过思考来解决问答任务,然后用你的答案完成任务。
思考可以推理当前情况。Finish[answer] 返回答案并完成任务。你将获得一些背景信息,你应该利用这些信息来帮助你回答问题。
以下是一些示例::
{examples}
(END OF EXAMPLES)
相关背景:{context}
问题:{question}{scratchpad}"""
Example
COT = """相关背景:尼罗河是世界上最长的河流,长度约为 6,650 公里(4,132 英里)。它流经东北非的十一国,包括埃及、苏丹和乌干干。
问题:世界上最长的河流是什么?
思考:这个问题询问世界上最长的河流,根据提供的背景信息,我知道是尼罗河。
行动:完成 [尼罗河]
..."""


