ChatGPT应用端的Prompt解析:从概念、基本构成、常见任务、构造策略到开源工具与数据集

当前,chatgpt的api接口正式开发,迎来了全民aigc的时代。

但最近有进入到chagpt的服务体验群,总觉得大家并不怎么会使用chatgpt,集中体现在prompt构造不合理这个问题上。

因此,这就有了一个prompt工程的问题,对于同一个任务,不同的prompt提示会带来不同的结果,如何设计好的prompt就成为了一个值得重视的问题。

与此相关的Prompt提示工程是一门相对较新的学科,用于开发和优化提示语,以有效地利用语言模型(LM),用于各种应用和研究课题。

例如,研究人员利用提示工程来提高大型语言模型在各种常见和复杂任务上的能力,如问题回答和算术推理。开发人员利用提示工程来设计稳健有效的提示技术,与LLM和其他工具对接。

幸运的是,出于对使用LLM开发的高度兴趣,一个专注prompt提示指南的开源项目被提出,该创建了这个新的提示工程指南,其中包含所有与提示工程相关的最新论文、学习指南、讲座、参考资料和工具。

地址:https://github.com/dair-ai/Prompt-Engineering-Guide

本文以该项目为基础,从Prompt概述、高级用法、开源代码工具、开源数据集等四个个方面进行总结性论述,供大家一起参考。

一、Prompt的概念、构成及常见任务

1、什么是提示,为什么要使用提示

提示包括传递给语言模型的指令和语境,以实现预期的任务。

提示工程是开发和优化提示的实践,以便在各种应用中有效地使用语言模型(LMs)提示工程是人工智能工程师和研究人员改进和有效使用语言模型的一项有用技能。

特别的,prompt作为一个科学的工作,对研究、发现和进步很重要 有助于测试和评估LLM的局限性,可以在LLM的基础上实现各种创新应用。

2、prompt的基本构成

一个标准的prompt由以下几个部分组成,即:说明Instructions、语境Context、输入数据Input data、输出指标Output indicator。

不过,在提示语言模式时,有规律可言。可以牢记几个设置,在使用不同的设置时,会在提示中得到不同的结果。 

其中,一个重要的设置是控制模型在生成提示语完成时的决定性程度。

temperature和top_p是两个重要参数。

一般来说,如果想得到准确的答案,就把这些参数调低,如果想得到更多不同的答案,就把它们调高。

4、一些针对特定任务的prompts

下面介绍几个常用的任务prompt:

1)Text Summarization文本摘要

2)Question Answering问答

3)Text Classification文本分类

4)Role Playing角色扮演

5)Code Generation代码生成

6) Reasoning推理

二、Prompt工程的一些高级用法

1、Few-shot Prompts

2、Chain-of-Thought (CoT) Prompting

Chain-of-Thought (CoT) Prompting指通过指导模型在回答时对任务进行推理,可以进一步提高提示的效果,这对需要推理的任务非常有用。

具体的,可以把它和少量的提示结合起来,以获得更好的效果,即在没有范例的情况下,可以做zero shot的CoT。

3、Zero-Shot CoT

Zeroshot COT指的是在原有prompt上增加 Let’s think step by step 的提示语

4、Self-Consistency

Self-Consistency自我一致性旨在改进思维链提示中所使用的合理性解码。

具体的,可以通过少量的CoT对多个不同的推理路径进行取样,并利用这些代数来选择最一致的答案,这有助于提高CoT提示在涉及算术和常识性推理的任务中的表现。

5、Generate Knowledge Prompting

Generate Knowledge Prompting涉及到使用作为背景的一部分提供的额外知识,以改善复杂任务的结果,如常识推理。

例如,生成的知识提示包括两步:

(i)使用少量的演示,从语言模型中生成与问题相关的知识陈述;

(ii)使用第二个语言模型对每个知识陈述进行预测,然后选择置信度最高的预测。

6、Program-aided Language Model (PAL)

思考链提示是一个很好的例子,说明如何引导模型在复杂的推理任务中表现得更好。

 程序辅助语言模型(PAL)使用LLM来读取问题并生成程序作为中间推理步骤。

然而,有时CoT是不够的,因为它只依赖于模型生成的文本。

7)ReAct

ReAct是一个框架,LLM被用来以交错的方式生成推理痕迹和特定任务的行动。

