掌握 AI Prompt:大语言模型有效提示词编写指南
11/20/2024

“给智慧巨人的咒语,念得准确就会心想事成,念错了就变成愚者的独白。”

精心设计的“AI Prompt“(以下称:AI 提示词或提示词)是运用大语言模型(以下称:AI/LLMs)的关键要素,因为其能够促使 AI 生成相关且准确的回应。

本指南将深入探讨有效提示的重要性,并为你提供必要的工具与技术,以便为 AI 编写优质提示词,进而获得所需的输出结果。

#1 提示词定义

AI 提示词是发送给大语言模型以从中获取所需回复的自然语言请求。

可以把 AI 想象成理论知识丰富、实践经验稀少的新员工,需要老员工提供足够多的信息(提示词),以帮助他了解业务、流程以及其他必要信息,帮助他更好地完成任务。

提示词是由不同的内容模块组合而成的请求集合,这些模块包括主提示、上下文、指令、输出结构、示例、注意事项等。AI 模型接受到请求后,可以生成文本、图片、视频、音频等内容,这取决于模型的具体类型(本文主要关注类似 GhatGPT、Claude、通义、豆包等语言模型的提示词)。

#2 提示词模块说明

2.1 主提示(必需)

定义请求的主要内容以及目标,基本可分为四种类型:

  1. 问题:希望直接得到 AI 回答的问题。
撰写 AI 提示词时,用于优化输出的关键原则是什么?
  1. 任务:希望 AI 执行的“动作”。
根据我的文章内容生成10个吸引人的标题。

将“提示词”翻译成英文。 
  1. 处理实体:希望 AI 对输入的内容进行处理。
请将以下动物按[大型, 小型]分类:
{大象、猫、大雁}

{内容...},请总结以上内容的主要观点。
  1. 补全:希望 AI 继续往下写的内容。
完成故事:山上有座庙,庙里...

注:在某些简单的请求中,主提示也会用来包含其他模块的内容。

2.2 上下文(可选)

不要假设 AI 知道所有必要信息,向 AI 提供额外的背景、引用内容、语境等解决问题所需的信息。上下文可以包含:

  1. 任务结果将用于什么?
  2. 任务结果的受众是谁?
  3. 当前任务是否是更复杂任务的子任务?在主任务中处于什么位置?
  4. 任务的最终目标是什么,完成后将达到什么效果?
  5. 任务需要参考的资料。

当你添加上下文内容后,记得为 AI 提供如何使用这些信息的指令。

2.3 指令(可选)

描述为了完成任务 AI 具体需要做什么。通过向 AI 提供关于要做什么的指令,可以有效且高效地自定义其行为。

提供指令时应清晰而具体,推荐使用分步说明列表,这样能更好地确保 AI 按照要求执行任务。

2.4 输出结构(可选)

定义 AI 的输出结构或格式。在提示中增加输出结构模块,对于有输出标准要求的任务很有帮助。比如:

  1. 制作英语单词卡的任务,就需要限定卡片上的内容以及对应的位置,通过输出结构的提示指导 AI 准确输出符合格式的内容。
  2. AI 产生的数据需要用在特定流程中,该流程输入只接收 JSON 格式的数据,就需要增加对应格式结构的提示,指导 AI 准确输出相应数据。

2.5 示例(可选)

示例是获取 AI 精确输出的有效途径。在提示中加入精心设计的示例,能够大幅提升 AI 输出的准确性、一致性和质量。

  1. 准确性:减少对指令的误解。
  2. 一致性:确保统一的结构和风格。
  3. 性能:精心挑选的示例能够提升 AI 处理复杂任务的能力。

“示例” 模块在任务本身具备大量优秀案例的情况下更适用。向 AI 展示示例后,它会从中学习到相应语言结构和模式,进而依照该模式生成响应。

