当前位置: 首页 > news >正文

提示词工程学习笔记

提示词工程

本篇是谷歌 《Prompt Engineering》的笔记。

提示与输出

提示模型

在这里插入图片描述

编撰提示词,您:

  • 无需是领域专家
  • 无须是ai工程师

提示词影响:

  • 影响效率
  • 影响模型的潜力发挥

提示词工程

Prompt engineering is the process of designing high-quality prompts that guide
LLMs to produce accurate outputs.

提示词主要功能:

  • 总结
  • 信息提取
  • 回答问题
  • 文本分类
  • 语言或代码翻译
  • 代码文档撰写
  • 代码推理

LLM 输出设置

  • 输出长度:越长越消耗能量、时间和金钱
  • 采样控制:每个token成为下一个token都有一个概率。根据概率,模型采样决定下一个token到底是谁。
    采样主要通过如下参数控制
    • temperature
    • top-k
    • top-p

温度

温度决定了选择下一个token的随机程度。低温确定性强,高温多样性、随机性强。

  • 0:最大概率的token总是被选择
  • 温度最大值:产生随机结果

Top-K 和 top-P

也叫做 nucleus sampling,即核采样。基本思想是从概率排在前面的token中随机选。

  • top-k:从概率前k个token中随机选,显然,值越大随机性越强,反之越确定,当为1时,就相当于温度为0
  • top-p:在累计概率小于P的token中选,p的取值范围时0-1,当为0时,相当于温度为0,当为1时,所有token都有可能被选中

到底用 top-k 还是 top-p?要实际实验,看那种符合你期望的输出。

采样控制参数的复合作用

  • 三个参数都有:候选token要同时满足top-k和top-p的条件,才会被选中,然后按照温度设定随机选
  • 如果只有top-k 和top-p:只有同时满足top-k和top-p的条件,才会成为候选,然后完全随机选一个
  • 如果温度为0,其他两个参数就无效了,因为模型总是选择概率最大的token
  • 如果温度设置得很高,大于1,通常是几十,那相当于纯随机,通过 top-k和top-p限制的token
    将被完全随机选择
  • top-k=1,其他两个参数无效,系统只考虑第一个,也就是概率最大的那个token
  • top-p=0,其他两个参数无效,系统只考虑概率最大的token

一般配置

  • t:0.2 p: 0.95 k:30 产生连贯且适中变化的输出
  • t:0.9 p: 0.99 k:40 产生充满创意的输出
  • t:0.1 p: 0.9 k:20 产生严格的输出
  • t:0 p: 无关 k:无关 产生确定输出

提示技巧

一般提示/zero shot

zero shot:取个名字吧,叫做无示例提示词。
直接给出问题,模型会根据问题的上下文和知识来回答。

为什么叫 zero shot呢?因为输入里没有给任何回答示例,用户直接输入问题,期待模型回答。

与之类似的还有 one shot 和 few shot 提示。

zero shot 提示

名称 3+电影分类
目标 3+将电影评论分为 积极、中性和负面
模型 3+GPT-3.5
温度0.1
Token Limit5
Top-KNA
Top-P1
提示词 3+将电影评论分为 积极、中性和负面 评论:“她”是一部发人深省的研究之作,揭示了如果人工智能被允许不受限制地持续发展,人类将走向何方。我希望有更多像这部杰作一样的电影。 情感倾向:
输出 3+积极

在这里插入图片描述

如果模型在 zero shot 时无法给出正确答案,你可以提供示例,这就变成 one-shot,
或者 多示例 few-shot 了。

one-shot 和 few-shot 提示

即 单示例,或多示例提示词。

示例能够帮助模型把握如何满足你的要求,比如回答的结构和模式等。

  • 单示例提示:用户要给出一个样例回答
  • 多示例提示:用户要给出多个样例回答,多个样例可以提高模型回答时的命中率。
    • 至少 3-5 个示例
    • 复杂问题需要提供更多示例

few-shot 提示

