Skip to content
On this page

提示词工程

出场人物

🤖 ChatGPT
👨‍💻 郭强

🤖:

提示词工程(Prompt Engineering)是一种在人工智能(AI)和自然语言处理(NLP)领域中使用的技术,旨在通过设计或优化输入文本中的提示词或关键词,来引导生成模型生成更准确、有逻辑、有连贯性的文本输出。

在文本生成任务中,生成模型需要从输入文本中理解上下文,并生成相应的文本输出。提示词工程通过在输入文本中引入合适的提示词,以作为模型的线索或引导,帮助模型更好地生成符合预期的文本。

👨‍💻:

我们常用的ChatGPT背后是一个大语言模型(LLM),除了聊天,其实它所能做的事情还有很多。 LLM通过提示词来生成后续的文本,因此如何构建提示词,就成为了使用LLM的关键所在。

为什么需要提示词

🤖:

提示词(Prompt)在文本生成任务中的作用主要包括以下几点:

  1. 控制生成输出:生成模型在生成文本时可能会受到多个因素的影响,如输入文本的不完整性、模型的自由度过高等。通过合理设计和使用提示词,可以对生成模型的输出进行控制,引导模型生成特定类型的文本,从而满足特定的需求。例如,在生成商品描述时使用提示词"品牌"、"颜色"、"尺寸"等,可以帮助模型生成包含这些关键信息的商品描述,从而控制生成输出的内容和形式。

  2. 提高生成质量:生成模型可能会生成不符合语法、不连贯或不合逻辑的文本。通过引入合适的提示词,可以帮助模型生成更加准确、连贯和有逻辑性的文本输出,从而提高生成质量。例如,使用问题引导型的提示词,可以引导模型生成对问题的合理回答,从而提高生成结果的质量。

  3. 引导模型理解上下文:生成模型需要从输入文本中理解上下文信息,以生成合适的文本输出。提示词可以帮助模型理解输入文本中的关键信息,从而生成与输入文本相符合的文本输出。例如,使用条件约束型的提示词,可以引导模型根据特定条件生成对应的文本,从而在生成时考虑上下文信息。

  4. 提高系统可控性和可解释性:在一些实际应用中,对生成模型的输出结果需要进行控制和解释。通过使用提示词,可以让生成模型的输出更加可控和可解释,便于调试和解释生成结果。例如,使用固定模式型的提示词,可以让生成模型的输出结果符合特定的格式和结构,便于后续处理和使用。

因此,提示词在文本生成任务中具有重要的作用,可以帮助生成模型生成更加准确、连贯、有逻辑性的文本输出,提高人工智能系统的效果和可用性。

👨‍💻:

LLM模型本身会有偏见、幻觉等各种问题,这些问题的存在就是我们需要通过提示词功能去解决的。

同时如何才能从得到符合规范的输出,如何才能获得正确的正确答案等等,也是我们需要使用提示词做出这个任务的主要目标。

提示词的一般格式

🤖:

在提示词工程中,提示词的一般格式通常包括以下几个部分:

  1. 问题陈述:以一个简洁的问题或任务陈述作为提示词的开头,明确指出要求模型生成的内容。

  2. 上下文:提供一段上下文信息,可以是一段文字、一组关键词或是一个问题的背景资料,以便模型能够理解生成内容的语境。

  3. 提示词:在问题陈述和上下文之后,使用关键词或短语作为提示词,明确引导模型生成具体的内容。这些提示词应该与所需生成的内容紧密相关,并且可以帮助模型产生符合预期的输出。

  4. 格式要求:如果需要生成的内容需要满足特定的格式或要求,可以在提示词中明确指定。例如,要求生成一个列表、一段对话或一篇文章等。

以下是一个示例的提示词格式:

问题陈述:请生成一篇关于太阳系的科普文章。

上下文:太阳系是由太阳、八大行星、以及一些卫星、小行星等组成的。

提示词:太阳、行星、卫星、轨道、宇宙、行星运动

