24 / 05 / 15

如何写好提示词(Prompt)?

我经常在各种渠道(飞书文档,推特,Blog 等)读到并学习关于提示词的分享,但一直没有一个地方能够将一些经验与内容汇总并在下次面临写提示词时能够抬手即用。

于是我将之前读到的一些不错的关于提示词的分享记录在这里,Blog 总是一个固定的地方,能够快速回到这里并查看。

提示词

什么是提示词 (Prompt)?

我不是一个 Prompt 研究专家,按照我为数不多的 Prompt 编写与使用经验来看,提示词就是告知 AI 如何理解你的提问,如何进行回复的指令。提示词写的好可以帮你和 AI 双方都可以有更好的问答体验,使交互质量更高。

下面几个小节来自:我如何夺冠新加坡首届 GPT-4 提示工程大赛 ,可能有部分删改。中文翻译版本

CO-STAR 框架

什么是 CO-STAR 框架?

  • C (Context) 上下文: 为任务提供背景信息。

  • O (Objective) 目标: 明确你要求大语言模型完成的任务。

  • S (Style) 风格: 明确你期望的写作风格。

  • T (Tone) 语气: 设置回应的情感语调。

  • A (Audience) 受众: 识别目标受众。

  • R (Response) 响应: 规定输出的格式。

CO-STAR 框架的使用示例:

# CONTEXT(上下文) # 我想推广公司的新产品。我的公司名为 Alpha,新产品名为 Beta,是一款新型超快速吹风机。 # OBJECTIVE(目标) # 帮我创建一条 Facebook 帖子,目的是吸引人们点击产品链接进行购买。 # STYLE(风格) # 参照 Dyson 等成功公司的宣传风格,它们在推广类似产品时的文案风格。 # TONE(语调) # 说服性 # AUDIENCE(受众) # 我们公司在 Facebook 上的主要受众是老年人。请针对这一群体在选择护发产品时的典型关注点来定制帖子。 # RESPONSE(响应) # 保持 Facebook 帖子简洁而深具影响力。

CO-STAR 框架提供了一种有组织的方式提供所有关键任务信息,确保响应完全针对你的需求并进行优化。

使用分隔符进行文本分段

分隔符是特殊的符号,它们帮助大语言模型(LLM)辨识提示中哪些部分应当被视为一个完整意义的意义单元。任务越复杂,合理使用分隔符进行文本分段对模型的反应影响越明显。

分隔符可以是足够独特的任意符号:###,===,>>> 等。

一个更好的推荐是: 将分隔符用作 XML 标签。 因为大语言模型已经接受了大量包含 XML 格式的网页内容的训练,因此能够理解其结构。

示例:

分类以下对话的情感,分为正面和负面两类,根据给出的例子进行分类。请直接给出情感分类结果,不需要添加任何引导性文本。 <classes> 正面 负面 </classes> <example-conversations> [Agent]: 早上好,今天我能如何帮助您? [Customer]: 这个产品太糟糕了,一点都不像广告上说的那样! [Customer]: 我非常失望,希望全额退款。 [Agent]: 早上好,今天我能怎么帮您? [Customer]: 嗨,我只是想说我真的对你们的产品印象深刻。它超出了我的期望! </example-conversations> <example-classes> 负面 正面 </example-classes> <conversations> [Agent]: 你好!欢迎来到我们的支持。今天我能怎么帮您? [Customer]: 嗨,我只是想让你知道我收到我的订单了,它太棒了! [Agent]: 听到这个真好!我们很高兴你对购买感到满意。还有其他我能帮忙的吗? [Customer]: 不,就这些。只是想给一些正面的反馈。谢谢你们的优质服务! [Agent]: 你好,感谢你的联系。今天我能怎么帮您? [Customer]: 我对我最近的购买非常失望。这完全不是我所期待的。 [Agent]: 很遗憾听到这些。您能提供更多细节以便我帮助您吗? [Customer]: 产品质量差,而且到货晚。我对这次经历非常不满。 </conversations>

