跳转到主要内容

5.1.1. Prompt 从 0 到 1

Prompting Engineer 提示工程是一种相对较新的学科,用于开发和优化提示,以高效地使用语言模型(LM)进行各种应用和研究主题。提示工程技能有助于更好地理解大型语言模型(LLM)的能力和局限性。研究人员使用提示工程来改善LLM在各种常见和复杂任务(如问答和算术推理)上的能力。开发人员使用提示工程来设计与LLM和其他工具交互的稳健有效的提示技术。 本指南介绍标准提示的基础知识,以提供如何使用提示与大型语言模型(LLM)进行交互和指导的大致概念。 注:以下示例使用 ChatGPT Mar 23 Version。

Prompt 基础介绍

你已经可以通过提示实现很多功能,但结果的质量取决于你提供的信息量。提示可以包含信息,如传递给模型的指令或问题,并包括其他细节,如输入或示例。 以下是一个简单提示的基本示例: 输入:
输出:
正如你所看到的,语言模型输出了一系列字符串,根据上下文“天空是”让人感到有意义。输出可能会出乎意料或远离我们想要完成的任务。 这个基本的例子也突显了提供更多上下文或说明以便更明确地指导我们想要实现的任务的必要性。 让我们尝试将其改进一下: 输入:
输出:
这样是不是看起来像个人说的了?我们告诉模型完成句子,所以结果看起来更好,因为它完全按照我们告诉它要做什么(“完成句子”)。这种通过设计最佳提示来指导模型执行任务的方法被称为提示工程 上面的例子是今天LLM可以实现的基本说明。现在的LLM可以执行各种高级任务,从文本摘要到数学推理到代码生成都可以。

从简单的 Prompt 开始

正如上面的例子,设计 Prompt 是一个不断迭代以达到目标的过程,你可能在问 ChatGPT 前心中就对于完美答案有了一个预期,但我们想要告诉您的是,AI 是需要被调教的,大量的试验所逼近的 Prompt 才会来获得更好的结果。 我们可以尝试先放下「问它一次就能获得好答案」的想法,从最简单的 Prompt 开始,然后再根据我们的目标不断添加元素。 我们以 「让 ChatGPT 教我们学英语」作为例子: 如果需要一个英语老师,我们冒出的第一个念头可能是翻译,那我们就直接开始
这时 ChatGPT 的答案是
OK,答的很不错了,但我们的目的是学英语,能不能尝试让他进入英语老师的角色,多教我们一点东西呢:
ChatGPT 的输出:
还不错了,但好像什么语音语调的部分扯的有点远了,也许我们想要「老师」讲解其中的一些疑难词,那么,我们就可以按照心中的想法继续优化 Prompt:
ChatGPT 的输出:
这样子看起来是不是又变得更好了呢?总而言之,如果我们需要 ChatGPT 帮助我们完成一个复杂的目标,可能涉及许多不同的子任务时,我们可以尝试将任务分解为更简单的子任务,并随着获得更好的结果而不断构建。 这避免了在提示设计过程中一开始就添加过多的复杂性。

好的 Prompt 应该遵循的准则

具体而精确

在上文的「英语老师」的例子中我们可以看到,我们不断地根据需求调整自己的 Prompt,ChatGPT 所返回的答案会逐渐逼近我们的需求。 但是随着不断添加文字说明的过程,很容易陷入想要过于聪明的提示陷阱,从而可能创建不精确的描述。越直接,信息传递就越有效。 在输入文字的时候可以更精确的建议:
  • 正确的语法、拼写和标点符号,避免错别字;
  • 使用简短而没有歧义的句子,例如我喜欢一个人就不是一个好的句子;
  • 使用精确的词语,例如给我3-5个建议就比给我几个建议要好;

元素

当我们尝试写一个更好的 Prompt 时,我们可以参考 Elavis Saravia 总结的优质 prompt 需包含的元素:
  • Context(选填): 背景信息,或者说是上下文信息,这可以引导模型做出更好的反应。
  • Instruction(必须): 指令,即你希望模型执行的具体任务。
  • Input Data(选填): 输入数据,告知模型需要处理的数据。
  • Output Indicator(选填): 输出指示器,告知模型我们要输出的类型或格式。
只要你按照这个框架写 prompt ,模型返回的结果都不会差。 以一个优质的 Prompt 为例:
并非每个元素都一定需要被包含,我们可以根据自己手头的任务进行取舍和调整。