LLM Agent 工作流 Prompt 设计精解
在大型语言模型(LLM)向智能体(Agent)演进的过程中,Prompt 工程不仅是交互的接口,更是控制智能体行为逻辑的核心。通过实测多种 Agentic 工作流框架,包括反思(Reflection)、工具调用(Tool Use)、规划(Planning)和多智能体协作,我们发现精心设计的 Prompt 是提升任务成功率的关键。
核心原则:没有万能 Prompt
对于特定任务,不存在通用的万能 Prompt,只有适配场景的通用模式。要完成复杂任务,必须结合任务特定的 Few-Shot Examples。此外,必须给予模型明确的指令约束和强烈的鼓励机制(如使用 MUST、奖励机制等),这能显著提高模型遵循指令的准确性。
一个精心设计且针对特定任务的 Prompt 通常包含以下五个部分:
- 解决任务的方法:明确定义推理路径或行动准则。
- 任务的输入和输出:规定数据格式和返回结构。
- 任务的 Example:提供 3 到 5 个高质量的参考示例(Few-Shot)。
- 任务的历史纪录:如果涉及多轮对话或迭代,需包含上下文。
- 用户输入的问题:当前的具体查询。
1. 规划 Prompt 设计案例
ReAct (Reasoning + Acting)
ReAct 提供了一种更易于人类理解、诊断和控制的决策和推理过程。其典型流程是一个循环:思考(Thought)→ 行动(Action)→ 观察(Observation),简称 TAO 循环。
- 思考(Thought):面对问题,深入分析如何定义问题、确定关键信息和推理步骤。
- 行动(Action):根据思考方向,采取具体措施或执行任务,推动问题解决。
- 观察(Observation):观察行动结果,检验有效性及是否接近答案。
通过循环迭代上述流程,模型能够逐步逼近正确答案。以下是 ReAct 的 Prompt 设计示例,包含了方法说明、输入输出规范、样例和用户问题:
prompt_template = """
用交替进行的"思考、行动、观察"三个步骤来解决问答任务。
思考可以对当前情况进行推理,而行动必须是以下三种类型之一:
(1) Search[entity]:在知识库中搜索确切的实体,并返回第一个段落。
(2) Lookup[keyword]:在上一次成功通过 Search 找到的段落中返回包含关键字的下一句。
(3) Finish[answer]:返回最终答案并结束任务。
你可以采取必要的步骤。确保你的回应必须严格遵循上述格式。
以下是一些参考示例:
问题:科罗拉多造山运动东部地区的海拔范围是多少?
思考 1:我需要搜索科罗拉多造山运动,找到该运动东部地区的范围,然后查找海拔信息。
行动 1:Search[科罗拉多造山运动]
观察 1:科罗拉多造山运动是科罗拉多州及周边地区的一次造山运动。
思考 2:它没有提到东部地区的具体海拔,需要进一步查找。
行动 2:Lookup[东部地区 海拔]
...
Question:{question}
{scratchpad}
"""
CoT (Chain of Thought)
为了让模型按照思维链方式思考,必须提供针对特定任务的 Example。CoT 强调分步思考,而非简单的直接回答。在 Reflexion 框架中,CoT 式 Prompt 的设计如下:
cot_instruction = """
通过思考来解决问答任务,然后用你的答案完成任务。
思考可以推理当前情况。Finish[answer] 返回答案并完成任务。
你将获得一些背景信息,你应该利用这些信息来帮助你回答问题。
以下是一些示例:
{examples}
(END OF EXAMPLES)
相关背景:{context}
问题:{question}{scratchpad}
"""
2. 反思 Prompt 设计案例
反思(Reflexion)是一种在现有问答基础上指导模型进行自我优化和排除错误答案的过程。当模型未能成功回答问题时,通过反思历史尝试,诊断失败原因并制定新计划。
Prompt 设计
reflection_prompt = """
你是一个能够通过自我反思来改进的高级推理代理。
你将获得之前的推理测试流程。由于你猜错了答案或用完了设定的推理步骤数,你未能成功回答问题。
请诊断失败的可能原因,并制定一个新的、简明的高级计划,旨在减轻同样的失败。
要求必须使用完整的语句来回复。
这里有一些例子:
{examples}
之前的尝试:
问题:{question}
{scratchpad}
反思:
"""