通过这种结构化的分隔符使用方式,可以确保 GPT 精确地按照您的期望响应。

利用大语言模型(LLM)的系统提示创建问答机制

此方法适用于有提供「系统提示」功能的语言模型或产品。例如 ChatGPT 的 Customize ChatGPT 功能。

系统提示是通过 Chat Completions API 编程方式交互时使用的术语,它是你向大语言模型提供的关于其应如何响应的额外指示。系统提示就像一个过滤器,大语言模型会在回应你的新提问之前自动应用这一过滤器。

系统提示一半包括以下几个部分:

  • 任务定义: 确保大语言模型(LLM)在整个对话中清楚自己的任务。

  • 输出格式: 指导 LLM 如何格式化其回答。

  • 操作边界: 明确 LLM 不应采取的行为。这些边界是 LLM 治理中新兴的一个方面,意在界定 LLM 的操作反问。

系统提示示例:

您需要用这段文本来回答问题:[插入文本]。请按照 {"问题": "答案"} 的格式来回答。 如果文本信息不足以回答问题,请以"NA"作答。您只能解答与[指定范围]相关的问题。 请避免回答任何与年龄、性别及宗教等人口统计信息相关的问题。

GPT 回答:

{"这篇文本主要讲了什么?":"文本主要讲述了......"}

仅用大语言模型(LLM)分析数据集,不借助插件或编码(高阶用法)

LLM 在哪些数据集分析类型上不擅长?

描述性统计、相关性分析、统计分析、机器学习等。

LLM 擅长的数据集分析类型:

  • 异常检测: 基于一个或多个列值,识别偏离常态的异常数据点。

  • 聚类: 将具有相似特征的数据点按列分组。

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

  • 文本分析(适用于文本列): 根据主题或情感进行分类。

  • 趋势分析(针对有时间维度的数据集): 识别列中的模式、季节性变化或趋势。

对于这些基于模式的任务,单独使用 LLM 可能实际上会在更短的时间内比使用编写代码产生更好的结果。

如何应用 LLM 来分析数据集?

提示: # CONTEXT # 我经营葡萄酒生意。我手头有一份包含客户信息的数据集:[出生年份,婚姻状况,收入,子女数目,自上次购买至今天数,消费金额]。 ############# # OBJECTIVE # 我希望你利用这份数据集将我的客户进行分组,随后为我提供针对每个群体的市场营销策略。请按以下步骤操作,且不要编写代码: 1. CLUSTERS: 利用数据集中的列值对行数据进行聚类,确保同一聚类内的客户在列值上保持相似,而不同聚类的客户则明显不同。确保每一行数据只属于一个聚类。 对于每个确定的聚类, 2. CLUSTER_INFORMATION: 描述聚类的特征。 3. CLUSTER_NAME: 根据[CLUSTER_INFORMATION]解读,为这个客户群体起一个简称。 4. MARKETING_IDEAS: 提出针对此群体的营销策略。 5. RATIONALE: 解释这些[MARKETING_IDEAS]为何对此群体有效。 ############# # STYLE # 商业分析报告 ############# # TONE # 专业,技术性 ############# # AUDIENCE # 面向我的商业伙伴。让他们确信你的营销策略是经过深思熟虑的,并完全得到数据支持。 ############# # RESPONSE: MARKDOWN REPORT # <对于[CLUSTERS]中的每个聚类> — 客户群组:[CLUSTER_NAME] — 简介:[CLUSTER_INFORMATION] — 营销想法:[MARKETING_IDEAS] — 理由:[RATIONALE] <附录> 提供一个表格,记录每个聚类的行号,以佐证你的分析。表头如下:[[CLUSTER_NAME], 行号列表]。 ############# # START ANALYSIS # 如果你已经理解,请向我请求我的数据集。

技巧:

  1. 将复杂任务简化成步骤;

  2. 标记并引用中间输出;

  3. 优化响应格式;

  4. 将任务指令与数据集分离。

Powered by Gridea