GPT-4提示工程大赛冠军的技巧

852 阅读5分钟

前言

去年 11 月 8 日,新加坡政府科技局(GovTech)组织举办了首届 GPT-4 提示工程(Prompt Engineering)竞赛。数据科学家 Sheila Teo 最终夺冠。之后,Teo 发布了一篇题为《我如何赢得了新加坡 GPT-4 提示工程赛》的博客文章,慷慨分享了其获胜法门。

具体技巧

提示工程是一门融合了艺术和科学的学科 —— 它既需要对技术的理解,也需要创造力和战略思维。

本文包含以下内容,其中 🔵 是指适合初学者的提示工程技术,而 🔴 是指进阶技术。

  1. [🔵] 使用 CO-STAR 框架来搭建 prompt 的结构
  2. [🔵] 使用分隔符为 prompt 设置分节
  3. [🔴] 使用 LLM 防护围栏创建系统 prompt
  4. [🔴] 仅使用 LLM 分析数据集,不使用插件或代码 —— 附带一个实操示例:使用 GPT-4 分析一个真实的 Kaggle 数据集。

CO-STAR

a0463110-a50e-4ac2-a7b1-8b30c001be42.png

其工作方式为:

  • (C) 上下文(Context):提供与任务有关的背景信息。这有助于 LLM 理解正在讨论的具体场景,从而确保其响应是相关的。
  • (O) 目标(Objective):定义你希望 LLM 执行的任务。明晰目标有助于 LLM 将自己响应重点放在完成具体任务上。
  • (S) 风格(Style):指定你希望 LLM 使用的写作风格。这可能是一位具体名人的写作风格,也可以是某种职业专家(比如商业分析师或 CEO)的风格。这能引导 LLM 使用符合你需求的方式和词语给出响应。
  • (T) 语气(Tone):设定响应的态度。这能确保 LLM 的响应符合所需的情感或情绪上下文,比如正式、幽默、善解人意等。
  • (A) 受众(Audience):确定响应的目标受众。针对具体受众(比如领域专家、初学者、孩童)定制 LLM 的响应,确保其在你所需的上下文中是适当的和可被理解的。
  • (R) 响应(Response):提供响应的格式。这能确保 LLM 输出你的下游任务所需的格式,比如列表、JSON、专业报告等。对于大多数通过程序化方法将 LLM 响应用于下游任务的 LLM 应用而言,理想的输出格式是 JSON。

CONTEXT

I want to advertise my company’s new product. My company’s name is Alpha and the product is called Beta, which is a new ultra-fast hairdryer.

OBJECTIVE

Create a Facebook post for me, which aims to get people to click on the product link to purchase it.

STYLE

Follow the writing style of successful companies that advertise similar products, such as Dyson.

TONE

Persuasive

AUDIENCE

My company’s audience profile on Facebook is typically the older generation. Tailor your post to target what this audience typically looks out for in hair products.

RESPONSE

The Facebook post, kept concise yet impactful.

分隔符使用

分隔符可以使用任何通常不会同时出现的特殊字符序列,举些例子:###、===、>>>

使用的分隔符是 ###,同时每一节都带有完全大写的标题以示区分,如 EXAMPLE CONVERSATIONS 和 EXAMPLE OUTPUTS。前置说明部分陈述了要分类的对话是在 <<>> 中,这些对话是在 prompt 末尾提供,也不带任何解释说明文本,但由于有了 <<< 和 >>> 这样的分隔符,LLM 就能理解这就是要分类的对话。

另一种方法是使用 XML 标签作为分隔符。XML 标签是使用尖括号括起来的成对标签,包括开始和结束标签。比如 和 。这很有效,因为 LLM 在训练时就看过了大量用 XML 标注的网络内容,已经学会了理解其格式。

系统提示词

System Prompts 中的指令通常包含以下类别:

  • 任务定义,这样 LLM 在聊天过程中能一直记得要做什么。

  • 输出格式,这样 LLM 能一直记得自己应该如何响应。

  • 防护围栏,这样 LLM 能一直记得自己不应该如何响应。防护围栏(Guardrails)是 LLM 治理方面一个新兴领域,是指为 LLM 配置的可运行操作的边界。

举个例子,System Prompt 可能是这样的:

You will answer questions using this text: [insert text].You will respond with a JSON object in this format: {“Question”: “Answer”}.If the text does not contain sufficient information to answer the question, do not make up information and give the answer as “NA”.

You are only allowed to answer questions related to [insert scope]. Never answer any questions related to demographic information such as age, gender, and religion.

仅使用 LLM 分析数据集,不使用插件或代码

LLM 擅长识别模式和趋势。这种能力源自 LLM 训练时使用的大量多样化数据,这让它们可以识别出可能并不显而易见的复杂模式。
这让他们非常适合处理基于模式发现的任务,比如:

  • 异常检测:基于一列或多列数值识别偏离正常模式的异常数据点。

  • 聚类:基于列之间的相似特征对数据点进行分组。

  • 跨列关系:识别列之间的综合趋势。

  • 文本分析(针对基于文本的列):    基于主题或情绪执行分类。

  • 趋势分析(针对具有时间属性的数据集):识别列之中随时间演进的模式、季节变化或趋势。

对于这些类型的基于模式的任务,实际上相比于使用代码,仅使用 LLM 可能还能在更短的时间内得到更好的结果。

4 种提示工程技术:

1. 将复杂任务分解为简单步骤(“Use this step-by-step process and do not use code”)

2. 索引每一步的中间输出(分隔符)

3. 设置 LLM 的响应的格式(MD)

4. 将指令与数据集分离开(“If you understand, ask me for my dataset.”)