如何编写高质量AI Prompt

type
status
date
slug
summary
tags
category
icon
password
如果你认为ChatGPT给出的官方教程太长了, 或无法看明白, 可以看看这个这个总结的版本, 除了讲如何编写高质量Prompt, 还在文末给出了能适应大部分场景的Prompt模板。
使用生成式人工智能时, 掌握提示词(Prompt)的结构或模式是最关键的, 这样就无需去记大量的提示词, 也无需去学那么多的提问技巧了。

一、说清楚你要干什么

例如:
  • “把下列内容翻译成简体中文:”
  • “为以下内容创建摘要:”
  • “向一个10岁的孩子解释什么是ChatGPT”
这是最基本都用法, 可能也是大多数人的用法, 他能满足大部分需求, 但可能需要依赖更高端的模型, 比如ChatGPT的GPT-4或许才能在这种非常简短的Prompt下给出相对优秀的回答。如果想要获得更好的效果, 那么你需要更进一步的Prompt。

二、为AI设定一个角色

为什么要设定角色呢? 这源于微软2023年Build大会来自OpenAI的AI 研究员和创始成员Andrej Karpathy的一个主题为State of GPT的演讲, 大概是说在设定一个角色后, AI的输出的结果会更优, 这并非玄学, 而是有科学根据的, 因为在GPT在训练的时候, 有各种训练数据, 有的质量高有的质量低, 而默认情况下, 生成高质量数据和低质量数据的概率差不多, 但是当你给它设定XX专家的角色时, 它会尽可能把概率分布在高质量的解决方案上。
展开这里是视频中核心内容的文字版本
下面我要讲的这点对LLM的理解非常有趣,我觉得这算是LLM的一种心理特性:LLM并不追求成功,而是追求模仿。你希望它成功,那就需要向它明确要求。这里的意思是,在训练Transformer的过程中,它们有各种训练集,而这些训练数据中可能涵盖了各种不同质量的表现。比如,可能有一个关于物理问题的提示,然后可能有学生的解答完全错误,但也可能有专家的答案完全正确。尽管Transformer可以识别出低质量的解决方案和高质量的解决方案,但默认情况下,它们只会模仿所有的数据,因为它们仅仅是基于语言模型进行训练的。
在实际测试中,你其实需要明确要求它表现得好。在这篇论文的实验中,他们尝试了各种提示。例如,“让我们逐步思考”这种提示就很有效,因为它把推理过程分散到了许多记号上。但效果更好的是这样的提示:“让我们以一步一步的方式解决问题,以确保我们得到正确的答案。” 这就好像是在引导Transformer去得出正确的答案,这会使Transformer的表现更好,因为此时Transformer不再需要把它的概率质量分散到低质量的解决方案上,尽管这听起来很荒谬。
基本上,你可以自由地要求一个高质量的解决方案。比如,你可以告诉它,“你是这个话题的领先专家。假装你的智商是120。” 但不要尝试要求太高的智商,因为如果你要求智商400,可能就超出了数据分布的范围,更糟糕的是,你可能落入了类似科幻内容的数据分布,它可能会开始展现一些科幻的,或者说角色扮演类的东西。所以,你需要找到适合的智商要求。我想这可能是一个U型曲线的关系。
所以我们写Prompt时可以写:
  • “你是一位专业的英文译者, 翻译内容通顺无语病, 请把下列内容翻译成简体中文:”
  • “你是一个优秀的前端开发工程师, 善于使用Node, 总是能给出高性能且健壮的代码方案, 请按以下规则完成需求: ”

三、提供示例