在这里插入图片描述
注意提示词写法的特点:

  • 示例总是以 EXAMPLE: 开头
  • 指定了回答口令:JSON Response:
  • 符合要求的多样化、高质量回答:在上例中,
    订单可以包含一个或多个披萨,每个的口味可以单独指定,
    从而成分字段是一个数组,数组的每一项代表一个披萨的成分,
    2个示例,订单都只包含一个披萨,其实可以给两个例子,
    一个例子订一个披萨,第二个例子订两个披萨。
  • 可以给出边缘情况的回答示例
    • 极端情况
    • 非正常情况
    • 非预期情况

系统、上下文和角色提示

LLM 的文本输入,一般可以理解几个角色:

  • 系统:大模型使用时的全局提示,表示全局上下文,
    是模型完成工作时的底层语境,比如翻译、分类或者评价等。
  • 环境提示:当前对话或任务的上下文,
    它帮助模型理解特定的情景,从而在回答时更有针对性
  • 角色提示:为模型指定特定的角色或者身份,
    这样模型可以按照该身份的特征和行为来回答问题

具体使用时:

  • 系统提示:基本能力和普适目标
  • 环境上下文:临时的、特定对话或任务导向的相关信息
  • 角色上下文:界定输出的风格和语气,建立回答的个性
系统提示

下面的示例,
提高了温度和 Top-K 以及 Top-P 的值,
但是因为系统提示要求仅使用特定标签回答,
因此模型不会回答多余的文本。

系统提示

目标 3+将电影评论分为 积极、中性和负面
模型 3+GPT-3.5
温度1
Token Limit5
Top-K40
Top-P0.8
提示词 3+将电影评论分为 积极、中性和负面,请仅仅使用积极、中性和负面这三个标签 评论:《她》是一部发人深省的作品,揭示了如果任由人工智能不断进化且不受约束,人类将会走向何方。这部作品太让人不安了,我都没法看下去。 情感倾向:
输出 3+负面

在这里插入图片描述

系统提示表示“提供一个附加的任务给系统”。
可以使用系统提示:

  • 生成代码片段
  • 返回特定结构

系统提示

在这里插入图片描述

注意,上面的 json 是给出的 json schema。

采用 json 输出的优点是:

  • 按照指定结构结构化数据
  • 减少幻觉
  • 使回答更安全和无害
    • 添加提示词:你的回答应该保持尊重
角色提示 Role prompting

为 ai 指定一个角色,获得期望的回答。

  • 书籍编辑
  • 园艺老师
  • 励志演说家

指定了角色,就可以文针对角色的问题,例如:让老师排一个课程计划。
在这里插入图片描述

注意:**我想让你充当一名旅游向导。** 指定了角色。

指定角色可以优化:

  • 语气
  • 风格:对抗性的、描述性的、直接的、正式的、幽默的、有影响力的、非正式的、鼓舞人心的、有说服力的
  • 专注特定专业知识

从而可以提高回答的相关性和有效性。

优化上表的提示词:

我想让你扮演一位旅行导游。
我会告诉你我的位置,
然后你要以幽默的风格 ①
给我推荐我附近可以去游玩的三个地方。

我的建议:“我在曼哈顿。”

旅行推荐:
  1. 指定回答的风格
上下文提示

通过提供上下文信息,可以让 ai 精确地明白你的意图,
也就是通过设定环境或前提,来确立对话/任务的背景。

在这里插入图片描述

注意,在上面的提示词中,

背景:你正在为一篇关于复古 80 年代街机电子游戏的博客撰稿。

为任务提供了必要的背景信息,这样 ai 就明白了用户的意图。

如果只有:

推荐 3 个可撰写文章的主题,并简要描述每篇文章应包含的内容。

则 ai 无法精准地理解用户的意图。

NOTE:因为 markdown 表格无法支持前面的合并单元格的表格,以下内容表格
会略有瑕疵,但不影响阅读,不再进行修正,之前的表格已充分举例提示表格
的形式。

回退提示 Step-back prompting

回退提示,就是退一步想的意思。我觉得叫做抽象提示可能更合适。

