掌握 LLM 提示词的艺术

像 GPT-4 和 Claude 这样的大型语言模型 (LLM) 拥有非凡的能力。然而,要释放它们的全部潜力,需要通过精心设计的提示词 (prompts) 进行有效沟通。本指南深入探讨了提示工程 (prompt engineering) 的艺术,提供了一个从基本原则到高级技巧的分步方法,以驾驭 LLM 的真正力量。

第一步:选择最佳模型

  • 最新且最强: 像 GPT-4 Turbo 这样的较新模型相比 GPT-3.5 Turbo 等前代产品提供了显著优势,包括更流畅的自然语言理解能力。对于较简单的任务,通过大量的提示工程来弥补模型能力的必要性可能会降低。

  • 基准测试: 利用 LLM 排行榜 和基准测试结果等资源来比较模型,并找出最适合你特定需求的模型。

image

示例:

  • 对于细致入微的语言翻译,GPT-4 Turbo 的上下文理解能力可能优于旧模型。
  • 对于既需要能力又需要速度的任务,Llama-3-70b 开源模型是一个绝佳的选择。

第二步:建立清晰的沟通

清晰度和具体性

  • 明确的指令: 将 LLM 视为通过需要清晰指导的合作者。明确定义任务、期望的结果、格式、风格和输出长度,避免歧义。

  • 上下文背景: 提供相关的背景信息和语境,以引导 LLM 做出期望的回应,同时考虑目标受众和目的。

  • 关注点分离: 使用 ###""" 将指令与上下文内容清晰地分隔开。

  • 以示例为向导: 用精选的示例来演示期望的输出格式和风格。

  • 线索提示: 使用短语如 “Key points:"(关键点:)、“Summary:"(摘要:)或 “Code:"(代码:)来指示期望的输出格式。

示例:

  • 不要只说 “写一篇博客文章”,而应指定 “写一篇关于可再生能源影响的 500 字博客文章,目标受众是行业专业人士。”
  • 对于诗歌生成任务,你可以指定期望的基调、韵律和主题。

少样本学习 (Few-Shot Learning)

提供几个展示了期望输出格式和风格的示例,以减少歧义并设定清晰的预期。

示例:

  • 提示: 将这些句子翻译成西班牙语:

    • “The cat sat on the mat.” - “El gato se sentó en la alfombra.”
    • “The dog barked at the mailman.” - “El perro ladró al cartero.”
    • “The children played in the park.”
  • 期望输出: “Los niños jugaron en el parque.”

  • 提示: 以风趣迷人的风格撰写产品描述:

    • 产品: 降噪耳机
    • 描述: “带上这款降噪耳机,让世界静音,迷失在你自己的声景中。这是逃离日常琐事或专注于工作的完美之选。”
    • 产品: 旅行背包
    • 描述: “这款旅行背包是你终极的冒险伴侣。凭借其宽敞的隔层和耐用的设计,它已准备好与你一起探索世界。”
    • 产品: 智能手表
    • 描述:
  • 期望输出: “这就不仅仅是一块计时的表;它是你的私人助理、健身追踪器和通知中心,所有这些都包裹在一个时尚的设计中。”

第三步:引导 LLM 的思维过程

思维链 (Chain-of-Thought, CoT) 提示

对于复杂的推理任务,引导 LLM 一步步地完成思维过程,鼓励它分解问题并生成导致答案的逻辑推理步骤序列。

示例:

  • 问题: 约翰有 5 个苹果,给了玛丽 2 个,然后又买了 5 个。他现在有多少个苹果?

  • CoT 提示: “约翰开始有 5 个苹果。给了玛丽 2 个后,他还剩 3 个。又买了 5 个,让他有 3 + 5 = 8 个苹果。”

  • 问题: 谁是 2000 年悉尼奥运会上获得奖牌最多的个人运动员?要在你的回答中采取循序渐进的方法,在分享以下格式的最终答案之前引用来源并给出推理:答案是:<名字>

  • CoT 提示:

步骤 1:确定悉尼奥运会的年份。悉尼奥运会于 2000 年举行。
  
步骤 2:查找在 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单。
  
根据奥运会官方网站,有几位个人运动员在 2000 年悉尼奥运会上赢得了多枚奖牌。一些著名的名字包括:
• 伊恩·索普 (Ian Thorpe) (澳大利亚) - 3 金, 2 银, 0 铜
• 彼得·范·登·霍根班德 (Pieter van den Hoogenband) (荷兰) - 2 金, 0 银, 2 铜
• 伦尼·克雷泽尔堡 (Lenny Krayzelburg) (美国) - 3 金, 0 银, 0 铜
• 英格·德·布鲁因 (Inge de Bruijn) (荷兰) - 3 金, 1 银, 0 铜
  
步骤 3:确定奖牌最多的运动员。查看了 2000 年悉尼奥运会上获得多枚奖牌的个人运动员名单后,我们可以看到奖牌最多的运动员是来自澳大利亚的伊恩·索普,他总共获得了 5 枚奖牌(3 金和 2 银)。
  
因此,答案是:伊恩·索普。

自我一致性 (Self-Consistency)

生成多个输出并选择最一致或最频繁的响应,以减轻偏差并提高可靠性。

示例:

  • 当寻求历史事实时,生成多个解释并根据共识选择最频繁或看似准确的一个。
  • 同样,对于像故事生成这样的创造性任务,生成多个草稿并选择最引人入胜或连贯的叙述可能是有益的。

提示:

