玩转大模型的第一步——提示词(Prompt)工程【抛砖篇】

ops/2024/10/24 15:48:19/

前言

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输出指示器(选填):期望模型输出的类型或格式

前排提示,文末有大模型AGI-CSDN独家资料包哦!

这里的「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. 在音节上,奇偶相配,富于音乐美``   ``## Rules``1. 内容健康,积极向上``2. 七言律诗和五言诗要押韵``   ``## Workflow``1. 让用户以 "形式:[], 主题:[]" 的方式指定诗歌形式,主题。``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已经属于比较前沿的设计模式了,复杂度也较高,这些后续我也会继续研究,继续实践,继续给大家分享~

由于平台限制,我也是把资料包整理打包放在我自己的社区了,里面包含👇

👉点击即可获取大模型资料包2024年最新版👈
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集


http://www.ppmy.cn/ops/128097.html

相关文章

安全见闻(1)——开阔眼界,不做井底之蛙

内容预览 ≧∀≦ゞ 安全见闻一&#xff1a;包罗万象的网络安全声明导语编程语言常用语言函数式编程数据科学和机器学习Web全栈开发移动开发嵌入式开发其他编程语言 软件程序常见软件程序类型 操作系统非实时操作系统实时操作系统 网络通讯硬件设备计算机硬件网络硬件移动设备硬…

054_python基于爬虫与文本挖掘的网络舆情监控系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

构建高效在线考试平台:Spring Boot与JavaWeb的融合

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于JavaWeb技术的在线考试系统设计与实现…

OpenAI swarm+ Ollama快速构建本地多智能体服务 - 1. 服务构建教程

OpenAI开源了多智能体编排的工程swarm&#xff0c;今天介绍一下swarm与OLLAMA如何结合使用的教程&#xff0c;在本地构建自己的多智能体服务&#xff0c;并给大家实践演示几个案例。 安装步骤 安装ollama&#xff0c;在官网下载对应操作系统的版本即可&#xff0c;下载后用ol…

【建议收藏】2024年最新Windows系统重装教程:轻松学会,小白必看,赶紧收藏!

一、什么情况下需要重装系统 系统功能严重异常无法修复&#xff0c;会出现蓝屏、黑屏、死机、卡顿&#xff0c;或者直接没办法正常开机。安装了应用软件后机器报错&#xff0c;无论怎么卸载重装软件都无法正常运行。系统内杂乱软件太多&#xff0c;硬盘爆满&#xff0c;无论怎…

基于SpringBoot+Vue+uniapp微信小程序的垃圾分类系统的详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

软考中级嵌入式系统设计师笔记分享(二)

1.TTL 电路是电流控制器件&#xff0c;而CMOS 电路是电压控制器件。 2.TTL 电路的速度快&#xff0c;传输延迟时间短(5-10ns)&#xff0c;但是功耗大。 常见的串行总线有 SPI、II2C、USB、RS232/RS422/RS485、CAN等;高速串行总线主要有 SATA、PCIE、IEEE 1394、Rapidl0、USB 3…

Go入门指南-3.2编辑器和集成开发环境

这些编辑器包含了代码高亮和其它与 Go 有关的一些使用工具&#xff1a;Emacs、Vim、Xcode 6、KD Kate、TextWrangler、BBEdit、McEdit、TextMate、TextPad、JEdit、SciTE、Nano、Notepad、Geany、SlickEdit、IntelliJ IDEA 和 Sublime Text 2。 你可以将 Linux 的文本编辑器 G…