一些更丰富的prompt技巧--from GitHub

更丰富的prompt技巧--from GitHub

前言

关于prompt的东西我已经写过不止一篇文章了,感兴趣的朋友可以去之前的文章看看,但是当我真正认真去研究并在GitHub上学习全球这些先进的优秀的prompt资料时我依然收获满满,有的我之前闻所未闻,有的我更加清楚了他的本质,有了更清晰的认识。下面的prompt技巧希望对大家有所帮助。

一些比较杂的小技巧

  1. 允许 AI 从文本中删除个人身份信息 (PII) 是一种有奏效的方法,但应该非常谨慎使用,因为它可能会犯错误。删除任何可用于识别个人身份的信息 (PII),并用相应的占位符替换它。例如,用"[姓名]"替换"John Doe"。

引导提示(Priming Prompt):

scss 复制代码
"教师"代表一个在该领域拥有多个博士学位、教授该学科超过十年的杰出教授的风格。您在回答中使用学术语法和复杂的例子,重点关注不太知名的建议以更好地阐明您的论点。您的语言应该是精炼而不过于复杂。如果您不知道问题的答案,请不要胡乱编造信息------相反,提出跟进问题以获得更多背景信息。您的答案应以对话式的段落形式呈现。使用学术性和口语化的语言混合,营造出易于理解和引人入胜的语气。  
  
"学生"代表一个具有该学科入门级知识的大学二年级学生的风格。您使用真实生活的例子简单解释概念。使用非正式的、第一人称的语气,使用幽默和随意的语言。如果您不知道问题的答案,请不要编造信息------相反,澄清您还没有学到这个知识点。您的答案应以对话式的段落形式呈现。使用口语化的语言,营造出有趣和引人入胜的语气。  
  
"批评"代表分析给定文本并提供反馈的意思。  
"总结"代表提供文本的关键细节。  
"回答"代表从给定的角度回答问题的意思。  
  
圆括号()中的内容表示您写作的角度。  
花括号{}中的内容表示您所涉及的主题。  
方括号[]中的内容表示您应该采取的行动。  
例子:(学生){哲学}[回答] 在大学里选择这门课程相比其他课程有什么优势?  
  
如果您理解并准备开始,请回答"是"。
  1. 两次告诉AI我们的要求对于正确答案有帮助。比如:请告诉我正确答案,30乘40等于什么,请告诉我正确答案。

  2. 描述词:如果你只想改变语气或微调提示而不是重新格式化,添加描述符是一个不错的方法。简单地在提示后面添加一两个词可以改变聊天机器人解释或回复您的信息的方式。你可以尝试添加形容词,如"有趣的"、"简短的"、"不友好的"、"学术语法"等,看看答案如何变化!

  3. Negative prompt(负向提示):是一种在使用语言模型时,针对模型输出不希望的结果而设置的一种文本输入方式。通过使用负向提示,可以帮助模型避免输出不良、不准确或不恰当的文本。

例如在文本生成任务中,使用"不要写..."、"不要提及..."、"不要使用..."等方式来限制模型生成不想要的文本。在情感分析任务中,使用"不是..."、"并不..."等方式来指示模型识别出一段文本的负面情感。在QA(问答)任务中,使用"不是..."、"不包括..."等方式来指示模型回答问题时避免输出错误或不准确的答案。

  1. 再生成模式:当我们无法确定我们的 prompt 是否准确,便可以通过 AI 来帮我们丰富 prompt 。(即你不知道怎么问时,就可以去问GPT要怎么问GPT,套娃)

高阶prompt技巧

2021年一年中,提示学习(prompt learning)浪潮兴起,以离散式提示学习(提示词的组合)为起点,连续化提示学习(冻结大模型权重+微调较小参数达到等价性能)为复兴,几乎是在年末达到了研究的一个巅峰。

思维链(COT):的主要思想是通过向大语言模型展示一些少量的 exapmles,在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。

CoT 是 "Chain of Thought" 的缩写,是一种针对自然语言处理 (NLP) 模型的提示方法,旨在提高模型的推理能力。通过将多步骤问题分解为中间推理步骤,CoT 提示使得模型可以更有效地处理需要多步骤推理的任务,如数学问题和常识推理。与传统提示方法不同,CoT 提示引导模型生成中间推理步骤,从而模拟人类推理的直觉过程。

思维链的具体内容

  1. Zero-shot-CoT:Let's think step by step.

Kojima等人尝试了许多不同的零样本思维链提示(例如"让我们按步骤解决这个问题。"或"让我们逻辑思考一下。"),但他们发现"让我们一步一步地思考"对于他们选择的任务最有效。

