——提示技术的完整指南
Art of Asking ChatGPT for High-Quality Answ Engineering Techniques, The – Ibrahim John
本书系统性地介绍了ChatGPT的提问方式,个人觉得,值得一读。
文章目录 [隐藏目录]
非常高兴您阅读我的新书《如何向ChatGPT提问并获得高质量的答案——提示技术的完整指南》。
本书是一本综合性的指南,目的是帮助您理解和利用各种提示技术,以便从ChatGPT中获得高质量的答案。
我们将探索如何用不同的提示技术去完成不同的目的。
ChatGPT 是目前最先进的、能够生成类似人类文本的语言模型。
然而,了解向ChatGPT提问的正确方式,以获得我们所期望的高质量答案,是至关重要的。
这就是本书的目的:无论你是一个普通人、研究员、开发者,或者是仅仅想把ChatGPT当成自己工作的个人助理,这本书都适合你。
书中使用通俗易懂的语言解释,并且辅以实例和提问技巧的公式。
通过这本书,你将学会如何使用提示技巧来控制ChatGPT的输出,让其按照你的需求生成文本。
在本书中,我还提供了一些如何综合利用不同提示技巧,以达到特定目的的例子。
希望这本书能给你丰富的信息,希望你在阅读时,能像我写书时那样开心。
什么是提示工程?
提示工程 是创建提示、要求或指示的过程,用来引导ChatGPT等语言模型的输出。它允许用户控制模型的输出,生成符合他们特定需求的文本。
ChatGPT是一种最先进的语言模型,能够生成类似人类的文本。它建立在transformer 架构上,这使它能够处理大量的数据并生成高质量的文本。
为了从ChatGPT获得最好的结果,了解如何正确使用提示模型是很重要的。
提示允许用户控制模型的输出,生成相关、准确和高质量的文本。
在使用ChatGPT时,了解它的能力和限制是很重要的。
该模型能够生成类似人类的文本,但如果没有适当的引导,它输出的内容,可能不是我们所期望的。
这就是提示工程的用武之地:通过提供清晰而具体的说明,您可以指导模型输出,确保它是相关的。
提示公式是提示的具体格式,它一般由3个要素组成:
任务:对模型生成内容的清晰、简洁的陈述。
说明:模型生成文本时应遵循的指令。
角色:模型在生成文本时应承担的角色。
在本书中,我们将探讨可用于ChatGPT的各种提示工程技巧。我们将讨论不同类型的提示,以及如何使用这些提示来实现你想要的特定目标。
现在,让我们开始探索 “说明提示技术”,以及如何用它来从ChatGPT生成高质量的文本。
说明提示技术是一种指导ChatGPT输出的方法,它为模型提供具体的指令。这种技术在确保输出内容的相关性、和高质量方面,非常有用。
要使用说明提示技术,你需要为模型提供一个清晰简明的任务,和可以遵循的具体指令。
举个例子,假如你要生成客服的回答。首先要提供一个任务,如“生成客户咨询的回复(generate responses to customer inquiries)”,以及说明:回答应该是专业的并提供准确的信息(responses should be professional and provide accurate information)
提示(Prompt)公式:”按照这些指示生成[任务]:[说明]”
举例:
生成客服回复:
生成一份法律文件:
在使用指令提示技术时,重点是:指令应该是清晰、具体的。
这将会确保输出内容具有相关性、和高质量。指令提示技术可以和下一章中将解释的 “角色提示 “和 “种子词提示 “结合起来,提高ChatGPT的输出质量。
角色提示技术(role prompting technique),是通过为模型提供特定角色来引导ChatGPT输出的一种方法。这种技术对于生成针对特定环境或受众的文本很有用。
要使用角色提示技术,您需要为模型提供一个明确而具体的角色。
例如,如果你正在生成客户服务回应,你将提供一个角色,如 “客户服务代表”。
提示公式:”生成[任务]作为一个[角色]”
举例:
生成客户服务回复:
生成一份法律文件:
使用带有指令提示和种子词提示的角色提示技术将增强ChatGPT的输出质量。
下面是一个如何将指令提示、角色提示和种子词提示技术相结合的示例:
在这个例子中,指令提示被用来确保产品描述具有信息性和说服力,角色提示用于确保以营销代表的角度编写描述,种子词提示用于确保描述侧重于智能手机的创新功能。
标准提示是引导ChatGPT输出的一个简单方法,它提供了一个具体的任务让模型完成。
例如,如果你想生成一篇新闻的摘要,你会提供一个任务,如“总结这篇新闻”。
提示公式:”生成[任务]”(Generate a [task])
举例:
生成新闻文章摘要:
生成产品评论:
此外,标准提示可以与其他技术相结合,如角色提示和种子词提示,以增强ChatGPT的输出质量。
下面是一个如何将指令提示、角色提示和种子词提示技术相结合的示例:
在此示例中,使用标准提示技术来确保模型生成产品评论,角色提示技术用于确保评论是从技术专家的角度撰写的,使用种子词提示技术来确保评论集中在笔记本电脑的强大功能上。
零提示、单个提示和小样本提示是用于从ChatGPT中生成文本的技术,只有极少或没有示例可以参考。这些技术通常用于下列情况:当前任务的可用数据有限、任务是全新的、任务定义不明确。
当没有可用于任务的范例时,使用零样本提示技术。
当任务只有一个范例可用时,可以使用单样本提示技术。提供了一个范例给模型,模型根据对该范例的理解生成文本。
当可用于任务的范例数量有限时,使用小样本提示技术。提供了少量范例给模型,模型根据对该范例的理解生成文本。
提示公式:”基于[数量]的例子生成文本(Generate text based on [number] examples)”
举例:
为一个新产品生成产品描述,没有可用的例子。
为这个产品生成产品比较,只有一个范例可用。(Generating a product comparison with one example available)
生成一个产品评论,可用的例子很少。
这些技术可用于:根据模型对任务或所提供范例的理解来生成文本。
“让我们思考这个”提示是一种用于鼓励ChatGPT生成反思性、沉思性文本的技术。这种技术对于写作散文,诗歌或创造性写作等任务很有用。
使用方法:Let’s think about this:主题
举例:
生成一篇反思性文章:
生成一首诗:
此提示要求就特定主题或想法进行对话或讨论。演讲者邀请ChatGPT就手头的主题进行对话。
该模型提供了一个提示,作为对话或文本生成的起点。
然后,该模型使用其训练数据和算法来生成与提示相关的响应。该技术允许ChatGPT基于提供的提示生成上下文适当且连贯的文本。
要在ChatGPT中使用“让我们思考这个”技术,您可以按照以下步骤操作:
1.确定您要讨论的主题或想法。
2.制定一个提示,清楚地说明主题或想法,并开始对话或文本生成。
3.在提示前面加上“让我们思考”或“让我们讨论” ,表明您正在发起对话或讨论。
以下是使用此技术的一些提示示例:
您还可以添加一个开放式问题、语句或一段文本,希望模型继续或构建。
提供提示后,模型将使用其训练数据和算法生成与提示相关的响应,并以连贯的方式继续对话。
这个独特的提示,帮助ChatGPT以不同的视角和角度给出答案,从而产生更具动态性和信息性的段落。
使用提示的步骤很简单,易于遵循,它可以真正改变你的写作。自己试试看
自我一致性提示是一种技术,用于确保ChatGPT的输出与提供的输入一致。这种技术对于诸如事实核查、数据验证或文本生成中的一致性检查等任务很有用。
自我一致性提示的提示公式是输入文本后,说明“请确保以下文本是自我一致的(Please ensure the following text is self-consistent)”。
或者,可以提示模型生成与提供的输入一致的文本。
提示示例及其公式:
示例1:文本生成
示例2:文本摘要
示例3:文本完成(Text Completion)
示例4:
1.事实核查:
2.数据验证:
种子词提示是一种技术,通过为ChatGPT提供特定的种子词或短语,来控制ChatGPT的输出。
种子词提示的提示公式是: “请根据以下种子词生成文本” 的指令后跟着种子词或短语。
举例:
文本生成:
语言翻译:
这种技术允许模型生成与种子词相关的文本并对其进行扩展。
这是一种控制模型生成的文本,与某个主题或上下文相关的方法。
种子词提示可以与角色提示和指令提示相结合,以创建更具体、更有针对性的文本。
通过提供种子词或短语,模型可以生成与该种子词或短语相关的文本,并且通过提供关于期望的输出和角色的信息,模型可以生成与角色或指令一致的特定风格或语气的文本。这允许对生成的文本进行更多的控制,并且有更广泛的应用。
以下是提示示例及其公式:
举例:文本生成
举例:文本完成
举例:文本摘要
知识生成提示:是一种用于从ChatGPT中获取新信息和原始信息的技术。
知识生成提示的提示公式是:“请生成有关X的新的、原始的信息(Please generate new and original information about X)” ,其中X是你感兴趣的主题。
这是一种使用模型里预先存在的知识,来生成新信息或问题回答的技术。
要在ChatGPT中使用这种提示技术,模型应提供问题或主题作为输入,以及指定生成文本的任务或目标的提示。提示应包括期望输出的信息,例如要生成的文本类型,以及其它特定要求或限制。
以下是提示示例及其公式:
举例1:知识生成
举例2:问答
举例3:知识整合
举例4:数据分析:
这种技术使用模型里现有的知识,来整合新信息或连接不同的信息。
它有助于将现有知识与新信息相结合,以更全面地了解特定主题。
如何与ChatGPT一起使用:
应该向这个模型提供新信息和现有知识作为输入,并指定生成文本的任务或目标。提示应包括所需输出的信息,例如要生成的文本类型,以及任何特定要求或限制。
提示示例及其公式:
举例 1:知识整合
举例 2:连接信息片段
举例 3:更新现有知识
这种技术提供了一个模型,其中包含问题、任务以及一组预定义的选项作为潜在答案。
这种技术适用于生成文本,该文本限制于一组特定选项,并可用于问答、文本完成和其他任务。该模型可以生成限于预定义选项的文本。
要使用 ChatGPT 的多项选择提示,应该为模型提供一个问题或任务作为输入,以及一组预定义选项作为潜在答案。提示还应包含期望输出的信息,例如要生成的文本类型以及任何特定要求或约束。
提示示例及其公式:
举例1:问答题
举例:文本完成
举例 3:情感分析
可解释的软提示是一种技术,它可以在提供一定灵活性的同时,控制模型生成的文本。
输入的时候,向模型提供一组控制信息,并且添加期望输出内容的附加信息。 这种技术允许更多可解释和可控制地生成文本。
提示示例及其公式:
举例 1:文本生成:
举例 2:文本完成
举例 3:语言建模
受控生成提示是一种技术,可以在输出文本时,对生成的文本进行高度控制。
这是通过向模型提供一组特定的输入实现的,例如模板、特定词汇或一组约束条件,可以用来指导生成过程。
以下是提示示例及其公式:
举例 1:文本生成:
举例 2:文本补全
举例 3:语言模型
通过向模型提供一组特定的输入,可以用来指导生成过程,受控生成提示使生成的文本更可控和可预测。
问答提示是一种技术,可以使模型生成回答特定问题或任务的文本。
这是通过向模型提供一个问题或任务作为输入,以及可能与问题或任务相关的任何其他信息来实现的。
以下是一些示例和应用公式:
示例1:事实问答
示例2:定义
示例3:信息检索
这对于问答和信息检索等任务非常有用。
摘要提示是一种技术,允许模型在保留给定文本的主要思想和信息的同时,生成一个较短的版本。
这是通过将长文本作为输入提供给模型,并要求其生成该文本的摘要来实现的。
这种技术对于文本摘要和信息压缩等任务非常有用。
如何在ChatGPT中使用它:
应该向模型提供一个较长的文本作为输入,并要求其生成该文本的摘要。
提示还应包括关于所需输出的信息,例如摘要的所需长度,和任何特定要求或限制。
以下是一些示例和应用公式:
示例1:文章摘要
示例2:会议记录
示例3:图书摘要
对话提示是一种技术,可以使模型生成模拟两个或多个实体之间对话的文本。
通过向模型提供一个上下文、一组角色或实体以及它们的背景,并要求模型在它们之间生成对话。
因此,应该为模型提供上下文、一组角色或实体,以及它们的角色和背景。
还应向模型提供有关所需输出的信息,例如对话或对话的类型以及任何特定要求或限制。
以下是一些示例和应用公式:
示例1:对话生成
示例2:故事创作
示例3:聊天机器人开发
因此,这种技术适用于对话生成、故事创作和聊天机器人开发等任务。
对抗性提示是一种技术,可以让模型生成的文本对某些类型的攻击或偏见具有抵抗力。这种技术可以用于训练更强大、更具抵抗力的模型。
要在ChatGPT中使用对抗性提示,需要为模型提供一个设计良好的提示,以使模型难以生成与所需输出一致的文本。
提示还应包括有关所需输出的信息,例如要生成的文本类型和任何特定的要求或约束。
以下是一些示例和应用公式:
示例1:文本分类的对抗性提示
示例2:情感分析的对抗性提示
示例3:语言翻译的对抗性提示
聚类提示是一种技术,允许模型根据某些特征或特点将相似的数据点分组在一起。
这可以通过提供一组数据点,并要求模型根据某些特征或特点将它们分组成簇来实现。
这种技术对于数据分析、机器学习和自然语言处理等任务非常有用。
如何在ChatGPT中使用它:
应该向模型提供一组数据点,并要求根据某些特征或特点将它们分组成簇。
提示还应包括有关所需输出的信息,例如要生成的簇的数量和任何特定要求或约束。
以下是一些示例和应用公式:
示例1:客户评价的聚类
示例2:新闻文章的聚类
示例3:科学论文的聚类
强化学习提示是一种技术,可以让模型从其过去的行动中学习,并随着时间的推移改善其性能。
要在ChatGPT中使用强化学习提示,应该向模型提供一组输入和奖励,并允许其根据所接收的奖励调整其行为。提示还应包括有关所需输出的信息,例如要完成的任务和任何特定要求或约束。
这种技术对于决策制定、游戏和自然语言生成等任务非常有用。
以下是一些示例和应用公式:
示例1:文本生成的强化学习
示例2:语言翻译的强化学习
示例3:问题回答的强化学习
课程学习是一种技术,可以让模型通过先训练简单的任务,并逐渐增加难度来学习复杂的任务。
要在ChatGPT中使用课程学习提示,应该向模型提供一系列逐渐增加难度的任务。提示还应包括有关所需输出的信息,例如要完成的最终任务和任何特定要求或约束。
这种技术对于自然语言处理、图像识别和机器学习等任务非常有用。
以下是一些示例和应用公式:
示例1:文本生成的课程学习
示例2:语言翻译的课程学习
示例3:回答问题的课程学习
情感分析是一种技术,允许模型确定一段文本的情感色彩或态度,例如是否为积极、消极或中立。要使用ChatGPT的情绪分析提示,应向模型提供一段文本,并要求根据其情绪对其进行分类。提示还应包括有关所需输出的信息,例如要检测的情感类型(例如积极、消极或中立)和任何特定的要求或限制。
以下是一些示例和应用公式:
示例1:客户评论的情绪分析
“对以下客户评论进行情感分析[插入评论],并将其分类为积极、消极或中立。”示例2:推文的情绪分析
“对以下推文进行情感分析[插入推文],并将其分类为积极、消极或中立。”示例3:产品评论的情感分析
“对以下产品评论进行情感分析[插入评论],并将其分类为积极、消极或中立。”这种技术对于自然语言处理、客户服务和市场研究等任务非常有用。
命名实体识别(NER)是一种技术,允许模型识别和分类文本中的命名实体,例如人物、组织、地点和日期。
要使用ChatGPT的命名实体识别提示,应该向模型提供一段文本,并要求识别和分类文本中的命名实体。
提示还应包括有关所需输出的信息,例如要识别的命名实体类型(例如人物、组织、地点、日期)以及任何特定的要求或限制。
以下是一些示例和应用公式:
示例1:新闻文章中的命名实体识别
示例2:法律文档中的命名实体识别
示例3:研究论文中的命名实体识别
文本分类是一种技术,允许模型将文本归类为不同的类别。这种技术对于自然语言处理、文本分析和情感分析等任务非常有用。
需要注意的是,文本分类与情感分析不同。情感分析专注于确定文本中表达的情感或情绪。这可能包括确定文本是否表达了积极、消极或中立的情绪。情感分析通常用于客户评论、社交媒体帖子和其他文本形式,其中表达的情感很重要。
要使用ChatGPT的文本分类提示,应向模型提供一段文本,并要求根据预定义的类别或标签对其进行分类。提示还应包括有关所需输出的信息,例如类别或标签的数量以及任何特定的要求或限制。
以下是一些示例和应用公式:
示例1:客户评论的文本分类
“对以下客户评论进行文本分类[插入评论],并根据其内容将其归类为电子产品、服装和家具等不同类别。”示例2:新闻文章的文本分类
“对以下新闻文章进行文本分类[插入文章],并根据其内容将其归类为体育、政治和娱乐等不同类别。”示例3:电子邮件的文本分类
“对以下电子邮件进行文本分类[插入邮件],并根据其内容和发送者将其归类为垃圾邮件、重要邮件或紧急邮件等不同类别。”文本生成提示与本书中提到的其他提示技术相关,如:
这些提示都与生成文本有关,但它们在生成文本的方式和对生成文本的具体要求或限制方面有所不同。在预训练模型或为特定任务训练新模型时,可以使用文本生成提示。
以下是一些示例和应用公式:
示例1:用于故事写作的文本生成
“根据以下提示[插入提示],生成一个至少有1000个单词,包括角色[插入角色]和情节[插入情节]的故事。”Generate a story of at least 1000 words, including characters [insert characters] and a plot [insert plot] based on the following prompt [insert prompt])示例2:用于语言翻译的文本生成
“将以下文本[插入文本]翻译成[插入目标语言],并确保它准确并符合习惯用语。”Translate the following text [insert text] into [insert target language] and make sure that it is accurate and idiomatic)正如我们在本书中探讨的那样,提示工程是从语言模型(如ChatGPT)中获取高质量答案的强大工具。通过精心设计的各种的提示,我们可以引导模型生成符合我们特定需求和要求的文本。
在第2章中,我们看到如何使用说明提示来向模型提供明确和具体的指导。
在第3章中,我们探讨了如何使用角色提示来以特定的语气或风格生成文本。
在第4章中,我们研究了如何使用标准提示作为微调模型性能的起点。
我们还研究了几种高级提示技术,如零提示、单个提示和小样本提示、自一致性、种子词提示、知识生成提示、知识整合提示、多项选择提示、可解释的软提示、受控生成提示、问答提示、摘要提示、对话提示、对抗提示、聚类提示、强化学习提示、课程学习提示、情感分析提示、命名实体识别提示和文本分类提示。
这些技术可以以不同的方式使用,以实现各种不同的结果。随着你继续与ChatGPT和其他语言模型一起工作,值得尝试不同的技术组合,以找到最适合特定用例的方法。
最后,你可以查看我写过的其他主题的书籍。
谢谢你读了整本书。在我其他的书里见。
易卜拉欣·约翰(Ibrahim John)
伊布拉欣·约翰是《从ChatGPT获得高质量答案的艺术:提示工程技术的完整指南》一书的作者。
他出生于坦桑尼亚,是科技和商业领域的知名人物。
他是三家成功公司的创始人:恩尊达科技有限公司(Nzunda Technologies Limited)、金百思公司(Kingbest Companye Limited)和阿格拉萨农业有限公司(Agrasa Agriculture Limited)。
凭借他在领域中的广泛知识和经验,伊布拉欣为提示工程及其在语言建模中的应用带来了独特的视角。他热衷于与他人分享他的知识和专业知识,并致力于帮助人们理解和利用ChatGPT和其他最先进的语言模型的力量。
亚马逊原版购买链接:
https://www.amazon.com/Art-Asking-ChatGPT-High-Quality-Answers-ebook/dp/B0BT26B2SP/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解