Prompt 万能框架
在编写 Prompt 时,从 0 到 1 的编写出第一版 Prompt 往往是最难的,而基于已有 Prompt 利用各种技巧进行优化则相对简单。善于解决'数理问题'的我们,在面对这样一个偏'文理问题'的任务时,就像小时候写作文一样难以提笔。为了解决这个问题,我们使用了一套'万能模版',把一个 Prompt 拆分成了'立角色 + 述问题 + 定目标 + 补要求'这四个部分,希望通过结构化的拆分完成这最困难的一步。无论面对什么任务,利用这个模版都可以得到一个'及格'的 Prompt。
对与 Prompt 的作用和定位,其核心思想是根据我们的问题调用模型的能力。我们要通过提问的方式,明确的让模型知道我们想要什么,我们的目标是什么。从这个基本思想出发,Prompt 应该包含以下几点:
- 问题是什么: 首先你要告诉模型你的问题是什么,你的任务是什么,要尽量描述清楚你的需求。
- 你要做什么: 下面你需要告诉大模型具体要做什么,比如做一份攻略,写一段代码,对文章进行优化,等等。
- 有什么要求: 最后我们往往还需求对任务补充一些要求,比如按特定格式输出,规定长度限制,只输出某些内容,等等。
通这 3 部分的描述我们就把'要大模型做什么'描述清楚了。这个想法十分自然,即便不是大模型,而是希望其他人为你完成某项任务,往往也需要通过这 3 部分把问题描述清楚。由于这仅仅是第一版 Prompt,你不需要描述的过于详细,也不需要使用技巧,只需要用简练的语言把这几部分描述清晰即可。
以下是几个示例:
例 1:生成产品摘要
- 问题是什么: 你的任务是帮我生成一个产品的简短摘要。
- 你要做什么: 我会给你产品的需求文档,及用户对产品的评价,请结合这些信息概括产品的功能及现状,为我生成一份产品摘要。
- 有什么要求: 请尽量概括产品的特点,并用轻松幽默的语言风格进行编写,摘要的字数不要超过 50 个字。
例 2:生成代码注释
- 问题是什么: 你的任务是帮我的代码生成注释。
- 你要做什么: 我有一段 python 代码,需要你对代码的内容进行分析,并为代码添加注释。
- 有什么要求: 请结合代码内容,尽量详细的补充注释,不要遗漏,每条注释请以'comment:'作为前缀。
例 3:生成测试用例
- 问题是什么: 你的任务是帮我设计一款产品的测试用例。
- 你要做什么: 我会提供给你产品的需求文档,需要你结合需求的功能描述进行测试用例的编写。
- 有什么要求: 请结合需求中功能的结构,对测试点进行梳理,并有层级的输出测试用例,请保证每一个功能的测试点没有遗漏。
以上是 3 个简单的示例,让大家更直观的感受这 3 部分的含义。在实际应用中这 3 部分的内容会比例子中复杂的多,各部分内容的细化会在后续展开。
角色与能力调度
在描述清楚任务后,我们就需要调度模型的能力去完成我们的任务。不同的任务需要用到不同的能力,这往往依赖人为的拆分。我们可以想像,当我们让一个小白帮我们完成一项任务时,我们需要对任务进行分解,并告诉他每一步需要怎么做,以此来让他完成一项复杂的任务。对于大模型而言,这当然也是试用的,甚至十分好用,这在第 5 章的