问:小树林里有 15 棵树。果园工人今天将在小树林里种树。等他们做完后,
将会有 21 棵树。果园工人今天种了多少棵树?
答:我们从 15 棵树开始。后来我们有 21 棵树。差值必定是他们种植的树的数量。
所以,他们一定种了 21 - 15 = 6 棵树。答案是 6。

问:如果停车场有 3 辆车,又来了 2 辆车,停车场里有多少辆车?
答:停车场里已经有 3 辆车了。又来了 2 辆。现在有 3 + 2 = 5 辆车。答案是 5。

问:利亚有 32 块巧克力,她姐姐有 42 块。如果她们吃了 35 块,她们总共还剩多少块?
答:利亚有 32 块巧克力,利亚的姐姐有 42 块。这意味着最初有 32 + 42 = 74
块巧克力。已经吃了 35 块。所以她们总共还有 74 - 35 = 39 块巧克力。答案是 39。

问:杰森有 20 根棒棒糖。他给了丹尼一些棒棒糖。现在杰森有 12 根棒棒糖。杰森给了丹尼多少根棒棒糖?
答:杰森有 20 根棒棒糖。因为他现在只有 12 根,他一定把剩下的给了丹尼。他给丹尼的棒棒糖数量一定是 20 - 12 = 8 根。答案是 8。

问:肖恩有五个玩具。圣诞节时,他从父母那里各得到了两个玩具。他现在有多少个玩具?
答:他有 5 个玩具。他从妈妈那里得到了 2 个,所以之后他有 5 + 2 = 7 个玩具。然后他又从爸爸那里得到了 2 个,所以总共他有 7 + 2 = 9 个玩具。答案是 9。

问:服务器机房有九台电脑。从周一到周四,每天安装五台以上的电脑。现在服务器机房有多少台电脑?
答:从周一到周四有 4 天。每天增加 5 台电脑。这意味着总共增加了 4 * 5 = 20 台电脑。开始时有 9 台电脑,所以现在有 9 + 20 = 29 台电脑。
答案是 29。

问:迈克尔有 58 个高尔夫球。周二,他丢了 23 个高尔夫球。周三,他又丢了 2 个。周三结束时他有多少个高尔夫球?
答:迈克尔最初有 58 个球。他在周二丢了 23 个,所以之后他有 58 - 23 = 35 个球。周三他又丢了 2 个,所以现在他有 35 - 2 = 33 个球。答案是 33。

问:奥利维亚有 23 美元。她买了五个百吉饼,每个 3 美元。她还剩多少钱?
答:她买了 5 个百吉饼,每个 3 美元。这意味着她花了 15 美元。她还剩 8 美元。

问:我 6 岁时,我妹妹是我年龄的一半。现在我 70 岁了,我妹妹多大?
答:

输出 1:

我 6 岁时,我妹妹是我年龄的一半,所以她是 3 岁。现在我 70 岁了,所以她是 70 - 3 = 67 岁。答案是 67。

输出 2:

当叙述者 6 岁时,他的妹妹是他年龄的一半,也就是 3 岁。现在叙述者 70 岁了,他的妹妹应该是 70 - 3 = 67 岁。答案是 67。

输出 3:

我 6 岁时,我妹妹是我年龄的一半,所以她是 3 岁。现在我 70 岁了,所以她是 70/2 = 35 岁。答案是 35。

任务分解

使用提示链 (prompt chaining) 等技术将复杂的任务分解为更小、更易于管理的子任务。

示例:

  • 要解决一个复杂的数学问题,首先让 LLM 识别问题类型,然后逐步解决每个部分,最后组合各部分得出解决方案。

  • 代码生成的提示链:

    1. 提示 1: “编写一个 Python 函数,该函数接收一个数字列表作为输入。”
    2. 提示 2(基于提示 1 的输出): “修改该函数以计算列表中所有数字的总和。”
    3. 提示 3(基于提示 2 的输出): “向该函数添加功能,以返回列表中数字的平均值。”

第四步:增强能力和控制

系统提示 (System Prompt) 和角色

  • 系统提示: 定义 LLM 的行为、角色、个性和限制。

  • 角色分配: 分配特定角色以聚焦回答并定制语言风格。

示例:

  • “你是一位友好的营养师,正在为一位麸质过敏的人提供均衡的饮食计划。”
  • “你是一位经验丰富的旅行向导,正在创建一个为期一周的探索罗马历史古迹的行程。”

检索增强 (RAG)

  • RAG: 将 LLM 与外部知识源(如数据库或 API)结合,以提高准确性和获取最新信息。

示例:

  • “使用来自 XYZ API 的当前股市数据,分析并预测下周科技股的趋势。”
  • “从科学数据库访问有关气候变化的最新研究论文,并总结主要发现和提出的解决方案。”

温度 (Temperature) 和 Top_p

  • Temperature: 控制输出的随机性和创造性。

  • Top_p: 调整下一个 token 的概率分布,以影响生成文本的多样性。

示例:

  • 对于创意写作,较高的温度鼓励更多样化和意想不到的情节转折。对于事实报告,较低的温度确保信息更加直接和一致。
  • 对于生成不同的创意文本格式,如诗歌、剧本或乐曲,调整温度和 top_p 可以导致所选格式内的风格和结构多样化。

参考资料

https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/advanced-prompt-engineering
https://platform.openai.com/docs/guides/prompt-engineering
https://docs.anthropic.com/claude/docs/prompt-engineering
https://www.promptingguide.ai/