一、什么是 Prompt Engineering

Prompt Engineering(提示工程)是一门相对较新的学科,它关注的是如何设计和优化”提示”(Prompts),也就是提供给大型语言模型(LLMs)的输入,以有效地引导它们完成各种任务。简单来说,就是研究如何更好地”提问”,让 AI 更好地”回答”。

1. 为什么需要 Prompt Engineering?

大型语言模型虽然强大,但它们的表现很大程度上取决于你如何”提问”。一个好的 Prompt 可以:

  • 提高输出质量: 更准确、更相关、更符合预期的结果。
  • 引导模型完成复杂任务: 例如,进行推理、翻译、代码生成、摘要等。
  • 减少模型产生错误或无关信息的可能性。

2. 底层逻辑

Prompt Engineering 的核心在于利用大型语言模型(LLMs)的强大能力,通过精心设计的输入(即 Prompt),引导模型产生符合预期的输出。其底层逻辑基于以下几点:

  • 语言模型的本质是概率预测: LLMs 通过海量文本数据的训练,学习到了词语之间的关联和概率分布。给定一个输入序列(Prompt),模型会预测下一个词出现的概率,并依次生成后续的文本。
  • Prompt 影响模型的概率分布: Prompt 作为模型的输入,直接影响了模型对后续词语的概率预测。一个好的 Prompt 能够有效地调整模型的概率分布,使模型更有可能生成符合要求的文本。
  • 利用上下文信息: Prompt 中包含的上下文信息可以帮助模型更好地理解任务要求和用户意图。模型会根据 Prompt 中的上下文信息,调整其内部的表示和概率预测,从而生成更相关的输出。
  • 模拟人类的思维方式: 一些高级的 Prompt Engineering 技巧,例如思维链提示(Chain-of-Thought Prompting),旨在引导模型逐步推理,模拟人类的思维过程,从而提高模型解决复杂问题的能力。

3. 工作原理

Prompt Engineering 的工作原理可以概括为以下几个步骤:

  • 明确任务目标: 首先需要明确需要模型完成的任务是什么,例如文本生成、翻译、问答等。
  • 设计 Prompt: 根据任务目标,设计合适的 Prompt。Prompt 可以包含指令、上下文信息、示例等。
  • 模型执行: 将 Prompt 输入到 LLM 中,模型根据 Prompt 进行文本生成或执行其他任务。
  • 评估输出: 评估模型生成的输出是否符合预期。如果不符合,则需要调整 Prompt,并重复上述步骤。

4. 更详细的工作原理分解

  • 分词: Prompt 首先会被分解成一个个的 token(通常是词或子词),这是模型处理文本的基本单位。
  • 编码: 每个 token 会被转换成一个向量表示,这个向量捕捉了 token 的语义信息。
  • Transformer 模型处理: 编码后的 token 向量会被输入到 Transformer 模型中进行处理。Transformer 模型通过自注意力机制(Self-Attention)捕捉 token 之间的关系,并生成上下文相关的表示。
  • 解码: 模型根据上下文表示,预测下一个 token 的概率分布。然后,根据某种采样策略(例如 Top-k 采样、Top-p 采样),从概率分布中选择一个 token 作为输出。
  • 重复生成: 重复上述解码过程,直到生成完整的文本。

5. 关键要素

  • 指令: 清晰地告诉模型需要做什么,例如”写一篇关于人工智能的文章”。
  • 上下文: 提供相关的背景信息,帮助模型理解任务,例如”文章的受众是初学者”。
  • 输入数据: 提供需要模型处理的数据,例如需要翻译的文本。
  • 输出指示器: 指示模型输出的格式或类型,例如”以列表的形式输出”。
  • 示例: 提供输入和输出的示例,帮助模型学习任务要求(Few-shot Learning)。

6. 重要性

Prompt Engineering 是使用 LLMs 的关键技能。一个好的 Prompt 可以显著提高模型输出的质量和相关性,使 LLMs 更好地服务于各种应用场景。随着 LLMs 的不断发展,Prompt Engineering 的重要性也将日益凸显。

7. 核心要素

  1. 清晰明确的指令: 告诉模型你需要它做什么,越具体越好。例如,与其问”写一篇关于猫的文章”,不如问”写一篇 300 字左右的科普文章,介绍家猫的习性”。
  2. 提供上下文信息: 如果需要模型理解某个背景或主题,需要在 Prompt 中提供相关信息。例如,在进行翻译时,提供文本的来源和目标语言。
  3. 使用合适的格式: 不同的任务可能需要不同的格式。例如,对于问答任务,可以使用问句的形式;对于代码生成任务,可以提供代码的框架或注释。
  4. 利用示例: 通过提供一些输入和输出的示例,可以帮助模型更好地理解任务要求,这被称为”Few-shot Learning”(小样本学习)。
  5. 迭代和优化: Prompt Engineering 是一个不断尝试和改进的过程。通过观察模型的输出,不断调整 Prompt,以达到最佳效果。

8. 应用领域

  • 文本生成: 包括文章、故事、诗歌、剧本等。
  • 机器翻译: 将一种语言的文本翻译成另一种语言。
  • 代码生成: 根据自然语言描述生成代码。
  • 问答系统: 回答用户提出的问题。
  • 对话系统: 构建聊天机器人。
  • 图像生成: 通过文本描述生成图像(例如,使用 DALL-E、Midjourney 等)。

