提示工程概述
提示工程(Prompt Engineering)是一门新兴学科,类似于为大语言模型(LLM)设计的'语言游戏'。通过掌握这个游戏的规则,我们可以更有效地引导 LLM 处理问题,理解其能力与局限。有效的提示工程不仅能提升模型处理复杂问题的能力(如数学推理),还能增强其扩展性(如结合专业领域知识和外部工具)。
一、六大提高 Prompt 有效性的策略
这些技巧旨在提供思路,您应随意尝试创造性方案。
策略一:清晰地表达指令
技巧:在查询中包含更多细节以获取更相关的回答
为了获得高度相关的回复,查询需要提供重要的细节或上下文信息,否则模型需要猜测意图。
| 劣质示例 | 优质示例 |
|---|---|
| Excel 中如何相加数字? | 在 Excel 中如何对一行金额自动相加?我想对整个工作表的行进行求和,总和显示在右边一列'总计'中。 |
| 谁是总统? | 2021 年墨西哥总统是谁,选举频率是多久一次? |
| 编写代码计算斐波那契数列。 | 用 TypeScript 编写一个函数来有效地计算斐波那契数列。对代码添加详细注释以解释每个部分的作用及编写方式。 |
| 摘要会议记录。 | 用一段话摘要会议记录。然后用 markdown 列表罗列发言人及每个人的要点。最后,列出会议记录中发言者提出的后续步骤或行动事项 (若有)。 |
技巧:要求模型采用特定的角色
系统消息可用于指定模型在回复时采用的角色。
技巧:使用分隔符清楚地指示输入的不同部分
三引号、XML 标签、标题等分隔符可以帮助标记需不同对待的文本片段。任务越复杂,明确任务细节就越重要。
技巧:指定完成任务所需的步骤
有些任务最好用一系列步骤来表达。明确写出步骤可以让模型更容易遵循。
技巧:提供示例
在所有示例上演示任务的各种变化通常比仅给出说明更高效。这被称为'few-shot'提示。
技巧:指定期望的输出长度
您可以要求模型生成特定目标长度的输出。目标输出长度可以以单词数、句子数、段落数、项目符号数等来指定。但是,指示模型生成特定数量的单词不能高精度实现。模型可以更可靠地生成特定段落数或项目符号数的输出。
策略二:提供参考文本
技巧:指示模型使用提供的参考文本进行回答
如果我们能为模型提供与当前查询相关的可信信息,那么我们可以指示模型使用提供的信息来组成其回答。鉴于 GPT 模型具有有限的上下文窗口,我们需要某种方法根据问题动态查找相关信息并添加到模型输入中。嵌入可用于实现高效的知识检索。
技巧:指示模型使用参考文本中的引文进行回答
如果输入补充了相关知识,则可以轻松要求模型在答案中添加引文,引用提供文档的相关段落。输出中的引文然后可以通过与提供文档的字符串匹配来程序化验证。
策略三:将复杂任务分解为更简单的子任务
技巧:使用意图分类识别与用户查询最相关的指令
对于需要大量独立指令集来处理不同情况的任务,首先对查询进行分类以确定所需指令会很有益。该过程也可以递归应用以将任务分解成一系列阶段。这种方法的优点是每个查询只包含执行任务下一阶段所需的指令,这可以与使用单个查询执行整个任务相比降低错误率。
例如,对于客户服务应用,查询可以划分为以下类别:
- 故障排除
- 账单查询
- 产品咨询
根据客户查询的分类,可以为 GPT 模型提供更具体的指令来处理后续步骤。注意,模型被指示在对话状态发生变化时输出特殊字符串。这使我们可以将系统转化为状态机。
技巧:对需要非常长对话的对话应用,汇总或过滤之前的对话
由于 GPT 模型具有固定的上下文长度,因此将整个对话包含在上下文窗口内的用户与助手之间的对话无法无限期地继续。 一种解决方法是在输入大小达到预定阈值长度时,使用一个查询来总结对话的一部分,并将之前对话的摘要包含在系统消息中。或者,可以在整个对话的过程中异步地在后台总结之前的对话。 另一种解决方案是动态选择与当前查询最相关的之前对话部分。


