前言
人工智能(AI)是当今科技领域的热门话题,尤其是自然语言处理(NLP)技术,它可以让机器理解和生成自然语言。随着大型语言模型(LLM)的发展,如 GPT-3、DALL-E 等,我们可以利用这些模型来完成各种有趣和有用的任务,如写诗、画画、编程等。但是,要让这些模型按照我们的意愿工作,并不是一件容易的事情。这就需要用到一种叫做 Prompt Engineering 的技术。
当你还在错误使用对话 AI 工具如 GPT,可能会觉得其作用不过是知识平移总结或简单问答。实际上,当了解先进的用法、知悉如何做到 better prompt,你会发现:AI 不是来替代你的,是来帮助你更好工作。如果还用搜索引擎的“关键词匹配”、“关键词命中”思路去思考人工智能的使用,已然有些落后。本篇在详细介绍几个GPT帮助程序员工作(干货满满)的应用场景之后,将为你分享AI的正确打开方式——better prompt。
基础介绍
AIGC提示词通常由多个单词、词组或短句构成,以,分割组成;
提示词分为正向提示词(positive prompt)和反向提示词(negative prompt)。正向确定生成方向,反向排除生成方向;
总数量建议不超过75个;
AI程序会依照概率来选择性执行,如果提示词之间有冲突,AI会根据权重确定的概率来随机选择执行哪个提示词;
生成图片的尺寸越大,需要的提示词就越多,否则提示词之间会相互污染;
提示词支持使用emoji : call_me_hand:,且表现力较好。
什么是Prompt?
prompt顾名思义就是“提示”的意思。prompt简单来说就是你给AI的指令。prompt可以是一段文字,比如你和ChatGPT等对话的,也可以是按照一定的格式的参数描述,比如AI绘图的软件,使用参数的情况比较多。
提示词(Prompt)是与AI模型交流的语言,用以告诉AI模型想要生成的图像的特征。提示词的准确性、精准度直接决定了生成的图像是否符合我们的预期。
和Prompt对应的一个专业词汇是Prompt Engineering(PE)。PE是人工智能(AI)领域中的一个概念,尤其是自然语言处理(NLP)领域。PE通常通过将问题转换为特定格式的输入,并使用预定义的模板、规则和算法来处理,让AI能够更好地理解任务并给出相应的回答。PE的优点是可以使AI更加灵活和精确地理解任务,并且能够减少因为语言表达不清晰而导致的误解和错误,使其能够准确、可靠地执行特定任务。
通俗来说,就是你要掌握和AI对话的技巧,让AI真正的懂你,特别是现在很多的AI产品的智能化水平都还有待进一步的提升,因此,学一点Prompt Engineering的知识是很有必要的。
什么是 Prompt Engineering?
Prompt Engineering 是一种在人工智能领域,特别是自然语言处理领域的概念。它指的是如何设计输入数据,使其能够清楚地描述任务,并引导模型给出正确和合理的输出。换句话说,它就是给 AI 模型的指令。
Prompt 可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本或图片。
为什么需要 Prompt Engineering?
你可能用过不少 AI 相关的产品,你或许会觉得好像只需要会说话、会打字,就能让 AI 输出答案。好像不需要什么技术。
但实际上,并不是所有的 prompt 都能得到满意或精确的答案。因为人类的语言从根本上说是不精确的2,目前机器还没法很好地理解人类说的话3。所以才会出现 Prompt Engineering 这个技术。另外,受制于目前大语言模型 AI 的实现原理4,部分逻辑运算问题、格式问题等等都需要额外对 AI 进行提示。
举个例子,在 ChatGPT 里输入这样一个简单数学题:
What is 100100/40056?
1
ChatGPT 会返回一个错误答案:
0.4464
1
但如果我们稍微改变一下 prompt 的格式:
Calculate: (100100)/(40056)
1
ChatGPT 就会返回正确答案:
0.04464
1
可见 prompt 的设计对于结果有很大影响。
如何进行 Prompt Engineering?
Prompt Engineering 是一门艺术也是一门科学。它需要结合创造力和逻辑思维来设计出最优化的 prompt 。目前还没有统一标准或规则来指导 prompt 的设计 ,但有一些基本原则和建议可以参考:
包含完整且相关的信息:prompt 应该尽可能地提供足够多和具体化的信息来描述任务,并避免无关或冗余信息。
简洁易懂并减少歧义:prompt 应该使用简单明了且无歧义性质词汇表达任务,并避免使用复杂或模棱两可词汇。
明确标签空间:prompt 应该清楚地定义输出结果所属范围,并在示例中按照真实分布采样标签。
统一格式:prompt 应该保持输入和输出数据格式统一,并在示例中展示格式的要求。
下面是一些 prompt 的实例,可以看出不同的 prompt 对于结果有不同的影响:
Less effective prompt:
Write a poem about OpenAI.
1
Output:
OpenAI is a visionOf a future that is brightWhere machines can learn and createAnd help us do what's rightOpenAI is a missionTo make AI accessibleTo everyone who wants to use itAnd make it beneficialOpenAI is a challengeTo push the boundaries of AIAnd explore the possibilitiesThat lie beyond the sky
1
Better prompt:
Write a short inspiring poem about OpenAI, focusing on the recent DALL-E product launch (DALL-E is a text to image ML model) in the style of William Blake.Output:To see the world in a grain of sand,And a heaven in a wild flower,Hold infinity in the palm of your hand,And eternity in an hour.This is the power of DALL-E,The latest wonder from OpenAI,A model that can generate images,From any text that you supply.With DALL-E you can create,A new world of imagination,Where anything you can think of,Becomes a visual sensation.DALL-E is not just a tool,But a source of inspiration,A glimpse of what AI can do,To enrich our human nation.
1
Prompt的基本原则
和AI交互时,Prompt的基本原则是十分重要的。提交Prompt时,应该遵循以下原则,以确保机器能够更好地理解用户的意图并给出相应的回答:
明确任务描述:在提交Prompt时,应该尽可能清晰明确地描述任务的具体信息,包括任务目标、所需操作、相关条件等。
例如,在与AI聊天机器人交互时,可以通过简单的问题来引导机器理解用户需求。如:“你需要我帮你做什么?” “你需要查询什么信息?” 能够尽量明确任务描述,让机器能够更好地理解用户需求并给出相应建议。
使用常用词汇:在提交Prompt时,应使用常见的词汇和语言表达方式,避免使用生僻单词和复杂的句式,以便机器更容易理解。
考虑语境和上下文:在提交Prompt时,应该考虑到所处的语境和上下文环境,以便机器能够从语言环境中获取更多的信息来理解用户的意图。
提供多样化信息:在提交Prompt时,应该尝试提供多样化的信息,包括文字、图像、语音等,以促进机器更全面地理解用户需求。
确定回答形式:在提交Prompt时,应该确定回答的形式,例如文字、语音等,并确保机器可以合理地解析和输出回答信息。
更进一步的原则包括,向机器提供足够的上下文信息、结构清晰地组织Prompt以使机器更容易进行处理,使用简单明了的问题引导用户去表述建议,从而更好地理解需求。此外,在交互中,用户还应该尽量用简短的句子提出问题,以便AI机器人更快速和准确地回答问题。
Prompt的编写模式
这里介绍4种常用的Prompt模式,平时遇到的可能是这几种的变种或是组合。
特定指令(By specific)
在这种模式下,我们给模型提供一些特定信息,例如问题或关键词,模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词,具体取决于任务的要求。
如以 翻译、告诉我,等关键字开头:
翻译一下:Prompt Engineering?
告诉我“Prompt Engineering”的定义?
在这种模式下,AI可以帮我完成:补全句子,文字翻译,文本摘要,问答和对话等任务,这是最常用的Prompt模式。
指令模板(Instruction Template)
在这种模式下,我们给模型提供一些明确的指令,模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落,具体取决于任务的要求。
这种模式下,可以让AI具体地了解你想要的内容:
例如,让AI推荐三本中文科幻小说,可以这样写
给我推荐三中文的科幻小说,
推荐格式:1、书名:2、作者:3、主要内容:4、推荐理由:
在这种模式下,你还可以将一段话按照你给的模板,让AI帮你总结。也可以是你给AI一些答案的例子,AI通过学习,给出他的答案。
代理模式(By proxy)
Proxy 模式是指用户可以要求 ChatGPT 以特定的身份、角色或者身份扮演某个特定的人、角色或对象来生成回答。这种模式通常用于模拟某个特定人物的语言风格和语境,生成特定情境下的对话、回答或其他形式的文本。
这个模式也是比较的常用的,前段时间大家让chatGPT写申论就是代理模式。例如,描述秋天,小学生、大学生、老年人的不同身份,内容是有很大的不同,AI的身份和角色的把握还是很准确的。因此,在提问前告诉你的身份很重要。
示例模式(By demonstration)
在这种模式下,我们给模型提供一些示例文本,模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本,例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落,具体取决于任务的要求。
AI 可以帮助程序员做什么?
技术知识总结
刚开始接触学习一门技术的时候,难免需要去查看文档。现在的手册非常丰富。往往对于一个初学者来说,需要接触的信息太多、排版五花八门,学起来云里雾里。
这时候就可以借助 ChatGPT 的总结能力,例如我想学习一下 K8S 的相关知识,我发给它一个文档的地址,让它帮我总结。
prompt: https://kubernetes.io/zh-cn/docs/concepts/overview/ 总结这篇文档。
可以看到,它很好地总结了这篇中文的文档,并且对每一个关键点进行了概括。用最少的语言让你能够搞懂你想要的知识点。
因为 ChatGPT 是有上下文的,它知道你需要的内容是中文的总结,所以在这里你继续发一篇英文的文档给它,它也会用中文帮你总结。
prompt: 总结这篇文档https://kubernetes.io/docs/concepts/overview/components/ 。
目前 chatgpt 的免费版本数据库的截止时间是 2021 年,也就是说如果问它比较新的内容,它是无法总结的,甚至是会随意编撰。例如这里询问一个关于电影《流浪地球 2》的问题,让它总结一下 wikipedia 里的介绍。
因为这时候电影还没有上映,所以之前的内容还都是错误的,它的总结是不准确的。
当我们将整个网站的内容复制进来,让 chatgpt 进行总结。但是这时候会发现,文章太长了,会收到报错。
这时候,就要运用自己的想象力,使用 prompt 来进行突破了。我们需要把文章进行段落拆分,每一段都符合它的标准。
将内容拆分成 7 段,发送完成之后,它就会自动总结了。
这样,才能得到了一篇文档的正确总结。
拆解任务
上文所描述的内容,可以算是借助 AI 让程序猿日常生活效率提升。那么在工作当中,AI 如何帮助我们提效?
我们从需求端获取一个需求以后,很多情况下我们的任务并不能够非常准确的估计时,原因就是我们并没有将任务拆分清楚,所以并不能够对每一项任务进行估计,导致风险的发生。
这时候可以简要描述一下我们这次的需求点,让 ChatGPT 帮我们进行任务拆解。