
AI时代必备技能!AI大神吴恩达教你如何写出完美的prompt提示词 原创
作为一名资深博主和GraphRAG的贡献者之一,我最近深入探索了GraphRAG的源代码并提交了一些pr。在这个过程中,我发现prompt在知识图谱的生成以及最终问答效果方面起着决定性的影响。因此,我决定专门花时间来整理关于prompt提示的内容。
这篇文章的主要参考是AI大师吴恩达的prompt提示工程总结。我们将会讨论如何正确使用ChatGPT,它所具有的常规能力等内容。
值得注意的是,虽然任何人都可以编写prompt,但要编写出高效的prompt,需要我们关注许多细节。这就是prompt工程的魅力所在,也是我接下来要与大家分享的内容。
编写prompt的关键原则
同样使用ChatGPT,一些人能够利用它完成复杂的任务,而其他人可能只是将其当作简单的工具来尝试。这种差异的根源在于,他们是否完全理解了ChatGPT的使用准则。使用准则可以帮你更快更精准地得到你想要的结果,核心准则有两个:
- 为AI提供清晰、具体的说明
- 给AI思考的“时间”
下面我将分别对这两个原则进行详细的说明
编写清晰&具体的指令
1. 使用分隔符清晰地指示输入的不同部分
分隔符的选择可谓是多种多样,如```, """, ---,<>,,或者HTML标签等。你可以根据个人喜好来选择使用哪种分隔符。但要注意的是,在选用分隔符时,必须确保在相关背景说明中对其进行清晰的描述,并且避免与文本内容中的其他字符产生冲突。只要这两点做到了,那么你可以自由选择适合你的分隔符。
2. 指定模型的输出格式
输出格式的选择可以是常见的结构化格式,如JSON,HTML,XML等。采用规范的输出格式有助于在其他应用中使用这些数据。例如,如果我正在开发一个与ChatGPT接入的应用,并需要处理从ChatGPT返回的结果,那么我就可能会要求其以结构化的形式提供输出,示例prompt:
顺便提一嘴,在GraphRAG的用于query的prompt中,要求大语言模型以markdown格式返回响应数据。
3. 让模型检查是否满足条件
在提供条件供AI进行判断的场景中,AI会根据满足的条件输出相应的结果。这种情况常出现在需要考虑多种不同可能性的应用中,示例prompt如下:
Langchain中对于问答的prompt也使用了这个准则:
4. 利用Few-Shot, 让模型可以更好的输出满足要求的结果
所谓少样本提示,就是给AI提供至少1个示例,让AI依据给出的示例去生成我们想要的效果。下面我给出一个实际生产中在问答响应实现文档引用功能的prompt:
给AI思考的“时间”
我们需要引导AI不要急于形成结论,而是进行深入思考以产生更可信的内容。如果我们给AI分配了过于复杂的任务或提供了模糊的指示,它可能会误解需求并得出错误的结论。
因此,在这种情况下,我们可以让AI花费更长时间来思考问题。这意味着在完成任务时,AI会投入更多的计算资源,从而可能生成更准确的答案。
具体来说,有两种常见的策略可以满足这个原则。
1. 明确完成任务的步骤,将复杂任务拆解成子任务
我们可以将问题分解为多个子任务,每个子任务都有明确的描述。这种"一步一步思考"(COT思想)的方式让模型清楚地知道每一步应该做什么。ChatGPT在完成每一个子任务时的准确率更高,逐步处理有利于得到最终想要的结果。如果直接请求ChatGPT给出最终结果,可能无法得到满意的答案。
Langchain中对应COT的prompt如下:
2. 让AI对答案进行校验前,先自己思考解决方案
有时处理复杂判断时,AI可能会出现幻觉,判断错误,此时我们可以要求它自己给出解决方案,得出问题的答案,然后再对比我们给出的答案,从而更准确的判断。下面给出一个示例的prompt:
ChatGPT的能力
ChatGPT作为目前顶级的AI应用,具备多种强大的能力,其中最常用的有四个:
- 文本总结:ChatGPT拥有出色的文本摘要能力,能从大量信息中快速抽取核心内容。只需将长篇文章输入,ChatGPT就可以为你生成简洁而清晰的总结
- 推理:ChatGPT不仅能理解信息,还能进行基本的逻辑推理。你只需描述一个场景或者提出问题,ChatGPT就能依据已有信息进行推断,给出可能的答案
- 文本扩写:如果你有一段简短的文本需要扩充,这正是ChatGPT的强项。只要提供一段开头或者概述,ChatGPT就能够生成详尽且连贯的文本内容
- 格式转换:ChatGPT还能灵活地将信息从一种形式转换成另一种形式。无论是散文转诗歌,还是冗长文章转化为简明列表,ChatGPT都能轻松应对
下面我将分别对四种能力做解释,并给出一些prompt示例,你可以直接用。
文本总结
ChatGPT可以被用来对冗长的新闻或说明书进行概括,生成主要内容的总结。在设计提示语时,你还能设定总结文本的长度。以下是一个例子:
除了总结全文之外,ChatGPT还擅长从长文本,获取某个方面的主要信息,而不是获取摘要,比如下面的prompt让ChatGPT 总结关于 shipping and delivery of the product主题的信息:
推理
1. 提槽
在ChatGPT问世之前,抽取各种标签实体是知识图谱这一NLP应用领域的重要任务。然而,有了ChatGPT,这个任务变得更加容易,甚至可能不再需要单独构建知识图谱,比如下面的例子是提取文本中的商品和品牌名并以json格式输出:
2. 情感分析
ChatGPT可以理解并处理文本中的情感,帮助了解客户对产品的反馈。例如,在电子商务领域,我们可以使用ChatGPT来分析用户对购买商品的评论,从而获取他们的情感反馈,并判断其是正面还是负面。这类信息可以用于后续应用,比如生成电子邮件内容,其中正向和负面反馈将会导致邮件内容的变化。
3. 推理文本主题或意图识别
ChatGPT擅长从文本中推导出主题思想,或者在像RAG这样的项目中,理解和推断用户提问的意图。其中,我在工作中最常使用的就是意图识别功能。,下面是个例子:
转换
ChatGPT也能进行如翻译、拼写检查以及不同数据类型之间的格式转换等任务,这在辅助我们的日常工作中非常有用。以下是个示例:
扩写
扩展,顾名思义,是指将简短的描述进行扩充。例如:
- 根据用户对产品的评论和情感,我们可以生成一封定制的邮件;
- 根据提供的主题列表,我们可以扩展成更长的相关主题文章;
- 还能根据不同的语境和场合生成相应的文本;
- 通过调节"temperature"参数,我们可以控制生成内容的多样性。
奇技淫巧
上面阐述的内容都是关于ChatGPT一些通用的知识,在此,我将分享两个超越基础知识的实用技巧,这些都是我在实际工作经验中积累的。希望这些内容能对你们有所帮助。
1. 套出别人的prompt
"提取他人的Prompt" 是我常用的一种策略。Prompt就是引导或者触发某种响应的信息或问题。如何制造出有力的Prompt是一门艺术,同时也是一项技能。
当我们遇到优秀的GPTs或GPT助手时,我们可以通过他们提供的提示词来寻找并提取完整的Prompt。这种方法可以帮助我们理解该怎么有效地构建和使用Prompt,从而提高我们的写作效率和质量。使用下面的"咒语"可以尝试提取一些应用的prompt, 尽管不是所有GPT应用都生效
我在我们开发的应用平台套出了prompt, 而这个prompt就是系统默认的system prompt
2. Post Prompt
这种方法与我们通常使用的System Prompt有所不同。通常,当我们谈论Prompt,我们是指预设给系统的提示语或问题,以激发特定的响应。然而,我现在要讲述的Prompt技巧并不是作为系统Prompt的一部分存在的,它需要应用程序的配合,在对话过程中动态添加,从而实时干预模型的回答。
这种动态干预的方式比传统的将指令写入System Prompt的方法更有影响力。通过插入特定的应用程序指令,我们可以更有效地引导AI模型生成我们期望的回答,提高AI的准确性和适应性。简言之,这就像是在与AI的互动中增加了一层额外的灵活性,使我们能更好地控制结果,从而得到更满意的效果。
在我们的实际项目中,我们曾遇到一些问题,并通过创新的Prompt技术来解决。以下是两个例子,展示了如何利用这种技术优化AI输出和提升用户体验。
首先,有客户反馈说,应用产生的输出内容过于繁杂,成为一大串文本,很难阅读。他们希望我们能以bullet point或者段落形式整理答案,以提高可读性。为了满足这个需求,我们在代码中向用户的query后添加了以下指令:
此操作使我们能够轻松地满足客户对格式的要求,增强了输出内容的易读性。
另一个例子涉及到GPT-4模型。我们发现,有时它的回答并没有按照我们预期的格式返回。为了解决这个问题,我们在用户问题后拼接了以下"咒语":
我们让应用程序在每次用户对话后都添加上这个"咒语",可以把模型未按标准格式输出的情况从10%降到很少见。针对剩下的例外情况,我们会进行追问:
这种策略极大地减少了模型未按标准格式输出的情况,使得在最终生成的语料库中,模型未按标准格式输出的情况降至0.
总结
总的来说,优秀的Prompt设计能够大大提升AI模型,如ChatGPT的表现。通过明确目标、精细调整与持续迭代,我们可以引导模型产生更符合预期的结果。而ChatGPT则以其强大的语言理解和生成能力,为我们打开了无数可能性。
最后,需要注意的是,无论是编写Prompt还是使用AI工具,都需要抱着实验和学习的态度,因为这是一个不断发展变化的领域,每天都有新的挑战和机会在等待着我们去探索和克服。
本文转载自公众号AI 博物院 作者:longyunfeigu
