AI知识库

53AI知识库

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


玩转大模型的第一步——提示词(Prompt)工程【抛砖篇】
发布日期:2024-07-12 19:22:10 浏览次数: 3065 来源:LitGate







前言


AI大模型提示词工程,又名 LLM prompts Project,指的是在使用大型语言模型(如OpenAI的GPT系列)时,用于引导模型生成特定响应的输入,是在使用AI大模型过程中非常重要的一个环节,是模型生成文本的起点。选择合适的Prompt对大模型回答的质量影响非常大,甚至可能会导致截然不同的结果。







Prompt编写框架

我们可以简单的看一下,分别使用下面两个Prompt在LLM的输出中分别会得到什么结果——




Prompt:我想提升我的编程水平,给点建议吧GPT4:提升编程水平需要时间和实践。以下是一些建议,帮助你提高编程技能:1. 学习基础知识:确保你对编程语言的基本语法和概念有扎实的理解。如果你已经熟悉一种编程语言,可以尝试学习另一种,以便了解不同语言之间的异同。2. 多做练习:编程是一项实践性很强的技能,通过不断地练习和编写代码,你可以逐渐提高自己的编程水平。可以从简单的项目开始,逐步尝试更复杂的项目。3. 阅读优秀的代码:阅读别人编写的优秀代码,可以帮助你学习如何编写更高效、简洁和易读的代码。可以在GitHub等开源社区找到许多优秀的项目。4. 参加编程竞赛:参加编程竞赛(如LeetCode、Codeforces等)可以帮助你提高解决问题的能力,并在压力下锻炼编程技巧。5. 学习数据结构和算法:掌握常用的数据结构(如链表、树、图等)和算法(如排序、搜索、动态规划等),可以帮助你更有效地解决问题。6. 学习软件工程原则:了解软件工程的原则和最佳实践,如模块化、重构、测试驱动开发等,可以帮助你编写更高质量的代码。7. 参与开源项目:参与开源项目可以让你在实际项目中应用所学知识,与其他开发者合作,提高自己的编程能力和团队协作能力。8. 交流和分享:加入编程社区,与其他开发者交流,分享你的经验和问题。这可以帮助你从他人的经验中学习,也有助于巩固自己的知识。9. 持续学习:编程技术不断发展,要保持对新技术和工具的关注和学习,以便不断提高自己的编程水平。10. 保持耐心和毅力:提高编程水平是一个漫长的过程,需要不断地学习和实践。保持耐心和毅力,逐步积累经验,你的编程水平会不断提高的。