9. 一些常用的技巧

  • 零样本提示: 直接提供指令,不提供任何示例。

    直接提供指令,不提供任何示例。例如:”写一首关于秋天的诗。”

  • 小样本提示: 提供少量的输入和输出示例。

    提供少量的输入和输出示例,帮助模型理解任务要求。例如:

    • 输入:”猫 → 喵喵”
    • 输入:”狗 → 汪汪”
    • 输入:”鸟 → ?”
    • 模型应输出:”啾啾”
  • 思维链提示: 鼓励模型逐步推理,展示思考过程。

    鼓励模型逐步推理,展示思考过程,尤其适用于解决复杂问题。

  • 角色扮演: 让模型扮演某个角色,例如”你是一位专业的翻译家”。

    让模型扮演某个角色,例如”你是一位专业的翻译家,请将以下英文翻译成中文:…”

  • 使用关键词: 提供一些关键的词语,帮助模型聚焦主题。

    学习使用预定义的提示模板,例如用于文本摘要、翻译、问答等的模板。

二、 如何使用 Prompt

模板总览

这个模板旨在提供一个结构化的方法来构建 Prompt,使其更清晰、更有效。它包含以下几个关键部分:

  1. 角色设定 (Role): 明确 AI 的角色,使其更好地理解任务的背景和目标。
  2. 任务描述 (Task): 清晰地描述需要 AI 完成的任务。
  3. 上下文信息 (Context): 提供必要的背景信息,帮助 AI 更好地理解任务。
  4. 指令 (Instructions): 详细说明任务的具体要求,包括格式、输出方式等。
  5. 示例 (Examples): 提供输入和输出的示例,帮助 AI 更好地理解任务要求。
  6. 约束条件 (Constraints): 设定任务的限制条件,例如字数限制、时间限制等。
  7. 输出格式 (Output Format): 明确期望的输出格式,例如 JSON、Markdown、列表等。

模板详细说明

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
角色设定 (Role): 你是一个[角色描述]

任务描述 (Task): 请[任务描述]

上下文信息 (Context): [提供相关的背景信息]

指令 (Instructions):

- [指令 1]
- [指令 2]
- [指令 3]
...

示例 (Examples):
输入: [输入示例 1]
输出: [输出示例 1]

输入: [输入示例 2]
输出: [输出示例 2]

约束条件 (Constraints):

- [约束条件 1]
- [约束条件 2]
...

输出格式 (Output Format): [期望的输出格式]

模板各部分详解

  • 角色设定 (Role): 赋予 AI 一个特定的角色,例如”专业的翻译人员”、”资深的程序员”、”富有创造力的诗人”等。这有助于 AI 更好地理解任务的语境和目标,并产生更符合预期的结果。
  • 任务描述 (Task): 用简洁明了的语言描述需要 AI 完成的任务。例如,”将以下英文句子翻译成中文”、”编写一个 Python 函数来实现排序算法”、”创作一首关于秋天的诗歌”。
  • 上下文信息 (Context): 提供与任务相关的背景信息,例如任务的背景、目标受众、相关的知识领域等。这有助于 AI 更好地理解任务的意图,并产生更准确、更相关的结果。
  • 指令 (Instructions): 详细说明任务的具体要求,例如输出的格式、长度、风格等。使用清晰的指令可以避免歧义,并提高 AI 的执行效率。使用列表可以使指令更清晰易懂。
  • 示例 (Examples): 提供输入和输出的示例,可以帮助 AI 更好地理解任务的要求。通过示例,AI 可以学习到任务的模式和规律,并产生更符合预期的结果。
  • 约束条件 (Constraints): 设定任务的限制条件,例如字数限制、时间限制、特定的格式要求等。这有助于控制 AI 的输出,并使其更符合实际需求。
  • 输出格式 (Output Format): 明确期望的输出格式,例如 JSON、Markdown、列表等。这有助于后续的处理和使用。

示例:生成文章摘要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
角色设定 (Role): 你是一个专业的文章摘要生成器

任务描述 (Task): 请为以下文章生成一段简洁准确的摘要

上下文信息 (Context): 这篇文章是关于人工智能在医疗领域的应用的

指令 (Instructions):

- 摘要应该简洁明了,不超过 150 字
- 摘要应该准确概括文章的主要内容
- 摘要应该使用清晰流畅的语言

示例 (Examples):
输入: 人工智能正在深刻地改变着医疗行业的各个方面。从疾病诊断到药物研发,人工智能都展现出了巨大的潜力。例如,AI 可以通过分析大量的医学影像数据来辅助医生进行疾病诊断,提高诊断的准确性和效率。此外,AI 还可以加速药物研发的过程,缩短新药上市的时间。
输出: 人工智能正在革新医疗领域,其在疾病诊断和药物研发等方面的应用展现出巨大潜力。AI 通过分析医学影像数据辅助医生诊断,提高效率和准确性,并加速新药研发,缩短上市时间。

约束条件 (Constraints):

- 摘要长度不超过 150 字

输出格式 (Output Format): Markdown

使用提示工程的最佳实践

  • 迭代优化: 不断尝试不同的 Prompt,并根据 AI 的输出来进行调整和优化。
  • 清晰明确: 使用清晰、简洁的语言来描述任务和指令,避免歧义。
  • 提供示例: 提供输入和输出的示例,可以帮助 AI 更好地理解任务要求。
  • 逐步引导: 将复杂的任务分解成更小的子任务,并逐步引导 AI 完成。
  • 使用合适的工具: 利用 Prompt Engineering 相关的工具和平台,可以提高效率和效果。