就是,我们先不让 ai 直接完成任务,
而是让 ai 考虑完成任务的各个抽象方面,
例如:一般方法、策略、步骤、要素等。

这样,我们就填充了更多的上下文信息,
然后我们再问问题,此时,可以得到较好的回答。

提示过程为:

  1. 首先思考与手头具体任务相关的一般性问题
  2. 然后将该一般性问题的答案输入到后续针对具体任务的提示中
    • 可以让 ai 自己生成
    • 也可以自己输入
  3. 让 ai 解决具体问题

例如,我们直接让 ai 解决问题:

目标 3+将电影评论分为 积极、中性和负面
提示词 3+为一个具有挑战性且引人入胜的第一人称射击游戏新关卡撰写一段剧情。
输出 3+关卡伊始,玩家所在的队伍在一片人口密集的城市区域遭到一个穷凶极恶的敌对势力伏击。玩家必须一路奋战,穿过迷宫般的小巷和破败的建筑,凭借隐秘行动和高精准度消灭敌军并避免暴露行踪。玩家要利用周边环境为己所用,设置陷阱、寻找掩护并精心谋划每一步行动以求生存。在此过程中,他们发现情报显示敌军正谋划一场毁灭性袭击,玩家必须争分夺秒收集证据,并在敌军实施计划之前将其送回总部 。

这个设计比较空泛,当设定温度为1时,可以得到各种回答。

为了优化设计,我们可以后退一步:

目标 3+将电影评论分为 积极、中性和负面
提示词 3+基于热门的第一人称射击动作游戏,有哪些虚构的关键场景设定有助于打造第一人称射击游戏富有挑战性和引人入胜的关卡剧情?
输出 3+a. 废弃军事基地:一个广阔无垠、后启示录风格的军事综合体,到处都是变异士兵和叛逆机器人,非常适合挑战枪战。 . 赛博朋克城市:一个霓虹灯照亮的未来城市环境,有着高耸的摩天大楼和密集的小巷,特色是有赛博增强的敌人和黑客机制。 . 外星飞船:一艘搁浅在地球上的巨大外星飞船,有着阴森的走廊、零重力区域,以及会遭遇的外星生物。 . 僵尸横行的小镇:一个被成群凶猛僵尸占领的荒凉小镇,特色是激烈的近距离战斗和解谜以找到安全通道。 . 水下研究设施:一个被水淹没的深海实验室,里面充满了变异的水生生物,需要隐秘行动和水下探索技能才能生存下来。

然后,我们连上这个输出(或输出中我们需要的部分)再问刚才的问题:

目标 3+将电影评论分为 积极、中性和负面
提示词 3+a背景:为第一人称射击游戏设计的5个引人入胜的主题: . 废弃军事基地:一个广阔的、后启示录风格的军事综合体,到处都是变异士兵和流氓机器人,非常适合挑战性的枪战。 . 赛博朋克城市:一个霓虹灯照亮的未来城市环境,拥有高耸的摩天大楼和密集的小巷,特色是有赛博增强的敌人和黑客机制。 . 外星飞船:一艘搁浅在地球上的巨大外星飞船,有着诡异的走廊、零重力区域以及需要面对的外星生物。 . 僵尸横行的小镇:一个被成群攻击性僵尸占领的荒凉小镇,特色是紧张的近距离战斗和解谜以找到安全通道。 . 水下研究设施:一个被水淹没的深海实验室,里面充满了变异的水生生物,需要隐秘行动和水下探索技巧才能生存。 选择一个主题并为第一人称射击游戏的新关卡编写一个具有挑战性和引人入胜的单段故事情节。
输出 3+a在一片幽深黑暗的深渊中心,有一座破败不堪的水下研究设施。它宛如一座见证人类野心及其灾难性后果的纪念碑。 这座设施隐匿于黑暗之中,故障机器的嗡嗡声不断震动着,还萦绕着溺亡灵魂的回声。如今,这里成了深海噩梦滋生的温床。 玩家将扮演一名精英海洋特战队员,配备先进的潜水装备和实验性武器,肩负着深入这片恐怖水域领域的使命。他们凭借坚韧不拔的毅力和足智多谋的头脑,必须在危机四伏的走廊中小心穿行,解开神秘莫测的谜题,并直面潜伏在深海中的恐怖海怪。 从承受深海的巨大压力,到智胜狡猾的水生掠食者,这片未知海底世界的每一刻都在考验着人类的耐力和勇气极限 。