生成推理跟踪允许模型诱导、跟踪和更新行动计划,甚至处理异常。

行动步骤允许与外部资源(如知识库或环境)对接并收集信息。

ReAct允许LLM与外部工具互动,以检索更多的信息,从而获得更可靠和真实的反馈。

三、开源工具与代码组件集合

1、AI Test Kitchen

地址:https://aitestkitchen.withgoogle.com

2、betterprompt

地址:https://github.com/krrishdholakia/betterprompt

3、DreamStudio 

地址:https://beta.dreamstudio.ai

4、DUST

地址:https://dust.tt

5、Dyno

地址:https://trydyno.com

6、EmergentMind

地址:https://www.emergentmind.com

7、EveryPrompt

地址:https://www.everyprompt.com

8、GPT Index

地址:https://github.com/jerryjliu/gpt_index

9、GPTTools

地址:https://gpttools.com/comparisontool

10、hwchase17/adversarial-prompts

地址:https://github.com/hwchase17/adversarial-prompts

11、Interactive Composition Explorer

地址:https://github.com/oughtinc/ice

12、LangChain

地址:https://github.com/hwchase17/langchain

13、Lexica

地址:https://lexica.art

14、loom

地址:https://github.com/socketteer/loom

15、Metaprompt

地址:https://metaprompt.vercel.app/?task=gpt

16、OpenAI Playground

地址:https://beta.openai.com/playground

17、OpenPrompt

地址:https://github.com/thunlp/OpenPrompt

18、Playground

地址:https://playgroundai.com

19、Prodia

地址:https://app.prodia.com/#/

20、Prompt Base

地址:https://promptbase.com

21、Prompt Engine

地址:https://github.com/microsoft/prompt-engine

22、Prompt Generator for OpenAI’s DALL-E 2

地址:http://dalle2-prompt-generator.s3-website-us-west-2.amazonaws.com

23、Promptable

地址:https://promptable.ai

24、PromptInject

地址:https://github.com/agencyenterprise/PromptInject

25、Prompts.ai

地址:https://github.com/sevazhidkov/prompts-ai

26、PromptPerfect

地址:https://promptperfect.jina.ai/

27、Promptly

地址:https://trypromptly.com/

28、PromptSource

地址:https://github.com/bigscience-workshop/promptsource

29、Promptist

地址:https://promptist.herokuapp.com/

30、Scale SpellBook

地址:https://scale.com/spellbook

31、sharegpt

地址:https://sharegpt.com

32、ThoughtSource

地址:https://github.com/OpenBioLink/ThoughtSource

33、Visual Prompt Builder

地址:https://tools.saxifrage.xyz/prompt

四、Prompt相关数据集

1、Anthropic’s Red Team dataset

地址:https://github.com/anthropics/hh-rlhf/tree/master/red-team-attempts)

2、Awesome ChatGPT Prompts

地址:https://huggingface.co/datasets/fka/awesome-chatgpt-prompts

3、DiffusionDB

地址:https://github.com/poloclub/diffusiondb

4、Midjourney Prompts

地址:https://huggingface.co/datasets/succinctly/midjourney-prompts

5、P3 – Public Pool of Prompts

地址:https://huggingface.co/datasets/bigscience/P3

6、PartiPrompts

地址:https://parti.research.google

7、Real Toxicity Prompts

地址:https://allenai.org/data/real-toxicity-prompts

8、Stable Diffusion Dataset

地址:https://huggingface.co/datasets/Gustavosta/Stable-Diffusion-Prompts

9、WritingPrompts

地址:https://www.reddit.com/r/WritingPrompts)

总结

本文主要以Prompt-Engineering-Guide项目为基础,从Prompt概述、高级用法、开源代码工具、开源数据集等四个个方面进行总结性论述。

其中比较有意思的是融合外部知识让llm左脚踩右脚进行自我优化,包括Generate Knowledge Prompting、PAL以及REC,这三篇文章对应于文末的三篇参考文献,感兴趣的朋友可以进行查阅,增进自己的理解。

参考文献

1、https://github.com/dair-ai/Prompt-Engineering-Guide
2、https://arxiv.org/pdf/2110.08387.pdf
3、https://arxiv.org/pdf/2211.10435.pdf
4、https://arxiv.org/pdf/2210.03629.pdf

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

就职于360人工智能研究院、曾就职于中国科学院软件研究所。

       ​

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注