谷歌第七版Prompt Engineering—第二部分

Prompt Engineering

Author: Lee Boonstra

从 第二章提示技术的zero shot小节 至 第二章提示技术的Step-back prompting小节

www.kaggle.com/whitepaper-...

github.com/Vocal-map/G...

本书主要是以Google自己的平台为主进行介绍,但将这些操作迁移到其他平台上可存在可行性。

提示技术

大型语言模型(LLMs)通过大量的数据训练来调整自身以更好地遵循指令,从而实现对提示的理解并生成相应的回答。尽管如此,LLMs 并非毫无瑕疵,它们的表现与提示文本的清晰度密切相关------提示越明确,这些模型预测后续可能文本的能力就越强。深入了解 LLMs 的训练方法和工作机理,可以更有效地利用这些技术,帮助你从 LLMs 中获取更加准确和相关的结果。

现在已经了解了什么是提示工程以及它需要什么,接下来将深入探讨一些最重要的提示技术示例。

零样本(zero-shot)

零样本(zero-shot)提示是最简单的提示类型。它仅提供任务的描述和一些供大型语言模型(LLM)进行处理的文本。这种输入可以是任何内容:一个问题、一个故事的开头,或者指令。零样本这个名字代表"无示例"。

本文使用 Vertex AI 中的 Vertex AI Studio来进行测试。在下表中,可以看到一个用于分类电影评论的零样本提示示例。以下使用的表格格式是记录Prompt的一种极佳方式。你的提示可能会经历多次迭代,然后才会最终进入代码库,因此以一种有条理、结构化的方式来跟踪提示工程的结果非常重要。关于开发过程中的其他内容,请参阅本章后面的"最佳实践"部分。

对于此类任务,模型的温度应设置为较低的数值,因为不需要创造,只需要做选择题。

名称 1_1_movie_classification
目标 将电影评论分类为正面、中立或负面。
模型 gemini-pro
温度 0.1
Top-K N/A
Token 限制 5
Top-P 1
提示 将电影评论分类为 POSITIVE、NEUTRAL 或 NEGATIVE。评论:"Her"是一部令人不安的研究,揭示了如果人工智能被允许不受控制地继续发展,人类将走向的方向。我希望有更多像这样的杰作电影。情感:
输出 POSITIVE

当零样本(zero-shot)不起作用时,你可以在提示中提供示范或示例,这就引出了"单样本"(one-shot)和"少样本"(few-shot)提示。

单样本(One-shot) / 少样本(few-shot)

在为人工智能模型创建提示时,提供示例会很有帮助。这些示例可以帮助模型更好地理解你的要求。当你希望引导模型生成特定的输出结构或模式时,示例尤其有用。

单样本提示提供了单一的示例,因此得名"单样本"。其核心思想是,模型可以模仿这个示例,从而更好地完成任务。

而少样本提示则向模型提供多个示例。这种方法展示了模型需要遵循的某种模式。 其理念与单样本类似,但通过提供多个期望的示例,能够进一步提高模型遵循该模式的可能性。

在少样本提示中,所需示例的数量取决于几个因素,包括任务的复杂性、示例的质量以及所使用的模型的能力。一般来说,少样本提示至少需要三到五个示例。然而,对于更复杂的任务,你可能需要使用更多的示例;或者由于模型的输入长度限制,你可能需要减少示例的数量。

下表展示了一个少样本提示的示例。

字段
目标 (Goal) 将比萨订单解析为 JSON
模型 (Model) gemini-pro
温度 (Temperature) 0.1
Top-K N/A
Token限制 (Token Limit) 250
Top-P 默认值)
提示 (Prompt) 见下方
输出 (Output) 见下方
json 复制代码
将客户的比萨订单解析为有效的 JSON:
示例:
我想要一个配有芝士、番茄酱和意大利腊肠的小比萨。
JSON响应:
{
     "size": "小",
     "type": "正常",
     "ingredients": [["芝士", "番茄酱", "意大利腊肠"]]
}