要获得最大效果,需确保示例满足以下要求:

  1. 相关性:示例应能反映实际用例。
  2. 多样化:示例应涵盖边缘情况以及潜在挑战,同时具有充分的变化,以避免 AI 意外捕捉到不必要的模式(即过拟合,除非有特殊要求)。
  3. 清晰度:示例应被特定标记(比如“# 示例”、“”)标识,以保持整体结构。
  4. 一致性:确保示例具有相同的结构和格式,防止回答出现不必要的格式。

另外,通过示例向 AI 展示应遵循的模式比展示要避免的反模式更为有效。

2.6 注意事项(可选)

定义 AI 在生成结果的过程中需要遵循的其他限制。比如:

  1. 限制 AI 的行动范围,比如在给定数据或角色范围内完成任务。
  2. 强调输出结果的标准,比如字数、复杂性等。

很多注意事项是在提示词调试时产生的,如果输出结果中经常性出现某种不符合预期的模式,则可以通过注意事项来做出限制。

#3 提示词优化技巧

3.1 思维链提示

让 AI “思考”的技术:思维链(CoT)提示。

在面对复杂任务时,给 AI 思考的空间,可以显著提高 AI 的回复效果。思维链提示鼓励 AI 逐步分解问题,从而产生更准确和细致的输出。具体意义:

  1. 在数学、逻辑、分析等复杂任务中,逐步解决问题能够降低错误的几率。
  2. 结构化思维能够带来更加连贯且组织更为完善的回答。
  3. 查看 AI 的思维过程有利于找出提示中可能存在的不清晰之处。

但也需要考虑思维链带来的副作用:

  1. 增加了输出长度,输出时间随之变长,输出成本也相应提高。
  2. 并非每一项任务都需要进行深入思考。要明智地运用思维链,从而保证性能与成本能够达到恰当的平衡。

思维链提示从易到难的三种方式:

  1. 基本提示:直接在提示中包含“一步步思考”等,这种方式含义模糊,不包含如何思考的指导。
  2. 引导提示:为 AI 的思考过程列出具体步骤,这种方式不会剥离思考与输出内容,容易混淆。
  3. 结构提示:使用标签分离思考过程与输出结果,强调思考过程应放在思维标签(如:# 思考过程)中,输出结果应放在结果标签(如:#结果)中,使思维与结果有效分离。

3.2 角色分配

基于任务给 AI 分配一个合适的角色,可以将 AI 从一个通用助手转变为虚拟领域专家。这将可以:

  1. 显著改善在复杂场景中 AI 回复的准确性。
  2. 定制个性化的回复风格。
  3. 保持 AI 在特定任务下的专注度和回复范围。

对于同一个任务,尝试为 AI 定义不同的角色,可能会有不同的见解和回复。如果你的任务是关于辅导小学孩子学习英语的,那么可以如下定义:

你是一位经验丰富的名校小学英语老师。

3.3 结构化

用特定标签(/标题)结构化提示词中不同模块的内容,可以:

  1. 提高提示词的清晰度和准确性:根据功能清晰地分隔提示词的不同部分,降低 AI 误解提示词意思的可能性。
  2. 提高提示词的灵活性:利于查找、添加、删除或修改提示词的内容。
  3. 增强提示词的可解析性:方便引用提示词特定部分的内容,类似程序中的“变量”。

在结构化提示词时,应遵循:

  1. 保持一致性:在提示词中使用相同的标签名称和种类。
  2. 嵌套标签:对于层级内容使用嵌套标签结构。

以笔者常用的 xml 结构化方式举例:

<Role>
定义角色
</Role>

<Task>
定义具体任务
</Task>
...

也可以用常见的 Markdown 格式:

# 角色定义
定义角色

# 任务
定义具体任务
...

3.4 任务分解

处理复杂任务时,若企图通过单个提示处理所有内容,AI 可能会出现失误。

思维链提示虽好,但如果你的任务包含多个需深入思考的步骤,就需要将复杂任务拆分为更小且易于管理的子任务,每个子任务都需要有一个清晰明确的目标以及提示词,最后再将他们组合起来。

分解任务带来了如下好处:

  1. 能确保每个子任务都得到 AI 充分关注,从而降低错误发生的几率。
  2. 子任务更简单,会使指令和输出更加清晰。
  3. 能够轻松地定位并修复子任务中的问题,具有可追溯性。

组合子任务则有两种模式:提示链和提示金字塔。

  1. 提示链模式主要适用于有明确流程的任务,这种模式将子任务按顺序链接在一起,每个子任务的输出将成为下一个子任务的输入,最后一个子任务的输出即是最终输出。
  2. 提示金字塔模式主要适用于最终结果的生成依赖于多个前置任务的生成的任务,这种模式下前置子任务优先且同时运行,产生的结果会进行汇总,然后由最终子任务进行统一处理输出。

3.5 认知验证

设想你正在与朋友进行一场充满智力挑战的对话,你们有一个终极问题需要解决,但你们会先提出和讨论一些相关的基础问题,接着再慢慢深入探究以触及最初的终极问题。

认知验证属于一种高级提示技术,其具体表现为促使 AI 先提出和解决与任务相关的其他问题,从而获取更佳的清晰度或者上下文信息。在此情形下,提示词中会包含引导 AI 生成输出前自行找出特定问题的提示内容,比如:

请围绕三个特定问题分析气候变化对经济的影响。
每个问题需聚焦于不同的经济方面。
之后,整合这些答案以获得全面的理解。

在以上例子中,AI 会先找出和回答三个特定问题,然后再以这三个问题的答案作为上下文信息回答最终问题。

#4 提示词的构建过程

4.1 明确需求

就像做任何产品一样,在构建提示词这个产品前,明确自己或用户期望从 AI 那里得到什么十分关键。

你是在寻觅一个简单的答案、一段代码、一个扣人心弦的故事还是完成一项复杂的任务?不同的目标将决定你的提示词内容是简单还是复杂,同时也将确定 AI 应以何种形式呈现结果。

分析需求可以从几个方面入手:

  1. 使用提示词的是谁?使用 AI 生成结果的是谁?
  2. 用户遇到的具体问题和发生场景是什么?
  3. 需求的类型是什么?复杂度有多高?最终的目标是什么?

4.2 选择模块

明确需求后,便可着手为提示词挑选合适的模块。某些需求或许仅需一段主提示词(比如简单的问题)即可满足,而有的则可能需要多个模块进行组合,还有一些甚至需要先将其拆分为多个子任务,然后分别构建提示词。

选择模块需注意:

  1. 必要性:仅选择必要的模块,模块并不是越多越好。
  2. 结构化:考虑是否需要通过标签结构化模块,有些简单的需求将模块整合成一段即可完成任务

4.3 填充内容

选择完所需的模块后,即可根据模块规则填充内容。

这里需要注意,AI 虽然能够模仿人类语言,但目前却无法像人类那样真正理解人类语言。所以,给出的提示应当清晰且具体。

下面是一个示例:

<!-- 不清晰和具体 -->
编写一个程序用来计算给定文本的字数。

<!-- 清晰和具体 -->
编写一个名为“count_word”的 Python 函数,该函数
将文本字符串作为输入,并以数值形式返回文本的统计字数。

相比之下,清晰而具体的提示词,更可能让 AI 产生想要的结果。

当然,内容除了要清晰和具体以外,还需要考虑以下内容:

  1. 语言风格:你希望 AI 使用严肃、欢快还是正式的风格生成内容。
  2. 任务性质:教育需要准确,娱乐需要有趣,建议则应该直接了当。
  3. 潜在挑战:预测 AI 可能遇到的挑战和限制,并在提示中主动解决它们。

注:直接输入的提示词内容属于显式信息,而从这些显式信息中推断出的语气、风格等隐含信息,同样可能会影响 AI 对模式的识别。

4.4 优化迭代

起初,你的提示词或许无法尽善尽美。但是,随着不断测试、优化以及对 AI 工具认识的逐步加深,生成的结果会愈发理想。所以,按照这个思路,积极尝试自己写下的提示词,观察 AI 的回应,然后根据回应持续调整提示词,这是必然要经历的过程。

迭代时可以考虑以下几个方面:

  1. 优化表述内容和方式,比如使用不同的措辞、更改提示内容的顺序等。
  2. 添加注意事项。当输出结果出现了意料之外的内容,通过注意事项限制这部分输出非常有效。
  3. 尝试更多技巧。如果某些技巧不管用,换一种再试试。

遵循 AI 给出的建议。部分 AI 在给出结果的同时还会提供一些建议,偶尔遵循这些建议可能有意想不到的结果。


最后,编写出色的提示词既是一门艺术,也是一门科学。人工智能在提示词的引导下给出我们所寻找的答案或回应,然而,与我们的朋友乃至熟人不同,人工智能(当下)对我们依然“一无所知”,犹如随机出现的“陌生人”。