当前,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人工智能研究院、曾就职于中国科学院软件研究所。