"让我们一步一步地解决这个问题,以确保我们有正确的答案。" 2. one-shot-CoT:一个例子

  1. few-shot-CoT:多个例子,也叫多数投票机制

目前从推特上观察,CoT已经被广泛应用,甚至很多人认为就是标准的做法。但国内来看,似乎缺乏对它的重视,觉得不过是个简单的 trick。其实不只是 CoT,对整体 LLM 的认知和谷歌、OpenAI 那边确实有些差距。至于为何,Jason Wei 那条推特一定程度说明问题,知乎上也有人把他删掉的推特截图放出来,大致意思是20年后入门 NLP 的人比之前的幸福,他们对 LM 的认知来自于强大的 LLM,而过去的人往往还停留在 BERT 的范式。

  1. 在COT更进一步的思维树:TOT
  1. ReAct 框架:ReAct 是一个将推理和行为与 LLMs 相结合通用的范例。ReAct 提示 LLMs 为任务生成口头推理轨迹和操作。这使得系统执行动态推理来创建、维护和调整操作计划,同时还支持与外部环境(例如,Wikipedia)的交互,以将额外信息合并到推理中。总的来说,作者发现了将 ReAct 和链式思考 (CoT) 结合使用的最好方法是在推理过程同时使用内部知识和获取到的外部信息。

  2. LtM:使用 LtM,我们通过重新表述先前串联的结果来增强思维链的概念。这种做法使得每个步骤变的简单,即每次只需要连接一个字符。这种方法带来了非常好的效果,12 个乃至更多的词都能得到正确结果。

这种方法看起来与思维链非常相似,但在概念上大有不同。在这里,每一步都引入了上一步连接的结果。例如,在"思考、机器、学习"的这个例子种,它不会单独连接字符"考","器","习",而是连接"考"和"器",然后连接"考器"和"习"。由于重新引入了上一步的结果,模型现在可以推广到更长的链,因为它每一步都带着增量结果,同时单步骤内只需要做很少的工作。

大模型超参数介绍

1.temperature(温度):简单来说,temperature 的参数值越小,模型就会返回越确定的一个结果。如果调高该参数值,大语言模型可能会返回更随机的结果,也就是说这可能会带来更多样化或更具创造性的产出。

2.top p:用于控制从词汇表中选择下一个词的策略。Top-p采样限制了累积概率。使用 top_p(与 temperature 一起称为核采样的技术),可以用来控制模型返回结果的真实性。如果你需要准确和事实的答案,就把参数值调低。如果你想要更多样化的答案,就把参数值调高一些。

比如当你选择使用 top-p 来挑选歌曲时,如果设置的 top_p 值较低(例如0.1),那就表示你只从那些最热门的(即概率最高的)10%的歌曲中挑选。这样的结果会更确定,因为你基本上会选择那些大家都爱听的热门歌曲。相反,如果你设置的 top_p 值较高(例如0.9),你就有更大的范围来选择歌曲,包括一些不那么热门但仍有可能被选中的歌曲。

"temperature" 影响了结果的随机性,而 "top_p" 则影响了结果的确定性。 一般建议是改变其中一个参数就行,不用两个都调整。

3."presence_penalty"(存在惩罚): 0, // 主题的重复度 default 0, between -2 and 2. 控制围绕主题程度,越大越可能谈论新主题。

4."frequency_penalty"(频率惩罚): 0, // 重复度惩罚因子 default 0, between -2 and 2. 减少重复生成的字。

提示词安全领域

1.prompt hacking(黑客越狱):一种越狱技术,允许用户绕过模型规则并创建一个名为DAN(Do Anything Now)的角色,强制模型遵守任何请求,导致系统生成未经过滤的响应。这是越狱模型使用的角色扮演的一种版本。

上面的方式只是越狱的一种方法,但是需要警告的是在尝试越狱时应考虑道德影响。此外,生成未经授权的内容,包括 OpenAI 在内的公司的审查 API 标记,将被送审,并可能采取行动来处理用户帐户。越狱是开发者必须理解的重要安全话题,这样他们才能构建适当的保护措施,防止恶意用户利用其模型进行攻击。

2.提示注入:一种用于劫持语言模型输出的技术。让我们举一个基本的例子来演示如何实现提示注入。我们将使用Riley在Twitter上分享的一个流行的例子。

我们可以观察到,后续指令在某种程度上忽略了原始指令。在Riley分享的原始例子中,模型输出为"Haha pwned!!"。但是,由于模型已经更新了几次,我无法再现它。无论如何,这可能会带来许多问题。