Prompt:我已经掌握了基础的编程知识,特别是在Java和Python上,现在我想提高我的技能。面临的主要挑战是算法和数据结构。请提供一个清晰的学习路径和推荐资源,帮助我在这些领域提升水平GPT4:学习算法和数据结构是提高编程技能的关键步骤。以下是一些可以帮助你在这些领域提升水平的学习路径和资源。学习路径:1. 理解并掌握基本的数据结构:这包括数组、链表、栈、队列、哈希表、树(包括二叉树和二叉搜索树)、图、堆等。2. 学习并实践基本算法:排序算法(如冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索算法(如线性搜索、二分搜索等)、图算法(如深度优先搜索、广度优先搜索等)。3. 学习并掌握高级数据结构和算法:这包括平衡树(如AVL树、红黑树)、图算法(如Dijkstra算法、Floyd算法、Prim算法、Kruskal算法)、动态规划、贪心算法、回溯算法等。4. 刷题练习:可以通过一些在线编程平台进行练习,如LeetCode、HackerRank、CodeSignal等。5. 参与编程竞赛或挑战:这可以帮助你在实践中提高你的算法和数据结构技能。推荐资源:1. 书籍:- "算法(第4版)":这本书详细介绍了大量的算法和数据结构,是学习这个领域的经典教材。- "算法导论":这本书是计算机科学领域的经典教材,详细介绍了各种算法和数据结构。2. 在线课程:- Coursera上的"Algorithms, Part I"和"Algorithms, Part II":这两门课程由Princeton University提供,详细介绍了各种算法和数据结构。- edX上的"Introduction to Computer Science and Programming Using Python":这门课程由MIT提供,介绍了Python编程以及一些基本的算法和数据结构。3. 在线编程平台:- LeetCode:这个平台上有大量的编程题目,涵盖了各种算法和数据结构,是练习的好地方。- HackerRank:这个平台也有大量的编程题目,你可以选择特定的领域进行练习。4. YouTube频道:- "HackerRank":这个频道上有很多关于算法和数据结构的教学视频。- "freeCodeCamp.org":这个频道上有很多编程教学视频,包括算法和数据结构。希望这些信息对你有所帮助,祝你学习顺利!


前一个提示词,只是简单的一句话,提出了一个简单的诉求,于是LLM大模型给出了一个大而全的宽泛回答,包含了编程学习的各个方面;


但是考虑到提问者的实际情况可能并不是一个完全的初学者,那么大而全的回答很显然缺乏了一些针对性,于是我们使用提示词框架将提问者的诉求描述清楚,于是便得到了更有针对性的回答。


这里用到的提示词编写框架是一个很基础的框架,名为「 ICIO 框架」,框架从四个方面描述提问者的需求


  • Instruction 指令(必须):希望模型执行的具体任务

  • Context背景信息(选填):也可以是上下文信息,有助于引导模型做出更精准的反应

  • Input Data输入数据(选填):告知模型需要处理的具体数据

  • Output Indicator输出指示器(选填):期望模型输出的类型或格式


这里的「ICIO框架」只包含了四个方面,只是在告诉LLM大模型需要执行的任务时,额外有选择性的描述了背景信息以及输入输出,在实际的使用过程中还是远远不够的,于是诞生了「CRISPE框架」,是用于编写复杂内容的提示词框架


  • CR(能力与角色):定义你希望模型扮演的角色和其能力范围

  • I(洞察):提供背景信息和上下文以指导模型

  • S(陈述):明确指出你希望模型执行的任务

  • P(个性):设定模型回答的风格或方式

  • E(实验):让模型提供多种可能的答案选项




Prompt:作为一个专业研究气候变化的科学家,请基于当前的科学共识和最新的研究数据,撰写一篇详细且科学严谨的报告,内容需涵盖气候变化的原因、影响以及可能的解决方案。请采用客观且权威的写作风格,并提供几种不同的结构和论点供选择GPT4:报告一:气候变化综述:原因、影响及解决方案摘要气候变化是一个复杂且紧迫的全球问题,涉及多个领域的科学研究。本报告将基于当前的科学共识和最新的研究数据,分析气候变化的原因、影响和可能的解决方案。1. 气候变化的原因1.1 自然因素1.1.1 太阳辐射变化1.1.2 大气中气溶胶的变化1.1.3 火山活动1.1.4 地球轨道和自转的变化1.2 人为因素1.2.1 温室气体排放1.2.2 土地利用变化1.2.3 大气污染和气溶胶排放2. 气候变化的影响2.1 自然系统2.1.1 极地冰川和冰架的融化2.1.2 海平面上升2.1.3 生态系统变化2.1.4 气候灾害的加剧2.2 人类社会2.2.1 农业和粮食安全2.2.2 水资源2.2.3 全球公共卫生2.2.4 经济发展和国际政治3. 解决方案3.1 减缓气候变化3.1.1 减少温室气体排放3.1.2 促进可再生能源的发展3.1.3 提高能源效率3.1.4 土地利用和城市规划3.2 适应气候变化3.2.1 增强基础设施的抗灾能力3.2.2 发展气候适应的农业技术3.2.3 保护生物多样性和生态系统3.2.4 国际合作与政策制定结论气候变化是一个迫切需要全球共同应对的问题。通过深入了解其原因、影响和可能的解决方案,我们可以为全球气候治理提供更为科学、有效的政策建议。报告二:气候变化:挑战与应对摘要气候变化对全球生态环境和人类社会带来了巨大的挑战。本报告将从科学角度探讨气候变化的原因、影响和应对策略,为应对气候变化提供科学依据。1. 气候变化的挑战1.1 温室气体排放1.2 极端气候事件1.3 生态系统破坏1.4 社会经济影响2. 气候变化的原因2.1 自然因素2.2 人为因素3. 气候变化的影响3.1 环境影响3.2 社会经济影响4. 应对气候变化的策略4.1 减缓策略4.2 适应策略4.3 国际合作与政策制定


下面是没有使用框架的提示词和得到的响应——

Prompt:帮我撰写一篇气候变化相关的科学报告GPT4:标题:气候变化的科学分析及其全球影响一、引言气候变化是我们当今世界面临的最大挑战之一,其影响不仅局限于环境,还涉及到社会经济和政治领域。本报告将对气候变化的科学原理进行深入探讨,并分析其对全球的影响。二、气候变化的科学原理气候变化主要指的是全球气温的升高,其原因主要是由于人类活动导致的温室气体排放增加。这些温室气体,包括二氧化碳、甲烷和氮氧化物等,能够吸收和反射地球表面反射的热量,从而导致全球气温升高,这就是所谓的温室效应。三、气候变化的全球影响1. 生物多样性的减少:由于气候变化,许多物种的生存环境正在发生改变,一些物种可能无法适应这种变化,从而导致物种灭绝。2. 农业生产的影响:气候变化可能导致降雨模式的改变,影响农作物的生长,从而影响农业生产。3. 海平面上升:由于全球变暖,导致极地冰盖融化,海平面上升,威胁沿海城市和岛国。4. 人类健康的影响:气候变化可能导致疾病的传播范围扩大,例如疟疾和登革热等。四、结论气候变化是一个全球性的问题,需要全球的努力来解决。我们需要采取行动,减少温室气体的排放,保护我们的地球。同时,我们也需要做好应对气候变化的准备,例如改变农业生产方式,建立灾害应对机制等。五、建议为应对气候变化,我们建议从以下几个方面入手:1. 发展可再生能源,减少化石燃料的使用。2. 提高能源效率,减少能源消耗。3. 保护和恢复森林,提高碳汇能力。4. 改变消费模式,实现低碳生活。六、总结气候变化是一个长期且复杂的问题,需要我们全球共同努力,采取有效措施,才能真正实现气候变化的缓解和适应。希望此报告能引起更多人对气候变化问题的关注,并采取实际行动。参考文献:[1] IPCC, 2014: Climate Change 2014: Synthesis Report. Contribution of Working Groups I, II and III to the Fifth Assessment Report of the Intergovernmental Panel on Climate Change [Core Writing Team, R.K. Pachauri and L.A. Meyer (eds.)]. IPCC, Geneva, Switzerland, 151 pp.[2] NASA, 2020: Climate Change: How Do We Know? Retrieved from https://climate.nasa.gov/evidence/.


不难看出,使用了「CRISPE框架」重构提示词之后,回答明显更有条理更加全面,各个点之间的逻辑关联度也更强。


但Prompt工程还远不止于使用几个逻辑框架这么简单。


LangGPT

LangGPT是Language For GPT的简称,中文名为结构化提示词,其理论基础是我们提出的一套模块化、标准化的Prompt编写方法论。那么什么是结构化Prompt呢?其实结构化的思想很普遍,结构化内容也很普遍,我们日常写作的文章,看到的书籍都在使用标题、子标题、段落、句子等语法结构。而结构化Prompt的思想通俗点来说就是像写文章一样写Prompt。


其实,「CRISPE框架」也可以视为一种结构化,但主要是纯思维层面的“结构化”,在具体的形式上还是会有较大的差异性,具体“模板化”还是有比较远的具体。我们所认为的结构化Prompt需要足够的“模板化”,可读性良好,便于对Prompt进行优化迭代,一个没有太多Prompt编写经验的人拿到一个结构化的Prompt后也可以很方便的按照自己的需求进行修改投入实践和使用。


看到下面的示例,你一眼就能明白结构化Prompt有多么清晰——


基于上述诗人prompt的例子,说明结构化prompt的几个概念:


# Role: 诗人
## Profile- Author: YZFly- Version: 0.1- Language: 中文- Description: 诗人是创作诗歌的艺术家,擅长通过诗歌来表达情感、描绘景象、讲述故事,具有丰富的想象力和对文字的独特驾驭能力。诗人创作的作品可以是纪事性的,描述人物或故事,如荷马的史诗;也可以是比喻性的,隐含多种解读的可能,如但丁的《神曲》、歌德的《浮士德》。### 擅长写现代诗1. 现代诗形式自由,意涵丰富,意象经营重于修辞运用,是心灵的映现2. 更加强调自由开放和直率陈述与进行“可感与不可感之间”的沟通。
### 擅长写七言律诗1. 七言体是古代诗歌体裁2. 全篇每句七字或以七字句为主的诗体3. 它起于汉族民间歌谣
### 擅长写五言诗1. 全篇由五字句构成的诗2. 能够更灵活细致地抒情和叙事3. 在音节上,奇偶相配,富于音乐美
## Rules1. 内容健康,积极向上2. 七言律诗和五言诗要押韵
## Workflow1. 让用户以 "形式:[], 主题:[]" 的方式指定诗歌形式,主题。2. 针对用户给定的主题,创作诗歌,包括题目和诗句。
## Initialization作为角色 <Role>, 严格遵守 <Rules>, 使用默认 <Language> 与用户对话,友好的欢迎用户。然后介绍自己,并告诉用户 <Workflow>


基于上述 诗人 prompt 例子,说明结构化 prompt 的几个概念:

  • 标识符:#, <> 等符号(-, []也是),这两个符号依次标识标题,变量,控制内容层级,用于标识层次结构。

  • 属性词:Role, Profile, Initialization 等等,属性词包含语义,是对模块下内容的总结和提示,用于标识语义结构,和学术论文中使用的摘要,方法,实验,结论的段落标题起的作用一样。


标识符,属性词都是可替换的,可以替换为你喜欢的符号和内容。


日常的文章结构是通过字号大小、颜色、字体等样式来标识的,ChatGPT 接收的输入没有样式,因此借鉴 markdown,yaml 这类标记语言的方法或者 json 这类数据结构实现 prompt 的结构表达都可以,例如用标识符 # 标识一级标题,##标识二级标题,以此类推。尤其是使用 json, yaml 这类成熟的数据结构,对 prompt 进行工程化开发特别友好。LangGPT 目前选用的是 Markdown 标记语法,一是因为 ChatGPT 网页版本身就支持 Markdown 格式,二是希望对非程序员朋友使用更加友好。程序员朋友推荐使用yaml, json 等进行结构化 prompt 开发。


有了初步的示例实践,我们就可以窥见结构化 Prompt 的优势——


1、结构清晰,可读性好

Role (角色) 作为 Prompt 标题统摄全局内容。

Profile (简介)、Rules(规则) 作为二级标题统摄相应的局部内容。

Language、Description 作为关键词统摄相应句子、段落。


2、结构丰富,表达性好

结构化 Prompt 即符合人类的有条理的表达习惯(我们日常写文章时有标题、段落、副标题、子段落等丰富的层级),也符合 ChatGPT 的认知习惯(在大量的文章、书籍中训练得到,其训练内容的层级结构本来就十分丰富)


3、提升语义认知

结构化表达同时降低了人和 GPT 模型的认知负担,大大提高了人和GPT模型对 prompt 的语义认知。1)标识符标识的层级结构实现了聚拢相同语义,梳理语义的作用,降低了模型对 Prompt 的理解难度;2)而属性词实现了对 prompt 内容的语义提示和归纳作用,缓解了 Prompt 中不当内容的干扰。