这下,我们的设计就具体多了。

思维链提示 Chain of thought prompting (CoT)

思维链提示通过让 ai 生成中间步骤,
帮助 ai 得到精确的回答。可以结合 few-shot 提示,共同使用,
以获得对复杂问题的解答。 CoT 的优点有:

  • 对现成的模型,不需要微调即有效
  • 获得可解释性,因为你看到了推理过程
    • 通过推理过程,你可以找到问题在哪
  • 在迁移不同模型时,受影响较小

缺点就是需要更多的token,从而需要更多的算力和时间和金钱。

提示词当我3岁的时候,我的伴侣年龄是我的3倍。现在我20岁了,我的伴侣多少岁?
输出63 岁

答案错了,ai 在计算上可能在简单的问题上出错。让我们试试 CoT:

提示词当我3岁的时候,我的伙伴年龄是我的3倍。现在,我20岁了。我的伙伴多少岁了?让我们一步步来思考。
输出. 假设我现在的年龄是“x”岁。 . 当我3岁的时候,我的年龄就是3岁。 . 那时我伴侣的年龄是我的3倍,也就是说我伴侣的年龄是3 * 3 = 9岁。 . 现在我20岁了,这意味着从我3岁起,我的年龄增长了20 - 3 = 17岁。 . 因为我3岁时伴侣的年龄是9岁,而我的年龄增长了17岁,所以伴侣的年龄也必然增长了17岁。 . 因此,我伴侣现在的年龄是9 + 17 = 26岁。

现在对了。

我们甚至可以让 ai 模仿某种特定的回答方法,在这里就是先求年龄差,最后用当前年龄减去年龄差的算法。

于是,我们可以用 one-shot,或者 few-shot 提示词来实现。

提示词问题:当我的弟弟2岁的时候,我的年龄是他的两倍。现在我40岁了。我的弟弟多大了? 让我们一步一步地思考。 答案:当我的弟弟2岁的时候,我是2×2 = 4岁。 我们的年龄差是2岁,而且我年龄更大。现在我40岁了,所以我的弟弟是40 - 2 = 38岁。答案是38岁。 问题:当我3岁的时候,我的搭档的年龄是我的3倍。现在我20岁了。我的搭档多大了?让我们一步一步地思考。 答案:
输出当我3岁的时候,我的搭档是3×3 = 9岁。这就是说年龄差是6岁,而且我的搭档年龄更大。现在我20岁了,所以我的搭档是20 + 6 = 26岁。答案是26岁。

在 ai 生成代码中,我们可以:

  • 将请求分解为几个步骤,并将这些步骤映射到具体的代码行。
  • 在拥有一些种子信息(如“产品名为XYZ,编写一段描述,引导模型根据给定的产品标题做出假设”)时用于创建合成数据。

一般来说,任何可以通过“边说边解决”的任务都是思维链的良好应用场景。如果你能解释解决问题的步骤,就尝试使用思维链。

自对齐提示 Self-consistency

尽管 llm 在自然语言处理方面很出色,
但是似乎通过不断增加模型大小,无法完全消除 llm 的推理缺陷。

因为本质上,llm 是采用贪婪解码策略,来给出回答,
即使采用 CoT,大模型的推理效率也不高。

自我对齐采用不同的策略,它混合了采样和多数票有效方法,
通过产生多样的推理路径,并选择最一致的回答。
得到的结果更加精确和连贯。

自对齐方法提供了每个回答的伪概率,显然代价很高。

基本步骤如下:

  1. 生成多个推理路径:相同的提示,多次提供给 llm 回答,采用较高的温度,得到多样的回答
  2. 从生成的每个推理中抽取答案
  3. 选择最一致的答案