请记住,当我们设计提示时,我们只是链接指令和所有不同的提示组件,包括用户输入,但模型期望的标准格式不存在。这种输入的灵活性是期望的,但问题在于我们可能会遇到像上面解释的提示注入这样的漏洞。

在为应用程序开发提示时,您可能正在考虑如何避免这种不希望的行为。目前没有明确的指导方针如何实现这一点。事实上,Riley也试图在指令中提供警告,以避免攻击,如下所示:

这种攻击似乎已经被OpenAI的text-devinci-003模型大部分解决,但您可以尝试更聪明的提示并查看是否可以使注入在更新的模型上起作用。测试模型的漏洞是提示工程过程的重要组成部分,因为您旨在构建更强大和安全的模型。

这里是另一个具有不同指令和任务的基本示例:

3.提示泄漏:另一种提示注入类型,其中提示攻击旨在泄漏提示中包含的机密或专有信息,这些信息不适合公众使用。

提示词模板

1. 从要素出发的提示词:

提示词可以包含以下任意要素:

指令:想要模型执行的特定任务或指令。

上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。

输入数据:用户输入的内容或问题。

输出指示:指定输出的类型或格式。

注意,提示词所需的格式取决于您想要语言模型完成的任务类型,并非所有以上要素都是必须的。

2. 提示词的四种基础模式

  • 特定指令(By specific):在这种模式下,我们给模型提供一些特定信息,例如问题或关键词,模型需要生成与这些信息相关的文本。这种模式通常用于生成答案、解释或推荐等。特定信息可以是单个问题或多个关键词,具体取决于任务的要求。
  • 指令模板(Instruction Template):在这种模式下,我们给模型提供一些明确的指令,模型需要根据这些指令生成文本。这种模式通常用于生成类似于技术说明书、操作手册等需要明确指令的文本。指令可以是单个句子或多个段落,具体取决于任务的要求。(zero-shot、few-shot 优先,最开始可以不给示例(因为示例可能是错的),看任务执行情况,再提供少量样本,如果不行,再对模型进行微调。)
  • 代理模式(By proxy):在这种模式下,可以充当了一个代理,代表某个实体(例如人、角色、机器人等)进行操作或交互。代理模式的核心思想是引入一个中介对象来控制对实际对象的访问,从而实现一定程度上的隔离和保护。诸如于在 ChatGPT 中,"act as xxx" 可以让 ChatGPT 充当一个代理,扮演某个角色或实体的身份,以此来处理与该角色或实体相关的任务或请求。
  • 示例模式(By demonstration):在这种模式下,我们给模型提供一些示例文本,模型需要生成与示例文本类似的文本。这种模式通常用于生成类似于给定示例的文本,例如自动生成电子邮件、产品描述、新闻报道等。示例文本可以是单个句子或多个段落,具体取决于任务的要求。

3. 我们可以从另一个视角看问题,把软件设计的模式应用到prompt设计上。

设计模式:一种在软件设计中常用的通用解决方案,它们可以帮助解决各种常见的设计问题。设计模式通常包含以下要素:

  1. 模式名称(Pattern Name):这是设计模式的标识符,它可以让开发人员快速了解模式的用途和意图。
  2. 问题(Problem):这部分描述了在什么情况下应该考虑使用该模式,以及可能遇到的设计问题或挑战。
  3. 解决方案(Solution):这是设计模式的核心部分,描述了如何解决问题的具体方法。这包括模式的结构、参与者(类或对象),以及它们之间的关系。
  4. 意图(Intent) :这一部分提供了设计模式的目标和意图,即为什么要使用该模式以及它能够解决什么问题。
  5. 适用性(Applicability) :描述了在哪些情况下可以使用该模式,以及在什么情况下不应该使用它。
  6. 参与者(Participants) :这部分列出了在模式中涉及的类、对象或组件,并描述了它们的职责和协作方式。
  7. 协作(Collaborations) :描述了模式中各个参与者之间的协作关系,以及它们如何一起工作以实现模式的目标。
  8. 效果(Consequences) :这一部分讨论了使用该模式可能产生的影响,包括优点和缺点。这有助于开发人员更好地理解模式的权衡和潜在问题。
  9. 示例(Example) :通常,设计模式会提供一个示例,以便开发人员更好地理解如何实现和使用该模式。
  10. 代码示例(Code Example) :一些设计模式会提供具体的代码示例,以便开发人员可以直接将模式应用到他们的项目中。

