设计更智能的提示并提升您的-LLM-输出-来自-AI-工程师工具箱的真实技巧
设计更智能的提示并提升您的 LLM 输出:来自 AI 工程师工具箱的真实技巧
在这篇文章中,我分享了我几乎每天都在使用的五种实用的提示工程技巧,用于构建稳定可靠的、高性能的 AI 工作流程。它们不仅仅是我在阅读中了解到的建议,而是我在工作中针对实际用例测试、改进并依赖的方法。
有些可能看起来反直觉,有些则出奇简单,但它们都在我获得期望的 LLM 结果的专业能力上产生了真正的差异。让我们深入探讨。
小贴士 1 – 让 LLM 自己编写提示
这种第一种技巧可能感觉反直觉,但我经常使用它。与其一开始就试图制作完美的提示,我通常从我对想要的内容的粗略概述开始,然后要求 LLM 根据我提供的额外上下文自己完善理想的提示。这种协同构建策略允许快速生产非常精确和有效的提示。
整个过程通常由三个步骤组成:
-
从一般结构和解释任务及规则开始
-
对提示进行迭代评估/细化以匹配期望结果
-
逐步整合边缘情况或特定需求
一旦 LLM 提出了提示,我就将其运行在几个典型示例上。如果结果不理想,我不会只是手动调整提示。相反,我会要求 LLM 这样做,并具体要求一个通用的纠正,因为 LLM 否则往往会以过于具体的方式修补问题。一旦我获得了 90%以上的理想答案,我通常会在一批输入数据上运行它,以分析需要解决的边缘情况。然后我将问题提交给 LLM,同时提交输入和输出,以迭代调整提示并获得期望的结果。
一个普遍有帮助的好建议是要求 LLM 在提出提示修改之前先提问,以确保它完全理解需求。
那么,为什么这种方法如此有效呢?
a. 它的结构立即变得更好。
尤其对于复杂任务,LLM 有助于以逻辑和操作的方式构建问题空间。它还帮助我澄清自己的思考。我避免陷入语法细节,并专注于解决问题本身。
b. 它减少了矛盾。
因为 LLM 会将任务翻译成自己的“词语”,所以它更有可能检测到歧义或矛盾。当它这样做时,它通常会提出一个更清晰、无冲突的表述,在提出这个表述之前会要求澄清。毕竟,谁比那些打算解释信息的人更能恰当地表达信息呢?
想象一下与人类交流:大部分的误解都源于不同的解释。LLM 有时会发现一些我认为非常明显但并不清晰或矛盾的东西……最后,是它在做这项工作,所以它的解释才是重要的,而不是我的解释。
c. 它具有更好的泛化能力。
有时我很难为任务找到一个清晰、抽象的表述。LLM 在这方面表现得非常出色。它发现了模式,并产生了一个更可扩展、更稳健的通用提示,这是我无法自己产生的。
小贴士 2 – 使用自我评估
这个想法很简单,但又一次,非常强大。目标是迫使 LLM 在输出答案之前对其质量进行自我评估。更具体地说,我要求它对自己在预定义的量表上的答案进行评分,例如,从 1 到 10。如果分数低于某个阈值(通常我将其设置为 9),我会要求它根据任务重试或改进答案。有时我会加入“如果你能做得更好”的概念,以避免陷入无限循环。
在实践中,我发现一个有趣的现象,即 LLM 往往表现得与人类相似:它通常选择最容易的答案而不是最好的答案。毕竟,LLM 是在人类生成数据上训练的,因此旨在复制答案模式。因此,给它一个明确的质量标准可以显著提高最终输出结果。
可以采用类似的方法进行最终质量检查,重点是规则合规性。其思路是要求 LLM 回顾其答案,并在发送响应之前确认是否遵循了特定的规则或所有规则。这有助于提高答案质量,尤其是在有时会跳过某些规则的情况下。然而,根据我的经验,这种方法比要求自我分配质量评分的效果略差。当需要这样做时,这可能意味着你的提示或你的 AI 工作流程需要改进。
小贴士 3 – 使用响应结构加上结合格式和内容的针对性示例
使用例子是提高结果的一个众所周知且有效的方法……只要你不做得太过分。一个精心挑选的例子确实往往比许多指示性语句更有帮助。
另一方面,响应结构有助于精确定义输出应该如何呈现,尤其是在处理技术性或重复性任务时。它避免了意外,并保持了结果的一致性。
然后通过展示如何填充处理后的内容来补充这个结构。这种“结构 + 例子”组合通常效果很好。
然而,例子往往文字较多,使用过多的例子可能会稀释最重要的规则或导致它们被不一致地遵循。它们还会增加标记的数量,这可能会引起副作用。
因此,明智地使用例子:一两个精心挑选的例子,涵盖大多数基本或边缘规则,通常就足够了。添加更多可能不值得。在例子之后添加一个简短的解释,说明为什么它符合要求,特别是如果这并不明显的话,也会有所帮助。我个人很少使用负面例子。
我通常会给出一个或两个正面例子,以及预期输出的通用结构。大多数时候我会选择 XML 标签如<open_tag></close_tag>。为什么?因为它易于解析,可以直接用于信息系统进行后处理。
当结构嵌套时,给出一个例子特别有用,因为它可以使事情更加清晰。
## Here is an example
Expected Output :
<items>
<item>
<sub_item>
<sub_sub_item>
My sub sub item 1 text
</sub_sub_item>
<sub_sub_item>
My sub sub item 2 text
</sub_sub_item>
</sub_item>
<sub_item>
My sub item 2 text
</sub_item>
<sub_item>
My sub item 3 text
</sub_item>
</item>
<item>
<sub_item>
My sub item 1 text
</sub_item>
<sub_item>
<sub_sub_item>
My sub sub item 1 text
</sub_sub_item>
</sub_item>
</item>
</items>
Explanation :
Text of the explanation
小贴士 4 - 将复杂任务分解为简单步骤
这一点可能看起来很明显,但在处理复杂任务时保持答案质量高是至关重要的。想法是将一个大任务分解为几个较小、定义良好的步骤。
就像人脑在需要多任务处理时会感到困难一样,LLM 在任务过于宽泛或同时涉及太多不同目标时往往会产生质量较低的答案。例如,如果我让你依次计算 125 + 47,然后 256 − 24,最后 78 + 25,这应该是可以的(希望如此 😃)。但如果我让你一次性给出三个答案,任务就会变得更加复杂。我倾向于认为 LLM 的行为方式也是一样的。
因此,我更愿意将过程分解为两个或三个更简单的步骤,每个步骤由一个单独的提示处理。
这种方法的主要缺点是它增加了你代码的复杂性,尤其是在从一个步骤传递信息到下一个步骤时。但现代框架如LangChain,我个人非常喜欢并在我需要处理这种情况时使用,使得这种类型的顺序任务管理非常容易实现。
小贴士 5 - 要求 LLM 进行解释
有时,很难理解 LLM 给出意外答案的原因。你可能会开始猜测,但最简单、最可靠的方法可能是要求模型解释其推理过程。
有些人可能会说,LLM 的预测性质不允许 LLM 真正解释其推理,因为它根本不进行推理,但我的经验表明:
1- 大多数情况下,它将有效地概述产生其响应的逻辑解释。
2- 根据这个解释进行提示修改通常可以纠正 LLM 的错误回答。
当然,这并不是证明 LLM 实际上在推理的证据,这不是我的工作来证明这一点,但我可以声明,这个解决方案在实践中对提示优化非常有效。
这种技术在开发、预生产阶段,甚至上线后的前几周都特别有帮助。在许多情况下,预测一个依赖于一个或多个 LLM 调用的过程的所有可能的边缘情况是很困难的。能够理解模型为何产生某个特定答案有助于你设计出最精确的修复方案,这个方案可以解决问题而不会在其他地方产生不希望的结果。
结论
与 LLMs 合作有点像与一个天才实习生合作,他们速度极快且能力出众,但如果没有清楚地告诉他们你期望什么,他们通常会杂乱无章,四处乱闯。要充分发挥实习生的潜力,需要清晰的指令和一些管理经验。对于 LLMs 来说,智能提示和经验至关重要。
我上面分享的五种技术不是“魔术技巧”,而是我日常使用的实用方法,用以超越标准提示技术获得的通用结果,并获得我需要的优质结果。它们始终帮助我把正确的输出变成优秀的输出。无论是与模型共同设计提示,将任务分解成可管理的部分,或者简单地询问 LLM为什么一个响应是这样的,这些策略已经成为我日常工作中打造最佳 AI 工作流程的必备工具。
提示工程不仅仅是编写清晰和有组织的指令。它关乎理解模型如何解释这些指令,并据此设计你的方法。提示工程在某种程度上就像是一种艺术,一种细微、精致和个人风格的艺术,其中没有两个提示设计师会写出完全相同的句子,这导致了在强度和弱点方面的不同结果。毕竟,与 LLMs 相关的一个事实是:你与它们交流得越好,它们为你工作得就越好。

浙公网安备 33010602011771号