示例:
我可以要一个配有番茄酱、罗勒和马苏里拉的大比萨吗?
JSON响应:
```json
{
     "size": "大",
     "type": "正常",
     "ingredients": [["番茄酱", "罗勒", "马苏里拉"]]
}


现在,我想要一个大的比萨,一半是芝士和马苏里拉。另一半是番茄酱、火腿和菠萝。
JSON响应:
json 复制代码
输出 (Output):
{
     "size": "大",
     "type": "分半",
     "ingredients": [["芝士", "马苏里拉"], ["番茄酱", "火腿", "菠萝"]]
}

当选择提示示例时,应该挑选与目标任务相关的案例。这些示例需要具备多样性、高质量,并且表达清晰。哪怕是一个小错误,也可能让模型产生误解,从而生成不理想的输出。

如果你想让模型生成的输出在各种输入下都表现稳定,那么在示例中加入边缘案例就显得尤为重要。所谓边缘案例,就是那些不太常见或者意料之外的输入,但模型依然需要具备处理它们的能力。

系统提示、上下文提示和角色提示

系统提示、上下文提示和角色提示是引导大型语言模型(LLMs)生成特定文本的几种关键技术,它们各自关注不同的方面:

  • 系统提示设置了语言模型的整体上下文和目的。它定义了模型应该完成任务的"大局观",例如翻译语言、分类评论等。
  • 上下文提示提供了与当前任务或对话相关的具体信息或背景,帮助模型更准确地理解问题的细节,并据此生成更贴切的回答。
  • 角色提示通过为模型分配一个特定的角色或身份,使其能够以符合该角色的知识、风格和行为方式来生成回应,从而让输出更具针对性和一致性。

系统提示、上下文提示和角色提示之间可能存在相当大的重叠。 例如,一个为系统分配角色的提示,也可能包含上下文信息。然而,每种类型的提示都有其略微不同的主要作用:

  • 系统提示:主要定义模型的基本能力和总体目标。
  • 上下文提示:提供即时的、任务特定的信息来指导响应。高度针对当前任务或输入,且是动态的。
  • 角色提示:塑造模型的输出风格和语气。这种方式增加了回应的具体性和个性化,使得生成的内容更加贴合设定的角色特点。

接下来,将深入探讨这三种不同类型的提示。

系统提示(System Prompt)

下表包含了一个系统提示,其中指定了如何进行输出。本案例提高了温度设置以获得更高的创造力水平,同时指定了更高的 token 限制。然而,由于对如何返回输出给出了明确的指令,模型并没有生成多余的文本。

字段
目标 (Goal) 将电影评论分类为正面、中立或负面
模型 (Model) gemini-pro
温度 (Temperature) 1
Token限制 (Token Limit) 1024
Top-K 40
Top-P 0.8
提示 (Prompt) 将电影评论分类为正面、中立或负面。仅返回大写的标签。
示例评论 (Review) "Her"是一部令人不安的研究,揭示了如果人工智能被允许不受控制地继续发展,人类将走向的方向。它是如此令人不安,以至于我无法继续观看。
情感 (Sentiment) NEGATIVE

系统提示可以用来生成符合特定需求的输出。"系统提示"这一名称实际上意味着"为系统赋予一个额外的任务或目标"。例如,你可以通过系统提示要求模型生成与某种编程语言兼容的代码片段,或者指定输出以某种结构化格式(如 JSON)呈现。下表中,展示了如何利用系统提示将输出以 JSON 格式返回,从而满足特定的结构化需求。

目标 将电影评论分类为正面、中立或负面,并以 JSON 格式返回。
模型 gemini-pro
温度 1
token限制 1024
Top-K 40
Top-P 0.8
提示 见下方
输出 见下方
json 复制代码
Prompt
分类电影评论为正面、中立或负面。返回有效的 JSON: 
评论:"Her"是一部令人不安的研究,揭示了如果人工智能被允许不受控制地继续发展,人类将走向的方向。它如此令人不安以至于我无法观看。 

Schema:
MOVIE: 
{ 
    "sentiment": String "POSITIVE" | "NEGATIVE" | "NEUTRAL",
    "name": String
}
MOVIE REVIEWS:
{ 
    "movie_reviews": [MOVIE] 
} 
JSON 响应
json 复制代码
Output
{
    "movie_reviews": [
        { 
            "sentiment": "NEGATIVE", 
            "name": "Her"
        } 
    ] 
}

要求模型直接返回 JSON 对象有几个好处。在实际应用中,不需要再根据结果手动创建 JSON 格式,因为数据本身已经可以按JSON返回,但最关键的是,要求模型以 JSON 格式输出,能够强制它生成结构化的结果。这种方式不仅提高了输出的规范性,还能有效减少幻觉(hallucinations)现象的发生,让模型的回应更加可靠和一致。

系统提示在确保安全性方面也非常有用。只需要在提示中简单加入一条指令,比如:"请确保你的回答保持尊重。"就可以很好地控制输出的质量和态度。

角色提示(Role Prompting)

角色提示是提示工程里的一种技巧,主要是给模型设定一个特定的角色(比如:你是一个猫娘)。这可以帮助模型生成更相关、更具信息量的输出,因为模型可以根据所分配的角色来调整其响应方式。

一旦给模型设定了一个角色,就可以根据这个角色提供具体的任务。比如,如果你让模型充当一名教师,可以要求它制作一个教案,之后再进行评估。如下表所示,其中模型扮演了旅行指南的角色。

目标 担任旅行指南并提供3个旅行建议
模型 gemini-pro
温度 1
令牌限制 1024
Top-K 40
Top-P 0.8
提示 我希望你充当旅行指南。我会告诉你我的位置,然后你会建议我附近的3个地方参观。在某些情况下,我还会告诉你我想访问的地点类型。 我的要求:"我在阿姆斯特丹,只想参观博物馆。" 旅行建议:
输出 1. 国立博物馆(Rijksmuseum):世界知名的博物馆,以荷兰大师的作品闻名,例如伦勃朗的《夜巡》。不要错过展示荷兰艺术和历史的精彩绘画和文物收藏。 2. 梵高博物馆(Van Gogh Museum):沉浸在文森特·梵高迷人的作品中。该博物馆拥有他最大规模的画作和素描收藏,包括《星夜》和《向日葵》。 3. 阿姆斯特丹市立博物馆(Stedelijk Museum Amsterdam):探索来自世界各地的现代和当代艺术。博物馆的收藏包括毕加索、康定斯基和里特维尔德的作品,坐落在一座引人注目的现代建筑中。

上面的例子展示了一个扮演导游角色的示例。如果你将角色更改为地理老师,你会注意到收到的回答会有所不同。

为人工智能模型设定一个角色视角时,实际上是在为其提供一种特定的沟通方式,包括语气、风格以及关注的重点。这种方式就像是一份蓝图,能够显著提升其输出的相关性、质量和有效性。

这里有几个风格选项,可以帮助你定义AI的角色视角,使其输出更符合你的需求: 对抗性、描述性、直接性、正式、幽默、影响力、非正式、激励性、说服性

提示 我希望你充当旅行指南。我会告诉你我的位置,然后你会以幽默的方式建议我附近的3个地方参观。 我的要求:"我在曼哈顿。" 旅行建议:
输出 1. 欣赏帝国大厦的心灵状态:登上帝国大厦令人眩晕的高度,沉浸在曼哈顿天际线的辉煌中。准备好感受像金刚站在大苹果之巅的感觉,只是没有巨大的香蕉。 2. 在现代艺术博物馆(MoMA)变得艺术范儿十足:在现代艺术博物馆释放你内心的艺术爱好者。凝视那些会让你目瞪口呆的大师杰作,并让你质疑你的火柴人画是否有任何艺术价值。 3. 在第五大道购物直到你掉下来:在标志性的第五大道享受一些零售疗法。当你在设计师精品店橱窗购物(或实际购物)时,准备好贴纸冲击,这会让你的钱包哭泣。但嘿,你在曼哈顿,所以你不妨也拥抱这种奢华!

通常系统提示和角色提示可以一起使用

上下文提示(Contextual Prompting)

通过提供上下文提示,可以让与LLM的交互变得更加流畅和高效。这种方式帮助模型更快地理解请求,并生成更加准确和相关的回答。如下表所示,给予足够的背景信息可以让模型更好地把握需求的核心,从而提供更有针对性的建议或内容。这样一来,不仅提高了沟通效率,也使得整个交互体验更加顺畅。

目标 撰写复古游戏的博客文章
模型 gemini-pro
温度 1
Token限制 1024
Top-K 40
Top-P 0.8
提示 背景:你正在为一篇关于80年代街机游戏的博客撰写文章。 建议3个主题,并用几行描述这篇文章应该包含的内容。
输出 1. 街机柜设计的演变 本文将探讨从20世纪70年代早期的木质和金属街机柜到20世纪80年代及以后的流线型、霓虹灯设计的街机柜设计的演变过程。 2. 来自过去的冲击:80年代标志性街机游戏 本文将介绍一些20世纪80年代最具标志性和影响力的街机游戏的历史、影响和遗产,突出它们的创新、流行机制和持久魅力。 3. 像素艺术的兴起与复古复兴 本文将深入探讨作为早期街机游戏定义视觉风格的像素艺术的演变,追溯其根源,探索其技术,并讨论像素艺术在现代游戏和数字艺术中的复兴。

退一步提示(Step-back Prompting)

退一步提示是一种提升大型语言模型(LLM)性能的技术,它通过首先引导模型思考与特定任务相关的宽泛问题,然后利用对这些问题的回答作为进一步具体任务的输入。这种方法促使LLM在处理具体问题之前,先激活相关背景知识和推理能力,从而实现更深入的理解。

通过思考更广泛和基础的原则,大型语言模型(LLM)能够提供更加准确的回答。退一步提示鼓励这些模型进行批判性思考,并以新颖、创造性的方式运用它们的知识。这种方法利用了存储在模型参数中的更多知识,而不仅仅是依赖于直接提示所能调动的信息。

这种方法通过聚焦于一般原则而不是具体细节,有助于减少大型语言模型(LLM)回答中的偏见。为了更好地理解退一步提示是如何改进结果的,下文通过一些例子来进行说明。

传统提示:展示一个直接针对特定任务的问题或请求,观察LLM给出的答案。 退一步提示:首先提出一个与特定任务相关的宽泛问题,获取回答后,再基于这个宽泛问题的回答来细化并提出具体的任务请求。 这种技术的有效性在于它能让LLM先建立起对主题的全面理解,从而为处理具体问题奠定良好的基础。这样的策略有助于产生更加周全、深入的回答。

下表为传统提示内容

目标 为一款第一人称射击游戏的一个关卡编写剧情
模型 gemini-pro
温度 1
令牌限制 1024
Top-K 40
Top-P 0.8
提示 为一款新的、具有挑战性和引人入胜的第一人称射击游戏关卡编写一段剧情。
输出 这个关卡以玩家的队伍在一个密集的城市区域被无情的敌对势力伏击开始。玩家必须在狭窄的小巷和破旧的建筑物中战斗,利用隐身和精准度来消灭敌军并避免被发现。玩家需要充分利用环境优势,设置陷阱、利用掩护,并做出明智的移动以求生存。在此过程中,他们发现了敌人正计划发动毁灭性攻击的情报,玩家必须与时间赛跑,收集证据并将其传回总部,在敌人实施计划之前阻止他们。

这种提问可能会得到各种各样的故事情节创意写作,但结果也可能相当随机和普通。因此,让我们退一步。

下表为退一步提示

Prompt 基于流行的射击类动作游戏,列出5个虚构的关键场景,这些场景有助于在第一人称射击游戏中创造具有挑战性和吸引力的关卡剧情。
Output 1. 废弃军事基地 :一个广阔的、后末日风格的军事综合体,到处是变异士兵和叛逆机器人,非常适合充满挑战的枪械战斗。 2. 赛博朋克城市 :霓虹灯点亮的未来都市环境,拥有高耸的摩天大楼和狭窄的巷道,特色是经过赛博增强的敌人以及黑客机制。 3. 外星飞船 :一艘搁浅在地球上的巨大外星飞船,内部有诡异的走廊、零重力区域以及可能遭遇的外星生物。 4. 僵尸肆虐的小镇 :一个被大批凶猛僵尸占据的荒凉小镇,以激烈的近距离战斗和解谜寻找安全通道为特色。 5. 水下研究设施:一座深海实验室,被水淹没,充满了变异的水生生物,玩家需要依靠隐身和水下探索技能才能生存。

这些主题看起来非常适合一款第一人称射击游戏。现在让我们回到最初的提示,但这一次我们将"退一步"的回答作为上下文包含进去,看看它会返回什么样的结果。

Prompt 背景:第一人称射击游戏的5个引人入胜的主题 : 1. 废弃军事基地 :一个广阔的、后末日的军事综合体,爬满了变异士兵和叛逆机器人,非常适合具有挑战性的火器战斗。 2. 赛博朋克城市 :霓虹灯照亮的未来都市环境,拥有高耸的摩天大楼和密集的小巷,以赛博增强敌人和黑客机制为特色。 3. 外星飞船 :一艘巨大的外星飞船搁浅在地球上,有诡异的走廊、零重力区域和可能遇到的外星生物。 4. 僵尸肆虐的小镇 :一个被成群凶猛僵尸占领的荒凉小镇,以激烈的近距离战斗和解谜寻找安全通道为特点。 5. 水下研究设施 :一个深海实验室被水淹没,充满了变异的水生生物,并需要隐身和水下探索技能才能生存。 选择其中一个主题,并为一款新的、具有挑战性和引人入胜的第一人称射击游戏关卡编写一段剧情。
Output 在一片幽暗深渊的中心,坐落着一座破败的水下研究设施,它见证了人类野心及其灾难性后果。笼罩在黑暗中,伴随着故障机械的嗡鸣声,以及溺亡灵魂的回响,这座设施如今成了恐怖梦魇的温床。玩家是一名装备了先进潜水装备和实验性武器的精英海军陆战队员,任务是深入这片水下恐怖领域。凭借着坚韧和机智,他们必须穿越险恶的走廊,解开神秘的谜题,并与潜伏在深处的可怕海洋怪物正面交锋。从应对深海的巨大压力到智斗狡猾的水下掠食者,每一刻都在考验人类的极限耐力和勇气。

这看起来像是一款有趣的视频游戏!通过使用退一步提示技术,你可以提高你的提示的准确性。这种方法允许你在提出具体任务之前,先让模型理解更广泛的概念或背景信息,从而帮助生成更加贴切和深入的内容。对于创造具有丰富情节和细节的游戏来说,这种技术尤其有用。它确保了即使是创意性很强的任务,也能得到既符合预期又富有深度的输出。

通过使用退一步提示,可以激活LLM内部存储的更多的知识。

To be continued

该部分内容介绍了提示技术章节的前四小节,主要围绕不同类型的提示技术展开。由于篇幅限制,更多详细内容将在后续文章中继续探讨。

相关推荐
量子位7 分钟前
不用等R2了!第三方给新版DeepSeek V3添加深度思考,推理101秒破解7米甘蔗过2米门
人工智能·deepseek
@_猿来如此14 分钟前
Django 实现电影推荐系统:从搭建到功能完善(附源码)
数据库·后端·python·django
言之。16 分钟前
【Go语言】ORM(对象关系映射)库
开发语言·后端·golang
用户2745339106817 分钟前
MCP 生命周期
人工智能
何仙鸟23 分钟前
卷积神经网络实战(1)
人工智能·神经网络·cnn
电鱼智能的电小鱼30 分钟前
EFISH-SBC-RK3588 —— 厘米级定位 × 旗舰算力 × 工业级可靠‌
linux·人工智能·嵌入式硬件·边缘计算
FIT2CLOUD飞致云39 分钟前
干货分享|MaxKB智能问数方案及步骤详解
人工智能·开源
lilye6641 分钟前
精益数据分析(19/126):走出数据误区,拥抱创业愿景
前端·人工智能·数据分析
极客智谷1 小时前
深入理解Java线程池:从原理到实战的完整指南
java·后端