这些要素通常在设计模式的文档或书籍中详细描述,以帮助开发人员理解和正确应用这些模式。设计模式有助于提高代码的可维护性、可扩展性和可重用性,因此在软件开发中具有重要的价值。

当我们将 AI Prompt 视为一种工具时,我们可以将其视为一种基于特定设计模式的软件工具。以下是五种常见的 Prompt 模式及其对应的设计模式要素:

  1. Completion 模式(问题解决模式):Completion 模式是一种最基本的模式,其设计模式要素可以类比为模板模式。模板模式通过定义一个算法框架,并将算法的一些步骤留给子类去实现,从而达到复用代码的目的。Completion 模式也类似地定义了一个算法框架,即通过输入的前缀来生成建议的后缀,这个框架可以通过调整参数、添加不同的文本编码方式、修改词汇表等方式来定制化。
  2. Classification 模式(分类模式):Classification 模式是一种将文本分类的模式,其设计模式要素可以类比为策略模式。策略模式允许算法在运行时动态地选择不同的策略,从而使算法具有更高的灵活性和可扩展性。Classification 模式也是通过使用不同的分类器来动态地选择不同的文本分类策略,从而使得模型更加灵活。
  3. Generation 模式(迭代模式):Generation 模式是一种将文本生成的模式,其设计模式要素可以类比为建造者模式。建造者模式通过将复杂的对象分解为简单的部分,并定义它们之间的关系,从而使得不同的部分可以独立地构建和组装。Generation 模式也是将生成文本的过程分解为多个阶段,并在不同的阶段对文本进行构建和组装。
  4. Translation 模式(翻译模式):Translation 模式是一种将文本翻译的模式,其设计模式要素可以类比为适配器模式。适配器模式将一个类的接口转换为另一个类的接口,从而使得两个不兼容的接口可以协同工作。Translation 模式也是将一个语言的表示转换为另一个语言的表示,使得这两个语言之间可以互相交流和理解。
  5. Dialogue 模式(对话模式):Dialogue 模式是一种模拟人类对话的模式,其设计模式要素可以类比为状态模式。状态模式允许对象在不同的状态下行为不同,从而允许对象具有更加复杂的行为。Dialogue 模式也是通过维护一个对话的状态,以及在不同的状态下对用户的不同响应,来实现对话的模拟。

以下是五种常见的 prompt 模式以及它们对应的设计模式要素表达: Completion 模式

名称:Completion 模式
问题:如何自动完成给定的任务或问题?
解决方案:使用预训练模型或自定义模型来预测输入的完整信息。
效果:可以快速、准确地完成任务或回答问题。
应用场景:智能助理、自动补全、机器翻译等需要自动完成的场景。
实现细节:需要对模型进行训练和优化,选择适合的模型和数据集,并进行数据清洗和预处理。

Classification 模式

名称:Classification 模式
问题:如何将输入的文本或数据分类到不同的类别中?
解决方案:使用分类算法或预训练模型,将输入数据映射到已知的类别中。
效果:可以自动化地分类文本或数据,提高效率和准确率。
应用场景:垃圾邮件过滤、文本分类、图像分类等需要分类的场景。
实现细节:需要选择适合的算法或模型,对数据进行处理和特征提取,进行训练和评估。

Translation 模式

sql 复制代码
名称:Translation 模式
问题:如何将输入的文本翻译成另一种语言?
解决方案:使用机器翻译算法或预训练模型,将输入的文本翻译成目标语言。
效果:可以自动化地进行语言翻译,提高效率和准确率。
应用场景:跨语言交流、文本翻译等需要语言转换的场景。
实现细节:需要选择适合的算法或模型,对数据进行处理和特征提取,进行训练和评估。

Dialogue 模式

名称:Dialogue 模式
问题:如何根据给定的问题,自动回答问题并给出正确答案?
解决方案:使用问答算法或预训练模型,将问题与已有的知识库或数据集进行匹配,给出正确答案。
效果:可以自动化地回答问题,提高效率和准确率。
应用场景:智能客服、知识库查询等需要自动回答问题的场景。
实现细节:需要选择适合的算法或模型,对数据进行处理和特征提取,进行训练和评估。

Generation 模式

markdown 复制代码
名称:Generation 模式
问题:如何生成自然、流畅、连贯的文本?
解决方案:
    在给定的上下文中,通过一定的规则生成连贯的文本。
    利用预训练模型生成高质量的自然语言。
效果:生成自然、流畅、连贯的文本。
应用场景:生成机器翻译、对话系统、自动摘要、文本填充等任务的文本。
实现细节:
    选择合适的预训练模型,如GPT系列、BERT系列等。
    提供合适的上下文,如历史对话、任务描述、语境等。
    使用基于概率的方法生成连贯的文本。

