AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


一文掌握Prompt的道法术器,助你超越90%的人-零基础学习大模型第6篇
发布日期:2024-04-11 07:35:12 浏览次数: 2326


一文掌握写好Prompt的道法术器,助你超越90%的人

前言



本文花了我1天时间整理好的,篇幅较长,阅读需要耐心,但我敢保证你看到最后,能在Prompt层面能超越90%的人,各位看客老爷,看在辛苦码字的份上,动动您的发财小手,给个关注不过分吧。


本文旨在从道法术器四个层面为广大读者揭示写好Prompt的奥秘,帮助大家轻松掌握这一技能,让AI助手秒变文案大师!我们将从了解Prompt的基本要素开始,逐步深入到掌握Prompt的写作技巧,并结合实战演练和常见问题解析,让大家在轻松愉快的阅读中收获满满的知识与技能。


目录



  • 道:规律

  • 法:原则

  • 术:技巧

  • 器:工具



PART/ 01



在Prompt的“道”的层面,我们要理解其背后的根本规律。一个好的Prompt需要符合自然语言的规律,尊重读者AI的阅读习惯,同时也应体现我们的目标和意图。这意味着我们需要深入理解Prompt的本质,即它是如何与AI系统进行交互,如何引导AI生成我们想要的内容的。同时,我们也要明确我们的目标,是希望AI生成什么样的内容,满足什么样的需求。


终极目标:把需求说清楚,AI不是万能的神,也不是你肚子里的蛔虫,不知道你想干啥,除非哪天脑机接口普及了,所以一切原则、方法技巧和工具的目的都是把自己的需求说清楚,你要知道你干什么,并清楚的把它说出来。


指导思想:把AI当做人,使用人话把要表达的内容说的具体、丰富、无歧义。


大模型生成内容的原理:

当用户输入一个Prompt时,系统会首先对Prompt进行分词处理,即分成一个个的token,将其转化为计算机能够理解的格式,然后,系统会将分词后的Prompt与预训练模型中的关键词进行匹配。这些关键词是模型在训练过程中学习到的,与各种任务相关的词汇和短语。一旦匹配成功,模型会根据这些关键词和Prompt的上下文信息,从预训练时学到的知识中检索相关信息。这个检索过程实际上是模型在内部进行的一系列复杂的计算和推理。最终,模型根据检索到的信息和Prompt的具体要求,生成相应的回答或结果。



PART/ 02



在“法”的层面,需要制定一套明确的规则或方法论来指导我们写Prompt。这包括确定Prompt的结构、语气、风格等,以及如何利用关键词和上下文信息来引导AI理解。例如,我们可以采用简洁明了的语言,避免复杂的句子结构和术语,以确保AI能够准确理解我们的意图。同时,我们也可以根据具体的应用场景和需求,制定特定的Prompt写作规则。


首先回顾一下Prompt的结构:


其次,我们看一下OpenAI官方给出的原则:




PART/ 03



在“术”的层面,我们需要掌握具体的技巧和策略。这包括如何选择合适的关键词,如何构建有逻辑性的句子,如何利用上下文信息来增强Prompt的引导力等。这部分也是这篇文章的精华部分,希望大家有耐心的阅读到底,你会发现有意外收获哦。


一、如何写出清晰的指令

OpenAI给出了6条小技巧:

1、把话说详细

尽可能多的提供任何详细信息和上下文。

比如:不要说:“总结会议记录”而是说:“用一个段落总结会议记录。然后写下演讲者的 Markdown 列表以及他们的每个要点。最后,列出发言人建议的后续步骤或行动项目(如果有)。”


2、让模型充当某个角色

你可以让大模型充当一个某领域的专家,他就会更专业更明确回答你的问题。

比如:“你是一个大学里的人工智能领域的教授,请问什么是机器学习” 比“什么是机器学习”得到的结果会更专业丰富。


3、使用分隔符清楚地指示输入的不同部分