格式要求:文章应包含至少三个段落,每段包括3-5句话。

通过这样的提示词格式,可以明确指导模型生成符合预期的内容,并确保生成的文本符合要求的格式和主题。在实际应用中,可以根据具体需求和场景来设计不同的提示词格式。

👨‍💻:

通常的提示词会包含以下几个部分:

  1. 角色
  2. 指令/任务
  3. 上下文
  4. 问题
  5. 示例

这些部分都不是必选的,可以根据自己的场景进行组合。 重要的一点还是需要能够有清晰的任务说明。

通常情况下,指令/任务、问题往往是提示词的关键,决定了需要LLM完成的任务目标是什么,角色的定义可以算作上下文的一部分,提供了任务处理的视角,上下文声明了任务的背景、有关请求的详细信息等。

零样本(Zero Shot)提示

🤖:

在提示词工程中,零样本提示是指允许语言模型在没有明确在其训练数据中进行训练的任务或领域中生成内容的提示。换句话说,零样本提示使模型能够在未经过额外微调的情况下,为未包含在其训练数据中的任务或领域生成输出。

提示词工程技术通常涉及使用精心设计的提示,以引导模型的行为并生成期望的输出。零样本提示旨在提供高层次的指令或线索,使模型能够理解需要生成内容的任务或领域,即使它没有专门在该任务或领域上进行训练。

例如,如果一个语言模型在大量文本数据上进行了训练,包括关于各种主题的一般知识,可以使用零样本提示,如“将以下英文文本翻译成法语:[输入的英文文本]”。即使模型没有针对翻译进行专门的微调,零样本提示可以引导模型根据其一般语言理解能力生成翻译结果。

零样本提示可以使语言模型在多个领域或任务中执行任务,而无需对每个单独的任务或领域进行明确训练。然而,零样本提示的效果取决于底层语言模型的能力和限制、提示的质量以及目标任务或领域的复杂性。可能需要进行谨慎的提示词工程和实验,以实现期望的结果。

👨‍💻:

很多的指令/任务,都可以通过简单的说明来完成,指令本身具有通用性,任务目标和问题都可以通过文本描述来达到。这时候就需要任何的样本和示例,这种形式就称作零样本提示。

markdown
将以下文本翻译为中文:
Build a company we are passionate about, embrace AI and always put marketing first.
打造一家我们热爱的公司,拥抱人工智能,始终把营销放在第一位。
markdown
Q: 市场易是什么?
市场易是一款供个人和企业使用的在线营销自动化平台,可以帮助用户轻松创建和发送电子邮件、短信、推送通知、自动回复等营销活动,同时提供营销数据分析和客户管理功能。
markdown
根据以下用户反馈,生成对应的Github Issues标签:
[Feedback]
官网的页面打不开了。
[Labels]
bug, website, accessibility

单样本(One Shot)提示

🤖: ...

👨‍💻:

当我们的任务目标无法通过文本详细的描述时,可以通过给出一个简单的样本作为示例,通常用于格式的约束等等。

同时需要注意,样本本身也会构成上下文的一部分,所以当任务目标的范围比较宽泛的时候,需要主要避免使用单样本从而造成结果的单一化。

markdown
请将以下信息整理为Json格式。
[INPUT]
朋友们好啊,我是浑元形意太极门掌门人马保国。
[JSON]
{
    "name":"马保国",
    "title":"浑元形意太极门掌门人",
    "object":"朋友们"
}

[INPUT]
全民制作人们大家好,我是练习时长两年半的个人练习生蔡徐坤,喜欢唱,跳,rap,篮球,music.
[JSON]
{
    "name":"蔡徐坤",
    "title":"个人练习生",
    "object":"全民制作人们",
    "hobby":["唱","跳","rap","篮球","music"],
    "training_time":"两年半"
}

少样本(Few Shot)提示

🤖: ...

👨‍💻:

少样本的意思就是提交少量的样本,一般比较合适的4-8个左右,通过这些示例,可以有效的约束输出结果的范围空间,同时也提供了输出结果的可能性,使得结果更加可控。

思维链(Chain Of Thought)

🤖:

"思路链" 是指在提示工程中的一个概念,指的是提示或一系列提示中的逻辑流或思路的连贯性。它涉及将提示以一种有条理和组织良好的方式进行结构化,从而引导语言模型生成与特定思路或叙述一致的回应。

在提示工程中,思路链通常用于提供上下文、设置情境或建立前提,以引导语言模型的生成过程。它通常包含一系列的提示,经过精心设计,按照逻辑顺序构建,引导模型经过一系列的思考或步骤。每个提示在链条中都作为一个构建块,为模型提供生成合适回应所需的信息或指令。

良好构建的思路链提示可以帮助引导语言模型生成连贯、符合上下文的回应,与预期的叙述或思路一致。它确保模型的输出遵循结构化和有组织的思路链,从而生成更加连贯和相关的回应。

设计有效的思路链提示需要仔细考虑提示的顺序、内容和格式,同时了解特定任务或应用的具体要求。可能涉及使用能够设置上下文、提出问题或提供线索的提示,以引导模型的理解和生成回应的过程。

总之,在提示工程中的"思路链"概念强调了在提示中进行结构化和逻辑连贯的重要性,以引导语言模型的回应生成过程,确保生成的输出与期望的叙述或思路一致。

👨‍💻:

当我们需要处理具有一定逻辑推理能力的问题时,可能LLM会出于幻觉,直接给出一个错误的答案。 这时候我们可以通过One-Shot或者Few-Shot的方式,将样例中逻辑的推理过程也详细的给出来,这样的输出的结果也会有这样的推理过程,使得最终结果的准确性有所提升。

markdown
Q:在一个笼子里有鸡和兔子,总共有2个头和4只脚。问笼子里分别有多少只鸡和兔子?
A:假设笼子里都是鸡,2个头会有4只脚,多出来4-4=0只脚,因此笼子里有2只鸡,0只兔子。
Q:在一个笼子里有鸡和兔子,总共有5个头和12只脚。问笼子里分别有多少只鸡和兔子?
A:假设笼子里都是鸡,5个头会有10只脚,多出来12-10=2只脚,每只兔子比鸡多2只脚,所以2/2=1只兔子,5-1=4只鸡,因此笼子里有4只鸡,1只兔子。
Q:在一个笼子里有鸡和兔子,总共有38个头和104只脚。问笼子里分别有多少只鸡和兔子?
假设笼子里都是鸡,38个头会有76只脚,多出来104-76=28只脚,每只兔子比鸡多2只脚,所以28/2=14只兔子,38-14=24只鸡,因此笼子里有24只鸡,14只兔子。

零样本思维链(Zero Shot Chain Of Thought)

🤖: ...

👨‍💻:

思维链的过程需要我们通过手动的添加推理过程来给与示例,从而得到一个推理的结果。 但是,其实我们可以通过一句简单的提示词"Let's Think Step By Step"(让我们一步一步思考),就可以让LLM生成带有推理过程的结果,从而提升结果的准确性。

markdown
在一个笼子里有鸡和兔子,总共有38个头和104只脚。问笼子里分别有多少只鸡和兔子?
一步一步思考

假设笼子里有x只鸡和y只兔子。

根据题意,我们可以列出以下两个方程式:

x + y = 38  (总头数为38)

2x + 4y = 104  (总脚数为104)

接下来,我们可以用消元法解这个方程组:

将第一个方程式乘以2,得到2x + 2y = 76。

将第二个方程式减去上面的式子,得到2y = 28,即y = 14。

将y = 14代入第一个方程式,得到x + 14 = 38,即x = 24。

因此,笼子里有24只鸡和14只兔子。
参考资料
  1. Learn Prompting
  2. 提示工程指南

Date: 2023/4/26

Authors: 郭强、ChatGPT

Tags: AI、ChatGPT