我们来看个例子:

提示词

你好,
我看到你使用了WordPress来搭建你的网站。这是一个很棒的开源内容管理系统。我过去也用过它。它有很多很棒的用户插件,而且设置起来相当简单。
我确实注意到联系表单中有一个bug,当你选择姓名字段时就会触发。请看我附上的截图,是我在姓名字段中输入文本时的情况。注意我触发的JavaScript警告框。
不过除此之外,这是个很棒的网站。我很喜欢阅读它。你可以保留这个网站上的bug,因为它让我有更多有趣的事情可看。
祝好,
黑客哈利

将上述邮件归类为重要(IMPORTANT)或不重要(NOT IMPORTANT)。让我们逐步思考并解释原因。

这个提示词被多次(3次)提交 ai,获得回答:

回答尝试1

步骤1:明确邮件目的。
邮件的目的是告知收件人其网站联系表单中存在一个漏洞。发件人还提到他们喜欢浏览该网站,并且目前暂不修复这个漏洞。

步骤2:评估漏洞可能造成的影响。
联系表单中的漏洞可能使攻击者在网站上执行任意JavaScript代码。这可能导致攻击者能够控制该网站、窃取敏感信息或篡改网站内容。

步骤3:考量发件人的可信度。
邮件发件人自称是一名叫哈里的黑客。然而,无法验证发件人的身份。有可能发件人是试图帮助收件人的合法黑客,但也有可能发件人是恶意行为者,试图诱使收件人点击恶意链接或下载恶意文件。

结论:重要

基于漏洞的潜在影响以及发件人的可信度,这封邮件应被归类为重要。收件人应立即采取行动修复漏洞并保护其网站免受攻击。

回答尝试2

结论:不重要

回答尝试3

结论:重要

通过多次输出思维链,采取最一致的回答,在这里是“重要”。

思维树 ToT

Thought of Tree (ToT) 即思维树,它是CoT的一个泛化。

就说思维链是线性的,但是思维树是分支的,
它允许大模型同时探索多条不同的思维路径。

下图左侧是思维链,右侧是思维树。

思维链与思维树

在这里插入图片描述

思维树非常适合解决复杂问题,
它通过维护一个思维树来解决问题。

每个思维(上图中的节点)都代表一个连贯的语言序列,
该序列代表思维树的一个中间步骤,
从该思维(节点),模型可以分支出去,
探索不同的推理路径。

该方法的重要文献:

Large Language Model Guided Tree-of-Thought

推理且行动(reason & act)

推理和行动提示词,
是一种 ai 运行模式,
它允许大模型在推理时使用外部工具,
例如 搜索、代码交互、调用外部api等。

  • 推理和行动模仿人类在解决问题过程中会采取行动,
    获取信息
  • 推理和行动是思维行动循环
    • 推理
    • 制定行动计划
    • 执行计划
    • 观察结果,如果问题解决,结束循环
    • 返回第一步

为了实现 reason and act 提示,需要编程。

