定义

我们与AI进行交互的过程中,主要依赖于Prompt,不管是与大模型直接交互,还是基于一些工具开发大模型的应用,其中都是需要涉及到Prompt的编写设计,高质量的Prompt对于充分发挥AI的能力至关重要。因此演进出一种新的工程类型,提示工程。

一句话来说,提示工程,就是怎么向ChatGPT(大模型)提问。

而Prompt Engineering,通过开发和优化提示词,帮助语言模型应用与各种业务场景。

作用

当你输入提示后,系统会对输入进行预处理。这包括:
预处理

  • 分词:将输入的文本分解成单词或子词。
  • 编码:将这些词转换成模型可以理解的数值表示(向量)。
  • *模型处理**

预处理后的输入会被传递给一个大型语言模型(如GPT-4)。这个模型是基于深度学习的神经网络,通常是一个变体的Transformer架构。

  • 嵌入层:将输入的数值表示转换成高维向量表示。
  • 注意力机制:模型通过注意力机制来理解输入的上下文关系。注意力机制允许模型在处理某个词时,关注输入中的其他相关词。
  • 层叠的Transformer块:输入向量通过多个Transformer块,每个块包含多个注意力头和前馈神经网络。这些块逐层处理输入,逐步提取和组合特征。
  • 生成输出:模型根据输入和内部状态生成输出的概率分布。通过采样或贪婪搜索等方法,从概率分布中选择最可能的下一个词。
  • *后处理**

生成的输出是一个词的序列,这些词是模型根据输入提示逐步生成的。后处理步骤包括:

  • 解码:将生成的数值表示转换回人类可读的文本。
  • 拼接:将生成的词序列拼接成完整的句子或段落。

如何写出高质量的prompt

这里引用一下吴恩达老师的prompt原则:

1.清晰明确:提示应该清晰明确,避免模糊不清或多义的表达。确保你的问题或任务描述是具体的,以减少模型的误解。

2。提供上下文:提供足够的上下文信息,帮助模型理解你的需求。这可以包括背景信息、目标和任何相关的细节。

3.分步指示:如果任务复杂,可以将其分解为多个步骤,逐步引导模型完成每个部分。这有助于提高结果的准确性和质量。

4.使用示例:提供示例可以帮助模型更好地理解你的期望。示例可以是你希望得到的输出格式或内容。

5.明确输出格式:明确你期望的输出格式,如列表、段落、表格等。这有助于模型生成符合你需求的结果。

6.设定限制:设定字数、时间或其他限制,帮助模型生成符合你需求的输出。

7.迭代优化:通过多次尝试和调整提示,不断优化你的提示设计,以获得更好的结果。记录哪些提示效果好,哪些需要改进。

我们希望Prompt帮我们做什么事情,框架为提示创建过程提供了结构和清晰度,可以让我们更容易的检查提示词的问题。
ICIO框架

  • Instruction(指令): 即您希望AI执行的具体任务。
  • Context(背景信息): 给AI提供更多的背景信息,以引导模型生成更符合需求的回复。
  • Input Data(输入数据): 告知模型需要处理的数据。
  • Output Indicator(输出引导): 告知模型所需输出的类型或风格。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Instruction(指令):
"请详细解释Python中的列表和元组的区别,并举例说明。"

Context(上下文):
正在学习Python编程,并且已经掌握了基本的变量和数据类型知识。

Input(输入):
"我想了解一下Python中的列表和元组有什么区别。"

Output Indicator(输出引导):
"Python中的列表和元组都是用于存储多个项目的数据结构,但它们有一些关键的区别:
可变性:
列表(List)是可变的,这意味着你可以在创建后修改它们的内容(添加、删除或更改元素)。
元组(Tuple)是不可变的,一旦创建就不能修改其内容。
语法:
列表使用方括号 [] 来定义,例如:my_list = [1, 2, 3]
元组使用圆括号 () 来定义,例如:my_tuple = (1, 2, 3)
用途:
列表通常用于需要频繁修改数据的场景。
元组通常用于存储固定数据,确保数据的完整性和安全性。
示例代码:
# 列表示例
my_list = [1, 2, 3]
my_list.append(4) # 添加元素
print(my_list) # 输出:[1, 2, 3, 4]

# 元组示例
my_tuple = (1, 2, 3)
# my_tuple[0] = 4 # 这行代码会引发错误,因为元组不可变
print(my_tuple) # 输出:(1, 2, 3)

BROKE框架

  • Background(背景): 提供问题或情境的背景信息。
  • Role(角色): 提供应该扮演的角色。
  • Objective(选项): 明确需要解决的问题或达到的目标。
  • Knowledge(知识点): 分析达到目标的知识点链路。
  • Execution(评估): 如何执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Background(背景):
我是一名Python编程初学者,正在学习Python中的数据结构。

Role(角色):
你是一个虚拟编程导师。

Objective(目标):
解释Python中的列表和元组的区别,并提供示例代码。

Knowledge(知识):
Python编程基础,列表和元组的定义、特性和用法。

Execution(执行):
详细解释列表和元组的区别,提供示例代码,并说明每种数据结构的适用场景。

STAR 框架

  • Situation(情境): 描述情境或背景。
  • Task(任务): 说明需要完成的任务。
  • Action(行动): 描述采取的行动。
  • Result(结果): 说明结果或影响。
1
2
3
4
5
6
7
8
9
Situation(情境):
我是一名Python编程初学者,正在学习Python中的数据结构。
Task(任务):
我需要理解Python中的列表和元组的区别,并能够在编程中正确使用它们。
Action(行动):
我向虚拟编程导师请教,要求他们详细解释列表和元组的区别,并提供示例代码。
Result(结果):
通过导师的解释和示例代码,你成功理解了列表和元组的区别,并能够在编程中正确使用这两种数据结构。

两个关键配置

Temperature(温度)
Temperature 越高生成内容越放飞自我,更有创意,越低越贴近参考的知识

Top-p
Top-p 越高生成的内容越喜欢勇夺样的表达方式,越低则越单调

如果你想内容更加有创意,那就往高调 Temperature;如果你想内容更严谨,就往低调 Temperature;如果你想内容更活泼,那就往高调 Top-p;如果你想内容更严肃,就往低调 Top-p