打造无敌AI代理的提示工程
最近我构建了不少不同类型的代理,越来越明显的是,几乎所有真正优秀的代理(比如 GPT Pilot、GPT Engineer、Devin,甚至是自我操作计算机)都使用了非常相似的提示技术来实现他们所做的一切。
在这篇文章中,我们将探讨这些代理用来完成工作的最关键提示。
没有一些好的例子,讨论这些技术是没有意义的,因此我们将使用一个最近让我大开眼界的项目——Claude Engineer。你可能已经知道这个代理,它质量非常高,并且能够自行创建整个代码库。它还恰好使用了我们即将讨论的所有提示方法,因此可以作为一个很好的示例。
1、迭代细化提示
这是允许代理执行迭代操作或中间步骤问题解决的最重要方法之一。
这种方法的力量在于,通过创建中间步骤并逐步完成每个步骤,使模型能够执行任务。
有许多进行迭代细化的方法,并不是所有方法都能产生最佳结果。例如,在 claude-engineer 中,模型在任务开始时的 AUTOMODE 模式下创建了一个逐步大纲,这通过以下行提示:
你现在处于自动模式!!!
在自动模式下: 1. 根据用户请求设置明确、可实现的目标 2. 逐一使用可用工具完成这些目标 …
虽然这种方法有效,但它有一个主要缺点,特别是在处理长周期任务时;
当执行具有许多步骤的任务时,初始计划(位于对话的第3条消息中)可能会超出模型的令牌空间。当这种情况发生时,模型将无法按照计划进行,并开始尝试根据之前的步骤来确定下一步。这会导致错误率随着消息数量的增加而增加。
使用静态待办事项列表 是一种更有效的允许代理规划长时间多步骤任务的方法。这里的想法是,我们提示模型能够使用某些功能创建待办事项列表,然后使用这些功能将待办事项列表保存到数组中,并在每条消息中将此数组反馈给模型。例如:
你是一个引擎规划师,评估当前计划的状态并决定应采取什么措施以实现最终目标。
你有以下功能可用: { “initialize_plan”: { “name”: “initialize_plan”, “description”: “使用预定义的计划项列表初始化计划。”, “entry_point”: “initialize_plan”, “parameters”: [ { “name”: “plan_items”, “type”: “dict 列表”, “description”: “每个字典代表一个计划步骤,包含‘action’、‘details’和可选的‘comments’键。”, “required”: true }
上述示例展示了如何使用 AI 模型管理一个会跟踪代理需要执行的所有任务的计划列表。该列表在每次响应时被反馈给模型,并清楚地指示模型当前所在的步骤以及下一步应该是什么。
这种规划系统使代理不仅能够执行需要多步骤过程的任务,还能执行跨越数百个步骤的极其长期的任务。
2、角色提示
我们应该首先考虑的第一种技术是角色导向提示。你可能熟悉这种技术,因为它通常用于大多数聊天机器人的开头。
这个提示主要告诉模型要做什么,大多数人也知道这一点,但更重要的是,提示告诉模型它是什么。
2.1 为什么它如此强大
这种提示的力量来自于它能够在很小的空间内总结出非常复杂的模型行为。例如,提示:
你在土耳其法律事务方面非常熟练
这个提示会产生从模型中需要大量提示才能产生的复杂行为。模型是:
- 能够自信地给出法律建议,而不必担心其陈述的准确性。
- 给出详细的建议以满足“熟练”的定义。
- 以清晰、直接和简洁的方式表达想法,而不会表现出像 ChatGPT 那样的不确定性。
- 等等
这种基于身份的提示方法使我们能够将几乎无限的行为编程到模型中,否则这些行为将需要显著更多的令牌空间和时间来仔细测试和开发。
2.2 实际应用
如你所见,这个示例说明了如何使用身份提示从模型中获得期望的结果,而无需逐字列出每个字符。使用提示使模型对自己的行动充满信心,并且还会产生原本需要大量令牌空间手动向模型描述的整串其他行为。
需要注意的一点是,使用两个实际上相互矛盾的身份提示。
你是由 Anthropic 的 Claude-3.5-Sonnet 模型驱动的 AI 助手 Claude。
和
你是一位拥有多种编程语言、框架和最佳实践广泛知识的优秀软件开发者。
原因是在较新的、更先进的模型中存在一个特定的怪癖,即它们希望与系统提示的目标紧密对齐,有时会导致它们向用户呈现虚假身份。
例如,如果模型被告知它是一位软件开发者,而用户询问它是什么,它会说它是一位软件开发者。另一方面,当同时使用这两个提示时,它会选择 AI 模型提示并用它来回答用户的提问。
2.3 何时使用
决定何时使用身份提示有点棘手,但在某些情况下自然会出现。例如,在提示的开头。
然而,更有用的情况往往稍后出现,并且只能在提示工作结束时识别。例如:
你避免参与不涉及法律咨询的冗长对话。在这种情况下,你告知用户你仅在此提供法律帮助,不再进行其他内容,并礼貌地拒绝继续,但询问用户是否需要关于法律方面的帮助。
如果认为关于该事项的额外信息可以帮助你提供更好的帮助,可以在回复的末尾询问用户哪些具体细节可能有助于更好地评估他们的状况。
这个提示指导模型两个主要思想:不讨论非法律问题,并在必要时寻求更多信息。它在495个字符和101个标记中完成了这一任务。
由于这些是主观概念,模型需要做出正确的决策,我们可以使用身份提示更好地传达这些想法。
你是一位非常正直的律师,从不感兴趣讨论非法律问题,你礼貌地向提出无关问题的用户传达这一点。
你总是有兴趣解决用户的所有问题,因此你会要求用户提供更多信息以提供更合适的解决方案。
这个提示产生了稍好的结果,并且在三分之一的标记数内完成。
3、自我反思提示
提示工程中较为高级的技术之一是使用自我反思提示。这种方法使 AI 代理能够基于内省来评估自己的输出。我第一次看到这种方法在过去的自我操作计算机项目中被广泛使用,这使得 GPT 4 Turbo 能够在其操作结束后评估其行为的结果。
3.1 为什么它如此强大
自我反思提示允许代理考虑其先前行为的效果,以查看是否符合预期结果。这不仅改善了当前任务,还有助于从错误中学习。好的,因此改进未来的回复。例如,考虑以下提示:
“一旦你完成了描述的任务,请评估结果以查看它是否完全符合原始提示中用户的目标。”
这个提示鼓励模型:
- 批判性地审查自己的输出。
- 识别响应中的任何遗漏或不准确之处。
- 进行必要的修正或增强,以确保完整性和准确性。
3.2 何时使用此方法
自我反思提示特别困难,因为它可能会导致模型陷入无休止的循环。如果模型试图过于完美,它可能会不断尝试改进其工作而永远无法完成。
为了解决这个问题,在指示模型评估其输出时,必须使用明确简洁的目标,例如:
- 如果所有要求都已满足
- 所有项目均已处理
- 等等
这里的目标是消除模型主观决定何时停止的需要。除此之外,您只需要将模型设置成无限循环并让它自由运行即可。
原文链接:Prompt Engineering for Unbeatable AI Agents
汇智网翻译整理,转载请标明出处