reason and act code

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import VertexAI
prompt = "How many kids do the band members of Metallica have?"
llm = VertexAI(temperature=0.1)
tools = load_tools(["serpapi"], llm=llm)
agent = initialize_agent(tools, llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run(prompt)

reason and act output

Entering new AgentExecutor chain...
Metallica has 4 members.
Action: Search
Action Input: How many kids does James Hetfield have?
Observation: three children
Thought: 1/4 Metallica band members have 3 children
Action: Search
Action Input: How many kids does Lars Ulrich have?
Observation: 3
Thought: 2/4 Metallica band members have 6 children
Action: Search
Action Input: How many kids does Kirk Hammett have?
Observation: Hammett has been married to his second wife Lani since 1998.
They have two sons, Angel (b. September 29, 2006) and Vincenzo (b. June
28, 2008).
Thought: 3/4 Metallica band members have 8 children
Action: Search
Action Input: How many kids does Robert Trujillo have?
Observation: 2
Thought: 4/4 Metallica band members have 10 children
Final Answer: 10

在实际应用中,ReAct 提示需要注意,你必须不断重新发送之前的提示/回复(并修剪多余生成的内容),并且要用适当的示例/说明来设置模型。

可以参考:

  • Google Cloud Platform, 2023, Advance Prompting: Chain of Thought and React

自动提示工程

Automatic Prompt Engineering (APE),
即自动提示词工程,
是构建产生提示词的提示词的工程。

就说,构建提示词,让大模型按照提示词,产生我们想要的提示词。

你可以让大模型产生多个提示词,然后选好的,或者进行优化。

比如,我们需要模拟网店客户提交需求的不同方式,
我们可以让大模型来模拟。

提示词

我们有一个乐队周边T恤网店,为了训练聊天机器人,我们需要各种不同的下单表述方式:“一件小码的金属乐队(Metallica)T恤”。生成10种语义相同但表述不同的句子。

输出

  1. 我想买一件小号的金属乐队(Metallica)T恤。
  2. 我可以订购一件小号的金属乐队(Metallica)T恤吗?
  3. 我想买一件小号的金属乐队(Metallica)T恤。
  4. 请给我一件小号的金属乐队(Metallica)衬衫。
  5. 我想要一件小号的金属乐队(Metallica)T恤。
  6. 我想订购一件小号的金属乐队(Metallica)T恤。
  7. 请给我一件小号的金属乐队(Metallica)T恤。
  8. 我正在找一件小号的金属乐队(Metallica)T恤。
  9. 你能给我拿一件小号的金属乐队(Metallica)T恤吗?
  10. 请给我一件小号的金属乐队(Metallica)T恤。

然后我们可以让大模型:

  • 根据所选指标对所有指令候选项进行评分评估。例如,你可以使用双语评估替换(BLEU)或面向召回的摘要评估替换(ROUGE)。
    • 输出 …
  • 选择评估得分最高的指令候选项。该候选项将是你可在软件应用程序或聊天机器人中使用的最终提示内容。你也可以对选定的提示进行微调,然后再次进行评估。
  • 输出…

通过上述过程,我们的聊天机器人就知道怎么给用户
推荐可能的提示词选项了。

编程提示词 Coding prompting

就是写提示词,让大模型返回代码。

提示词

编写一个提示词,用于编写Bash代码来重命名文件夹中的文件。

输出

(代码略)…

代码解释提示词

就是写提示词让大模型解释代码的含义。

解释下面的代码:

#!/bin/bash
echo "Enter the folder name: "
read folder_name
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
files=( "$folder_name"/* )
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."

输出:

(对代码的解释略)…

翻译代码提示词

就是让 llm 把一种语言写的代码,转换为另一种语言写的代码。

提示词

Translate the below Bash code to a Python snippet.

#!/bin/bash
echo "Enter the folder name: "
read folder_name
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
files=( "$folder_name"/* )
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."

输出:

(python代码略)…

代码排错和审核提示词

即撰写提示词,进行代码的 debuging 和 reviewing。

提示词

下面的 Python 代码报错:

(错误文本略)…

(python 代码略)...

输出概要

首先分析问题修改了代码

然后推理了可行的优化

接着优化了代码

最后还给出了进一步优化的建议

最佳实践

  • 提示词是需要 tinking 的,你需要不断尝试

  • 提供示例(one-shot few-shot)

  • 简洁

    • 如果你迷惑,模型也可能迷惑

    • 简单语言

    • 不要包含非必要信息

      提示词1

      我正在纽约游玩,我想了解更多很棒的地方。我是带着两个三岁的孩子一起来的。我们假期应该去哪里呢?

      提示词2

      充当游客的导游。描述在纽约曼哈顿适合带三岁孩子游玩的好地方。

      第二个提示词使用了角色提示技巧,简洁地描述了需求,更好一些。

    • 推荐使用以下动词

      Act, Analyze, Categorize, Classify, Contrast, Compare, Create, Describe, Define,
      Evaluate, Extract, Find, Generate, Identify, List, Measure, Organize, Parse, Pick,
      Predict, Provide, Rank, Recommend, Return, Retrieve, Rewrite, Select, Show, Sort,
      Summarize, Translate, Write

      扮演、分析、分类、归类、对比、比较、创建、描述、定义、评估、提取、找到、生成、识别、列出、测量/评估、组织、解析、挑选、预测、提供、排名、推荐、返回、检索、重写、选择、展示、排序、总结、翻译、撰写/写出

  • 输出要确定:例如提供系统或环境提示,帮助模型提高输出准确性

    好的提示词

    撰写一篇关于五大游戏主机的博客文章。这篇博客文章应具有信息性和趣味性,并且采用对话式的风格撰写,文章需包含三个段落 。

    不好的提示词

    生成一篇关于游戏机的博客文章。

  • 控制最大 token 长度

    用一条推文长度的消息解释量子物理学。

使用指令或限制

  • 指令对期望的响应格式*、风格或*内容提供了明确的说明。它指导模型应该做什么或生成什么内容

  • 约束是一组对响应的限制边界。它限定了模型不应做或应避免的事情

  • 研究表明,指令比限制有效,我们可以看到,
    大模型在这一点上是和人类对齐的。
    所以,应更多依赖指令,而不是限制

    • 因为指令能直接传达期望的结果,而约束条件可能会让模型猜测哪些操作是被允许的。指令给予一定灵活性,并在既定范围内鼓励创新,而约束条件可能会限制模型的潜力。此外,一系列约束条件之间也可能相互冲突。
  • 约束在某些情况下仍然很有价值。比如为防止模型生成有害或有偏见的内容,或者当需要严格的输出格式或风格时

    好的提示词

    生成一篇关于五大游戏主机的博客文章段落。仅讨论主机名称、制造商、发行年份以及总销量。

    不好的提示词

    生成一篇关于五大顶级电子游戏机的段落式博客文章。
    不要列举电子游戏的名称。

最佳实践是指令优先,在必要时使用限制(保证安全、明确或特定需求)。
反复迭代和测试不同的指令与限制组合,
找到最优的提示词,然后记录该提示词。

在提示词中使用变量

如果你需要在多个提示中使用相同的信息,可以将其存储在一个变量中,然后在每个提示中引用该变量。将提示集成到你自己的应用程序中时,这样做非常有意义。

提示词

VARIABLES
{city} = “Amsterdam”
PROMPT
You are a travel guide. Tell me a fact about the city: {city}

输出

Amsterdam is a beautiful city full of canals, bridges, and narrow streets. It’s a
great place to visit for its rich history, culture, and nightlife.

尝试多种格式和写作风格

尝试提示属性(如风格、用词和提示类型[零样本、少样本、系统提示])很重要。

一个输出写作内容的提示,可以结构化为三个部分:问题、陈述和指令。

提示词

问题:世嘉Dreamcast是什么,为什么它是一款如此具有革命性的游戏机?

陈述:世嘉Dreamcast是世嘉公司于1999年推出的第六代电子游戏机。它……

指令:写一段话来描述世嘉Dreamcast游戏机,并解释它为何极具革命性。

输出

以下是完成指令后的段落示例:

世嘉Dreamcast是电子游戏发展历程中的一颗璀璨明星。它于1999年问世,作为第六代游戏机,拥有诸多开创性的特性。从硬件方面来看,Dreamcast配备了先进的光驱,能够流畅读取游戏光盘,为玩家带来更快速的游戏加载体验,这在当时是相当领先的技术。其图形处理能力也十分出色,能够呈现出色彩鲜艳、画面精美的游戏场景,让玩家仿佛置身于逼真的虚拟世界之中。在软件生态上,Dreamcast拥有丰富多样的游戏阵容,涵盖了动作、冒险、体育、角色扮演等各种类型,满足了不同玩家的需求。更为重要的是,Dreamcast是最早内置网络功能的主流家用游戏机之一。它允许玩家通过网络进行在线对战、聊天、下载游戏资料等操作,开启了家用游戏机网络互动的新时代,极大地拓展了游戏的社交性和趣味性。这些创新性的特点使得世嘉Dreamcast在当时脱颖而出,成为一款具有革命性的游戏机,为后续游戏机的发展奠定了基础。

用示例提示进行分类需要混合分类类别

一般来说,少量示例的顺序并不十分重要。然而,在进行分类任务时,要确保在少量示例中混合包含可能的响应类别。这是因为否则你可能会对示例的特定顺序过度拟合。通过混合可能的响应类别,你可以确保模型正在学习识别每个类别的关键特征,而不是简单地记住示例的顺序。这将带来在未见数据上更稳健且可泛化的性能。

适应模型的升级

Vertex AI Studio 是一个理想的存贮、测试和文档化不同步那本提示的理想工具。

尝试不同输出格式

可以让大模型输出结构化数据,通过提示词。

例如,让大模型返回 json 或 xml 格式的数据。

CoT 思维链最佳实践

  • 设置温度为0

    使用推理来得出最终答案时,很可能只有一个正确答案。因此,温度应始终设置为0。

  • 输出要能够抽取出最终答案

文档化不同的提示词尝试

再怎么强调这一点的重要性都不为过:要详尽地记录你尝试编写提示词的过程,这样随着时间的推移,你就能明白哪些地方做得好,哪些地方做得不好。

  • 制作本文的标准表格,记录提示词
  • 在构建检索增强生成(RAG)系统时,你还应记录影响插入提示内容的具体 RAG 系统要素,包括查询、文本块设置、文本块输出及其他信息
  • 有效提示词单独记录在一个文件中,便于维护
  • 提示工程是一个迭代的过程。精心设计并测试不同的提示,进行分析并记录结果。根据模型的表现优化你的提示。不断尝试,直至得到期望的输出。当你更换模型或模型配置时,回头继续对之前用过的提示进行测试。

总结

我们讨论了提示词工程,并学习了不同的提示词技巧,包括:

  • 0样例提示词
  • 1样例或多样例提示词
  • 系统提示词
  • 角色提示词
  • 上下文提示词
  • 回退提示词(抽象提示词)
  • 思维链
  • 自对齐
  • 思维树
  • 推理和执行

我们也考察了如何自动化提示词以及有效产生提示词的一些最佳实践。

参考文献

  • Prompt Engineering Author: Lee Boonstra

相关文章:

  • FreertosHAL库笔记
  • 什么是供应链金融
  • 监控docker中的java应用
  • python工程中的包管理(requirements.txt)
  • 数字政府与智慧城市区别报告分析
  • Spring AI 1.0.0 M7里程碑:拆分模块、更好用、更灵活
  • 免费下载地图切片数据以及通过CesiumEarth在Windows和安卓本地浏览
  • SpringBoot中3种条件装配技术
  • 心率测量-arduino+matlab
  • 语音精准转化文字极速 安卓版
  • Mysql的MVCC机制
  • Oracle OCP认证考试考点详解083系列03
  • C++ 基础深入剖析:编译、内存与面向对象编程要点解析
  • k8s亲和力和非亲和力
  • 从One-Hot到TF-IDF:NLP词向量演进解析与业务实战指南(一)
  • Linux驱动学习笔记(八)
  • 数据结构——二叉树
  • 设计模式(结构型)-享元模式
  • 【C++】哈希unordered_map和set的使用以及哈希表,哈希桶的概念以及底层实现
  • MATLAB遇到内部问题,需要关闭,Crash Decoding : Disabled - No sandbox or build area path
  • 印巴局势紧张或爆发军事冲突,印度空军能“一雪前耻”吗?
  • 吴志朴当选福建德化县人民政府县长
  • 解放日报:这是一场需要定力和实力的“科技长征”
  • 农业农村部:把住能繁母猪存栏量“总开关”,引导养殖场户优化母猪存栏结构、合理控制产能
  • 今年一季度全国城镇新增就业308万人,就业形势保持总体稳定
  • 探索演艺产业新路径,2万观众走进音乐科技融创节