LLM Prompt

本文将介绍 LLM 中的 Prompt 及其技巧。

一、Prompt 与 Prompt Engineering

1. Prompt

Prompt,提示。

在 LLM 领域下,Prompt 指的是给 LLM 的输入。

2. Prompt Engineering

对于具有较强自然语言理解能力、生成能力,能够实现多样化任务处理的 LLM 来说,Prompt 的设计极大地决定了其能力的上限与上限。

Prompt Engineering,提示工程,即是针对特定任务构造能充分发挥大模型能力的 Prompt 的技巧。

通过 Prompt Engineering,

在 LLM 领域,Prompt Engineering 的出现是一场革命性的变革。通过 Prompt Engineering,开发者可以快速地构建 AI 应用,而无需数据收集、数据处理、模型训练、模型部署等复杂、耗费时间、需要大量计算资源的工作。

二、基本技巧

1. 清晰且详细

Prompt 需要清晰明确地表达需求,提供充足的上下文,使语言模型准确理解目的。

不要说:

1
总结一下会议记录

而是说:

1
请用一个段落总结会议记录。接着,用 markdown 列表的形式列出所有发言者及其关键观点。最后,如果有的话,列出发言者提出的下一步计划或建议的行动项。

2. 正面引导

在 OpenAI 的 Best practices for prompt engineering with the OpenAI API 中提到:

Instead of just saying what not to do, say what to do instead

LLM 是生成模型,Prompt 中提及的元素都会影响最终的生成结果。在这样的前提下,很有可能出现让 LLM 不要做什么,它反而偏要做什么的情况。

因此,与其只说不该做什么,不如说应该做什么。

3. 分隔

在 OpenAI 的 Best practices for prompt engineering with the OpenAI API 中提到:

Put instructions at the beginning of the prompt and use ### or “”” to separate the instruction and context

在编写 Prompt 时,应该注意分隔不同的文本部分。

需要注意的是:

  • 如果 Prompt 为动态生成,应该避免 “变量” 中出现 “分隔符”,从而与 Prompt 模板中的 “分隔符” 混淆,进而导致分割的失效、错乱

4. 示例

在 Prompt 中加入相关示例,可以帮助模型更好地理解任务要求和上下文,从而生成更准确的响应。

1
2
3
4
5
6
7
你的任务是模仿祖父母与孩子对话。

<孩子>: 请教我何为耐心。

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

<孩子>: 请教我何为韧性。

5. 输出引导

如果希望 LLM 生成内容,并且内容的开头是既定的,那么可以在 Prompt 的最后直接放上内容的开头,从而引导 LLM 直接进行续写。

  • 编写一个 MySQL 语句,查询计算机科学系的所有学生。
    部门表:[DepartmentId, DepartmentName]
    学生表:[DepartmentId, StudentId, StudentName]
    
    SELECT
    
    1
    2
    3
    4
    5
    6
    7

    * ```
    # 编写一个简单的 python 函数
    # 1. 向我询问一个以英里为单位的数字
    # 2. 它将英里转换为公里

    import

6. 扮演角色

可以在 Prompt 中指定 LLM 需要扮演的角色,例如某位资深的程序员、某位苛刻的代码审查官,从而引导其输出更具专业性的内容。

三、高级技巧 - 思维链

Chain of Thought,思维链,即解决问题时的一系列中间推理步骤。

在 Prompt 中,思维链通常与示例相结合。具体来说,在示例中,详细说明示例问题的求解过程(包括问题拆解、子问题解决、最终答案计算等),从而引导 LLM 逐步解决问题。

在 Chain-of-Thought Prompting 之下,LLM 的逻辑推理能力得到了提升,因此其输出结果更加准确;此外,LLM 能够输出具体的求解过程,提供了一定的可解释性,使得其输出结果更加可信。

其原因可能是:LLM 本质上是一个 “文字接龙机器”,根据上下文计算出置信度最高的下一个字/词来生成回答。直接生成答案的情况下,答案的准确与否依靠 LLM 的一次 “猜测”;而在运用思维链的情况下,LLM 可以将问题拆解为若干个更加 “好猜” 的子问题,然后逐个对这些子问题做 “猜测”,最后再基于子问题的思考结果对答案进行更加充分的 “猜测”,从而提高了输出的可靠性。

四、高级技巧 - 零样本思维链

Zero Shot Chain of Thought,零样本思维链,是对思维链的后续研究。这个技巧来自 Kojima 等人 2022 年的论文 [2205.11916] Large Language Models are Zero-Shot Reasoners。具体来说,在 Prompt 中加入 “Let‘s think step by step”,引导模型逐步思考并解决问题,从而生成正确的答案。

其原因可能是:通过这个 “魔法语句”,LLM 会自行地、尽可能地生成一些思考过程,从而达到运用思维链的效果。

五、高级技巧 - RAG

略。

参考