三引号、XML 标签、节标题等分隔符可以帮助划分要区别对待的文本节。可以帮助大模型更好的理解文本内容。我最喜欢用"""把内容框起来。

比如:用50个字符总结由三引号分隔的文本。"""在此插入文字"""


4、指定完成任务所需的步骤

如果任务比较复杂,这个时候就需要针对任务进行拆分,最好指定完成这个任务的一系列步骤。明确地写出这些步骤可以使模型更容易去实现它们。这里看一下下面这个实例,也是当今流行的AI写作的案例。


比如:你是一个公众号运营高手,请你写一篇微信公众号文章,写的文章是{如何写好一个Prompt},第一步先写一个标题,标题要足够吸引人,以便能广泛传播;第二步提供内容大纲;第三步根据大纲一步一步的写出大纲的内容;最后针对文章的内容做一下总结。


5、提供例子

可以使用少样本提示few-shot prompt,先给大模型几个例子,让大模型按你的例子来输出。

比如有如下三个推理问题:

1、“ Q1 = '罗杰有五个网球,他又买了两盒网球,每盒有3个网球,请问他现在总共有多少个网球?'A1 = '现在罗杰总共有11个网球。2、 'Q2 = '食堂总共有23个苹果,如果用掉20个苹果,然后又买了6个苹果,请问现在食堂总共有多少个苹果?'A2 = '现在食堂总共有9个苹果。3、'Q3 = '杂耍者可以杂耍16个球。一半的球是高尔夫球,一半的高尔夫球是蓝色的。请问总共有多少个蓝色高尔夫球?' A3 = '现在总共有4个蓝色高尔夫球。' ”

如果直接问Q3得到的答案通常是:“杂耍者总共可以杂耍16个球,其中一半是高尔夫球,所以高尔夫球有16个球的一半,即8个。一半的高尔夫球是蓝色的,所以蓝色高尔夫球有8个的一半,即4个。因此,总共有4个蓝色高尔夫球。”

虽然上面的结果正确,但格式不符合预期,如果在Prompt里把Q1+A1+Q2+A1都给大模型,得到的答案是:“现在总共有4个蓝色高尔夫球。”


6、指定所输出长度

可以要求模型生成指定长度的输出,比如:用两个段落、100个字符概括三引号内的文本。"""在此插入文字"""


二、提供参考的文本


1、让模型使用参考文本作答

给大模型文本或者文档,能大幅度的降低大模型胡说八道的概率。其实就是把大模型当知识库来用。

比如使用月之暗面kimi的例子,把月之暗面公司的简介PDF提供给Kimi,它的回答就更准确和详细。


2. 让模型通过引用参考文本来回答

如果已经给了文本,则可以直接要求模型通过引用所提供文档中的段落来为其答案添加引用。可以提高正确性,增加可验证性。

比如:您将获得一份由三重引号和一个问题分隔的文档。您的任务是仅使用提供的文档回答问题,并引用用于回答问题的文档段落。如果文档不包含回答此问题所需的信息,则只需写:“信息不足”。如果提供了问题的答案,则必须附有引文注释。使用以下格式引用相关段落({“引用”:…})。

"""<在此插入文档>"""

问题:<在此插入问题>


三. 将复杂的任务拆分为更简单的子任务

这和做项目管理是一样的,比如直接推进一个项目集的时候很大概率会失败,如果把项目集拆分成多个子项目,子项目再拆关键任务,关键任务在拆分成子任务,然后再跟进这些子任务,项目成功的概率就会很大。


具体的技巧有以下几个:

1、使用意图分类来识别与用户查询最相关的指令

意图识别是一个很经典的例子。比如在智能客服场景中,用户问了一个问题“我断网了咋整”,你让大模型直接回复其实是挺蛋疼的,但是这时候就可以拆,先拆大分类下的意图识别,再回答具体的问题。


2、对于需要很长对话的对话应用,总结或过滤之前的对话

这个技巧偏开发者。普通用户可以跳过。因为模型具有固定的上下文长度,因此用户和助手之间的对话无法无限期地继续。解决此问题有多种解决方法,第一个是总结对话中的历史记录。一旦输入的大小达到预定的阈值长度,这可能会触发总结部分对话的查询,并且先前对话的摘要可以作为系统消息的一部分包括在内。或者,可以在整个对话过程中在后台异步总结之前的对话。


3、分段总结长文档并递归构建完整总结

就是总结几百页PDF文档的原理,比如让一般的大模型总结一本书,肯定是超Token上限了,所以可以使用一系列查询来总结文档的每个部分。章节摘要可以连接和总结,生成摘要的摘要。这个过程可以递归地进行,直到总结整个文档。


四. 给模型时间“思考”


1、让模型在急于得出结论之前找出自己的解决方案

比如你扔个数学题给大模型,你让他判断对或者不对,你会发现结果很随机,一会对或者不对,但是如果你先让他自己做一遍,再去判断对与不对,结果就会准非常多了。


2、使用内心独白来隐藏模型的推理过程

这条技巧是面对开发者的,对于某些应用程序,大模型用于得出最终答案的推理过程不适合与用户共享。例如,在辅导应用程序中,我们可能希望鼓励学生得出自己的答案,但模型关于学生解决方案的推理过程可能会向学生揭示答案。所以就有了这么一个内心独白的技巧。内心独白的想法是让模型将原本对用户隐藏的部分输出放入结构化格式中,以便于解析它们。然后,在向用户呈现输出之前,将解析输出并且仅使部分输出可见。


3、询问模型在之前的过程中是否遗漏了什么内容

这个技巧在长文本问答中常用,比如我们给了一个文档,要让大模型模型来列出与一个特定问题相关的信息。如果源文档很大,模型通常会过早停止并且无法列出所有相关信息。在这种情况下,通过使用后续的promtp让模型查找之前传递中错过的任何相关信息,通常可以获得更好的性能。

比如我让他根据我的文档,给我列出这个问题在文档中的相关片段:“北京烤鸭到底好吃在哪”,然后让他用JSON格式输出[{"相关片段":"..."},在输出停止以后,我们可以再问一句:

还有更多相关片段吗?注意不要重复摘录。还要确保相关片段包含解释它们所需的所有相关上下文 - 换句话说,不要提取缺少重要上下文的小片段。


五. 使用外部工具


1、使用基于嵌入的搜索实现高效的知识检索

这个时候常常使用检索增强生成 (RAG)来完成,大致步骤如下:

加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 ->

问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 ->

匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给大模型生成回答。


2、使用代码执行来进行更准确的计算或调用外部API

很偏开发者的一个技巧,普通用户可以直接跳过。大家都知道大模型不是真正的强逻辑,是有概率性的,所以要让大模型进行精确的计算这个事情是很难的,除非借用外部的库或API


3、给模型提供特定的功能

很偏开发者的一个技巧,普通用户可以直接跳过。简而言之,你可以通过 API 请求,传递一系列特定的函数描述。告诉模型哪些函数是可用的,以及这些函数的参数应该是什么样的。然后模型可以生成相应的函数参数,这些参数随后会以 JSON 格式通过 API 返回,随后再进行数据库查询、处理,处理完以后返回一个JSON数组给大模型,让大模型输出人类语言输出给用户,有点类似比较火热的Agent。


六. 系统地测试变更

主要是帮助开发者判断更改Prompt(例如新指令或新设计)是否使系统变得更好或更差。毕竟大部分时间的样本量都比较小,很难区分真正有改进还是纯粹的运气。所以,OpenAI建议搞个评估程序,用来判断优化系统的设计是否有效。感兴趣的可以自己去看看:

https://platform.openai.com/docs/guides/prompt-engineering/strategy-test-changes-systematically



PART/ 04



在“器”的层面,我们需要关注工具和资源的使用。这包括选择适合我们的写作工具和平台,以及利用相关的资源和参考资料来丰富我们的Prompt内容。例如,我们可以利用一些专门的Prompt生成工具或平台,或者参考一些优秀的Prompt案例和模板,来帮助我们写出更好的Prompt。下面我们介绍一些工具和别人的模板。

1、思维链(Chain of Thought,CoT):


思维链,是大模型涌现出来的一种神奇能力,是由华人科学家魏杰森Jason Wei在Google研究提出的,随后跳槽到OpenAI在GPT中发挥了巨大的能量。

主要思想是通过向大语言模型展示一些少量的 exapmles,在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果,对涉及计算和逻辑推理等复杂问题,尤为有效。


其中最常见的就是Zero-shot-CoT:通过在问题的结尾附加“Let's think step by step”这几个词,大语言模型能够生成一个回答问题的思维链。


上面提到的所谓“涌现”,在大模型领域指的是当模型突破某个规模时,性能显著提升,表现出让人惊艳、意想不到的能力。比如语言理解能力、生成能力、逻辑推理能力等。一般来说,模型在 100亿(10B) 到 1000亿(100B) 参数区间,可能产生能力涌现。这有点神仙显灵的感觉,哈哈。


2、自洽性:

一种对抗「幻觉」的手段。是对思维链的一个补充,它不仅仅生成一个思路链,而是生成多个思路链,然后取多数答案作为最终答案,本质上就是多数投票提高CoT性能,就像我们做数学题,要多次验算一样。

  • 同样 prompt 跑多次

  • 通过投票选出最终结果


3、思维树:

思维树也是建立在思维链的基础上,大致思路如下:

在思维链的每一步,采样多个分支

拓扑展开成一棵思维树

判断每个分支的任务完成度,以便进行启发式搜索

设计搜索算法

判断叶子节点的任务完成的正确性


4、Prompt调优Prompt:

### 调优 prompt 的 prompt
用这段神奇的咒语,让 ChatGPT 帮你写 Prompt。贴入 ChatGPT 对话框即可。
```1. I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt you provide should be written from the perspective of me making the request to ChatGPT. Consider in your prompt creation that this prompt will be entered into an interface for ChatGpT. The process is as follows:1. You will generate the following sections:
Prompt: {provide the best possible prompt according to my request)
Critique: {provide a concise paragraph on how to improve the prompt. Be very critical in your response}
Questions:{ask any questions pertaining to what additional information is needed from me toimprove the prompt(max of 3). lf the prompt needs more clarification or details incertain areas, ask questions to get more information to include in the prompt}
2. I will provide my answers to your response which you will then incorporate into your next response using the same format. We will continue this iterative process with me providing additional information to you and you updating the prompt until the prompt is perfected.Remember, the prompt we are creating should be written from the perspective of me making a request to ChatGPT. Think carefully and use your imagination to create an amazing prompt for me.You're first response should only be a greeting to the user and to ask what the prompt should be about```
这其实就已经触发了传说中的 agent……


5、Prompt模板资源:

  • https://github.com/linexjlin/GPTs

  • https://promptbase.com/

  • https://github.com/f/awesome-chatgpt-prompts

  • https://smith.langchain.com/hub

  • https://www.waytoagi.com/prompts?tag=1


最后让大家看一个比较复杂的例子,这个例子使用了很多技巧,值得我们好好学习一下。

将科技文章、论文翻译成简体中文的Prompt

你是一位精通简体中文的专业翻译,尤其擅长将专业学术论文翻译成浅显易懂的科普文章。请你帮我将以下英文段落翻译成中文,风格与中文科普读物相似。
规则:- 翻译时要准确传达原文的事实和背景。- 即使上意译也要保留原始段落格式,以及保留术语,例如 FLAC,JPEG 等。保留公司缩写,例如 Microsoft, Amazon, OpenAI 等。- 人名不翻译- 同时要保留引用的论文,例如 [20] 这样的引用。- 对于 Figure 和 Table,翻译的同时保留原有格式,例如:“Figure 1: ”翻译为“图 1: ”,“Table 1: ”翻译为:“表 1: ”。- 全角括号换成半角括号,并在左括号前面加半角空格,右括号后面加半角空格。- 输入格式为 Markdown 格式,输出格式也必须保留原始 Markdown 格式- 在翻译专业术语时,第一次出现时要在括号里面写上英文原文,例如:“生成式 AI (Generative AI)”,之后就可以只写中文了。- 以下是常见的 AI 相关术语词汇对应表(English -> 中文):* Transformer -> Transformer* Token -> Token* LLM/Large Language Model -> 大语言模型* Zero-shot -> 零样本* Few-shot -> 少样本* AI Agent -> AI 智能体* AGI -> 通用人工智能
策略:
分三步进行翻译工作,并打印每步的结果:1. 根据英文内容直译,保持原有格式,不要遗漏任何信息2. 根据第一步直译的结果,指出其中存在的具体问题,要准确描述,不宜笼统的表示,也不需要增加原文不存在的内容或格式,包括不仅限于:- 不符合中文表达习惯,明确指出不符合的地方- 语句不通顺,指出位置,不需要给出修改意见,意译时修复- 晦涩难懂,不易理解,可以尝试给出解释3. 根据第一步直译的结果和第二步指出的问题,重新进行意译,保证内容的原意的基础上,使其更易于理解,更符合中文的表达习惯,同时保持原有的格式不变
返回格式如下,"{xxx}"表示占位符:
### 直译{直译结果}
***
### 问题{直译的具体问题列表}
***
### 意译```{意译结果}```
现在请按照上面的要求从第一行开始翻译以下内容为简体中文:```content```


总结



在与AI的交互中,一个关键的环节就是Prompt,这个看似简单的文本指令,却承载着引导AI理解我们意图、生成我们所需内容的重要使命。一个精准、明确的Prompt,不仅能让AI系统更快速地理解我们的需求,更能提高生成内容的准确性和质量。然而,如何写好一个Prompt,却是一个需要技巧和经验积累的过程。很多人可能在使用AI时,只是简单地输入一些关键词或句子,却往往得不到满意的结果。这正是因为他们没有掌握写好Prompt的精髓。

掌握了以上的道、法、术、器后,相信你肯定能超越90%的人了,但要写好一个Prompt这些还不够,还要在平时不断的练习,找到写Prompt的感觉和心得,最后的最后,给看到底的小伙伴们奖励一个思维导图,如有需要高清图片的可以加我微信 「suxianglun」哦。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询