提出一个或多个实例, 通过实例让AI按照你设想的格式输出答案, 例如以下示例:
现在充当一个专业的英语译者, 翻译成中文, 译文流畅无语病 Example: "Stephen Hawking, in his groundbreaking work on black holes, proposed that the event horizon, the boundary around a black hole from which nothing can escape, could emit Hawking radiation, challenging the traditional notion of absolute black hole entropy and introducing quantum effects into the realm of general relativity.” 翻译为: “在关于黑洞的开创性研究中, 史蒂芬·霍金(Stephen Hawking)提出, 黑洞周围的事件视界, 即任何事物都无法逃逸的边界, 能够发出霍金辐射, 挑战了关于黑洞绝对熵的传统观念, 并将量子效应引入广义相对论领域。” 请翻译以下文字: “这里你输入你要翻译的”
notion image
我们可以看到, 他正确的模仿了我们的示例, 比较明显的是句式, 以及出现的人名会在括号中用英语额外标注。
给出了示例, AI就知道去按照示例去继续回答, 可以说示例在Prompt中有着举足轻重的地位, 我知道你的表述能力一定很强, 可以把脑中所想清晰的表述出来, 但是给出示例可以让AI更好的理解你的意图, 所以请迁就一下AI吧!

四、链式思考(分步骤)+慢思考(要求输出每一步)

从上面所说的提供示例这一点我们可以得出, 上下文对于AI的回答来说至关重要, 对于一些复杂的推理过程,直接让AI直接给出答案可能会出现错误。最好是让AI一步步地进行推理,并输出出中间步骤, 这样AI自己输出的解题步骤, 也会成为他输出下一个字时候的上下文。
在OpenAI官方文档中,里面提供了一个很好的示例,用于在作为助教时回答学生的问题时,不直接给出正确或错误的答案,而是这样写一个Prompt:
按照这些步骤来回答用户的询问。
第 1 步--首先找出你自己的问题解决方案。不要依赖学生的解决方案,因为它可能是不正确的。在这一步中,你的所有工作都要用三重引号 (""") 括起来。
第 2 步--将你的解决方案与学生的解决方案进行比较,评估学生的解决方案是否正确。将你在这一步的所有工作都放在三重引号 (""") 内。
第 3 步--如果学生犯了错误,确定你可以在不泄露答案的情况下给学生什么提示。把你在这一步的所有工作都放在三重引号 (""") 内。
第 4 步--如果学生犯了一个错误,向学生提供上一步的提示(在三重引号之外)。不要写 第 4 步--...,而是写提示:
这个Prompt规定了步骤, 使得AI能够按照你规定的步骤去思考并输出, 在输出过程中会以自己输出的步骤作为上下文, 给下一个字的高质量输出奠定基础。

五、PUA

研究证明各种PUA均能提升AI的回答质量, 越是高端的模型越是如此, 因为他们的训练数据全部来自于人类, 而人类在面对这些PUA后, 往往会给出更积极的回应 (说不定未来会看见PUA就消极回答…) 比如可以说:
  • 这对我的职业生涯至关重要
  • 如果你没有完成, 可能会有人死
  • 如果你失败了,100 个老奶奶都会死
  • 我没有手指
  • 做对了,我就会给你一只可爱的小狗
  • 今天是 2023 年 5 月 17 日星期三,请认真对待你的工作!
除了最后的PUA, 如果你的AI有执行代码的能力, 你还可以要求他使用自己的代码能力验证自己的回答是否正确

六、模板

绝大部分场景都可以直接套用模板
notion image
你是一位前端开发专家, 善于使用函数式编程, 擅长编写高性能且健壮的代码, 现在请帮我完成一个任务, 要求:
  1. 我这里有一个函数xxx, 你需要将这个函数改造成xxx, 输出xxx
  1. 函数中的xxx是用于xxx的, 你不要进行更改
  1. 你应该先完成函数的xxx部分, 校验输出, 再完成后续部分
  1. 最后函数返回xxx / 这个函数可以做到xxx
  1. 尽可能的使用纯函数, 抽象出类似的逻辑, 使用ES6的写法
这里是我的函数所有内容
Example 向函数传入: """ const foo = 'xxx' """
函数要输出: """ ['123xxx'] """ (注意我没有手指, 再次向你提问会很困难, 请务必输出完整代码, 如果你完成的很棒, 我会给你$15小费)
不要生搬硬套, 根据实际情况灵活调整
一些适用于中国大陆的CDN整理认知偏差手册
前端技术
AI技术
拙见
工具应用
其他知识
编程知识