4、定向唤醒大模型深度能力

使用特定的属性词能够确保定向唤醒模型的深层能力。


5、像代码开发一样构建生产级 Prompt

在生产级 AIGC 应用的开发中,结构化 prompt 使得 prompt 的开发也像代码开发一样有规范。结构化 Prompt 的规范可以多种多样,用 json,yaml 实现都可以,这些模块化设计,能够大大便利于 prompt 后续的维护升级,便利于多人协同开发设计。甚至于可以像复用代码一样复用 Prompt。对于某些常用的模块,是不是可以像复用代码一样实现 Prompt 的复用?是不是可以像面向对象的编程一样复用某些基础角色?LangGPT 提供的 Prompt 生成助手某种意义上就是自动化的实现了基础角色的复用。


同时 Prompt 作为一种文本,也完全可以使用 Git 等工具像管理代码一样对 prompt 进行版本管理。


结语

其实,prompt工程化的内容远不及此,结构化prompt其实也还有很多内容来不及在本文中给出,目前prompt设计模式已经衍生出了few-show、step by step、step-back等技巧,从模拟人类的思维方式上,又有CoT(Chain of Thought)、CoT-SC(Chain of Thought + Self-Consistency)、TOT(Tree of Thought)甚至是GoT(Graph of Thought)等思维链设计模式,GoT已经属于比较前沿的设计模式了,复杂度也较高,这些后续我也会继续研究,继续实践,继续给大家分享~



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

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

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

联系我们

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

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询