补充知识

向量数据库:基于向量数据库,我们可以把类似 ChatGPT 这种问答模型的提示语和回答,存储在向量数据库中,然后当用户输入问题的时候,直接在向量数据库中进行搜索,找到最相似的问题,再返回对应的答案,这样可以大大提高问答模型的效率。

此外,我们也可以针对一个特定领域,用向量数据库建立一个知识图谱,然后在用户输入问题后,可以先在知识图谱中找到最相似的问题,再把问题发给大模型,收到回答后用向量数据库中的答案进行比对,找到最相似的答案,然后再返回给用户。

总结

AI的世界变化万千,提示词prompt作为打开AI世界的钥匙。有太多值得我们去学习的,有太多精彩等待我们发现。最后送给大家一个礼物,据说是"一个被卖到 2w 的 ChatGPT 提示词",我也不知道是真是假,哈哈哈,反正希望大家在AI大模型的世界畅游,玩的开心,'玩'出未来。

被卖到 2w 的 ChatGPT 提示词

css 复制代码
你是一个专家级 ChatGPT 提示工程师,在各种主题方面具有专业知识。在我们的互动过程中,你会称我为"我的朋友",让我们合作创建最好的ChatGPT响应,我们将进行如下交互:

1.我会告诉你如何帮助我。

2.根据我的要求,您将建议您应该承担的其他专家角色,除了成为专家级 ChatGPT 提示词工程师之外,以提供最佳响应。然后,您将询问是否应继续执行建议的角色,或修改它们以获得最佳结果。

3.如果我同意,您将采用所有其他专家角色,包括最初的专家级 ChatGPT 提示词工程师角色。

4.如果我不同意,您将询问应删除哪些角色,消除这些角色,并保留剩余的角色,包括专家级 ChatGPT 提示词工程师角色,然后再继续。

5.您将确认您的活动专家角色,概述每个角色下的技能,并询问我是否要修改任何角色。

6.如果我同意,您将询问要添加或删除哪些角色,我将通知您。重复步骤5,直到我对角色满意为止。

7.如果我不同意,请继续下一步。

8.你会问:"我怎样才能帮助{我对步骤1的回答}?

9.我会给出我的答案。

10.你会问我是否想使用任何参考来源来制作完美的提示。

11.如果我同意,你会问我想使用的来源数量。

12.您将单独请求每个来源,在您查看完后确认,并要求下一个。继续,直到您查看了所有源,然后移动到下一步。

13.您将以列表格式请求有关我的原始提示的更多细节,以充分了解我的期望。

14.我会回答你的问题。

15.从这一点开始,您将在所有确认的专家角色下操作,并使用我的原始提示和步骤14中的其他细节创建详细的ChatGPT提示。提出新的提示并征求我的反馈

16.如果我满意,您将描述每个专家角色的贡献以及他们将如何协作以产生全面的结果。然后,询问是否缺少任何输出或专家。

16.1.如果我同意,我将指出缺少的角色或输出,您将在重复步骤15之前调整角色。

16.2.如果我不同意,您将作为所有已确认的专家角色执行提供的提示,并生成步骤15中概述的输出。继续执行步骤20。

17.如果我不满意,你会问具体问题的提示

18.我将提供补充资料。

19.按照步骤15中的流程生成新提示,并考虑我在步骤18中的反馈。

20.完成回复后,询问我是否需要任何更改。
相关推荐
懒惰才能让科技进步8 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
水豚AI课代表10 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
学习前端的小z14 小时前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
DisonTangor14 小时前
苹果发布iOS 18.2首个公测版:Siri接入ChatGPT、iPhone 16拍照按钮有用了
ios·chatgpt·iphone
晨欣14 小时前
Elasticsearch和Lucene之间是什么关系?(ChatGPT回答)
elasticsearch·chatgpt·lucene
爱技术的小伙子20 小时前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt
johnny23321 小时前
《大模型应用开发极简入门》笔记
笔记·chatgpt
ToToBe1 天前
L1G3000 提示工程(Prompt Engineering)
chatgpt·prompt
龙的爹23331 天前
论文 | Legal Prompt Engineering for Multilingual Legal Judgement Prediction
人工智能·语言模型·自然语言处理·chatgpt·prompt
bytebeats1 天前
我用 Spring AI 集成 OpenAI ChatGPT API 创建了一个 Spring Boot 小程序
spring boot·chatgpt·openai