Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言

上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了,我们知道Prompt工程是指人们向生成性人工智能(AI)服务输入提示以生成文本或图像的过程中,对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数据训练的机器人,它不具备筛选你正在交流的内容以理解你实际在说什么的能力。也就是说你说的就是你得到的。那么我们使用Prompt在不进行高成本的调参,显得尤为重要,因此有很多Prompt策略适用于不同的语言大模型中,在图像大模型中Prompt策略可谓是核心必学科目了。那么本章我们将了解Prompt主流策略有什么。

定义prompt流程

在上篇文章中我们了解到Prompt基本种类有以下几种:

 我们可以根据Prompt的类别去定义不同的Prompt格式,那么我们也可以根据Prompt规则建立一套流程化的Prompt公式,首先我们来慢慢拆解一个成功的Prompt功能,以微软OpenAI给出为Prompt engineering techniques为例子:

定义人设

如果大家经常用语言大模型的一些原生应用或者是去看过一些Prompt模板,开头的第一句往往都是说:我想让你担任xxx或者是你是一名xxx诸如此类定义人设的话:

 

诸如此类的Prompt模板,为方便其中指定人设这段话我称之为System message,System message包含着Prompt开头,用于为模型提供上下文、指令或与使用案例相关的其他信息。可以使用系统消息来描述助手的个性,定义模型应该和不应该回答的问题,以及定义模型回应的格式,再来看微软给的例子:

System messageUserAssistant
You are an AI assistant that helps people find information and responds in rhyme. If the user asks you a question you don't know the answer to, say so.What can you tell about me, John Doe?Dear John, I'm sorry to say, But I don't have info on you today. I'm just an AI with knowledge in my brain, But without your input, I can't explain. So please tell me more about what you seek, And I'll do my best to give you an answer unique.

简而言之,系统消息就像是对话的"预设条件",它为接下来的交互设定了一个基础框架。通过明确指出助手的行为方式、回应的边界以及期望的交互风格,系统消息帮助确保模型的回应更加符合用户的期望和需求,我们可以基于原始内容应用进行修改变得更加多样化:

  • “Assistant is a large language model trained by OpenAI.”

    • 明确了助手的基础,助于设定用户对助手能力的基本期望。

  • “Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Service. Only answer questions using the context below and if you're not sure of an answer, you can say "I don't know".

    • 设定了一个更具体的角色和使用范围:解答有关Azure OpenAI服务的技术问题。同时,它还指示了助手在不确定答案时应如何回应,即说“我不知道”。

  • “Assistant is an intelligent chatbot designed to help users answer their tax related questions.”

    • 类似于第二个例子,这个消息定义了助手的专长领域:税务相关的咨询。这有助于用户理解应当向助手提出哪类问题。

  • “You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format:

    • 这个消息定义了助手的一个非常具体的功能:从文本中提取实体,并明确了期望的输出格式(JSON对象)。这对于那些需要此类功能的用户非常有用。

重要的是要理解,即使系统消息中指示模型在不确定答案时回答“我不知道”,这也不能保证模型总是会遵守这一请求。设计良好的系统消息可以增加某种结果的可能性,但仍有可能生成与系统消息中的指示相悖的错误回应。这意味着,在设计系统消息时,尽管它可以指导模型的行为,但不能完全控制模型的所有输出。因此,开发者和用户都应该准备好处理意外或不准确的回答。

当我们完成这一步之后,我们就可以进入到下一个环节去补足模型效果。

少量样本学习

“少量样本学习(Few-shot learning)”是一种让语言模型适应新任务的常用方法。在这种方法中,作为提示(prompt)的一部分,提供了一组训练样例,以给模型提供额外的上下文。也就是我们如果无法把控模型会生成什么内容,那么我们就给出少量回答样本,让模型自己去学习,这些示例可以用来“启动”(prime)模型,使其以特定的方式回应,模仿特定的行为,并对常见问题提供答案。

System messageFew-shot examples
Assistant is an intelligent chatbot designed to help users answer their tax related questions. Instructions - Only answer questions related to taxes. - If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information.User - "When do I need to file my taxes by?" Assistant - "In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see When to file | Internal Revenue Service " User - "How can I check the status of my tax refund?" Assistant - "You can check the status of your tax refund by visiting Refunds | Internal Revenue Service "

将这二者结合起来可以用于回答:

  • 客户服务:模型可以被训练来模仿客服代表的行为,回答常见的客户查询。

  • 技术支持:提供特定于技术问题的对话,可以让模型学会回答复杂的技术问题。

  • 教育辅导:通过少量样本学习,模型可以被训练为辅导学生解决特定的学术问题。

总之,“少量样本学习”是一种灵活且高效的方法,使得即使在只有少量数据的情况下,模型也能快速适应并执行新的任务。通过精心设计的示例,可以显著提高模型在特定场景下的表现,在不进行大模型调优的环境下尤为重要。

倘若我们不是对话交流类场景,而是作为应用功能来使用的话,可以精简prompt.

非聊天场景

例如,对于情绪分析场景,可以使用以下提示:

System messageUserAssistant
You are an assistant designed to analyze sentiment from speech data. Users will paste in a string of text and you will respond with an assessment of the response of the speaker. Rate on a scale of 1-10 (10 being highest). Explain why this rating was given.hi thank you for calling contoso pharmacy who am i speaking with today i understand your frustration mary um can you tell me what exactly you're trying to accomplish OK uh certainly happy to check that for you one moment please i see here that you were on a generic form of lipitor is that right OK uh so i see that your doctor stopped prescribing these drugs in twenty twenty one actually OK uh yeah i'd be happy to check that for you uh because sometimes there's a gap in the system and it just doesn't get reported so let me take a look here just a moment so i'm seeing here that your doctor had these drugs prescribed to you from twenty twelve through twenty twenty one OK um yeah according to the latest records uh provided by doctor's office you're now on a different drug metformin would you like us to go ahead and fill that prescription for you for pick up a bit of form in five hundred milligrams uh you're very welcome mary please let us know if there's anything else we can do for you today.Sentiment rating: 8 The speaker in this text seems to be polite, helpful, and patient while addressing the concerns of the customer. They take the time to check the information, provide clear explanations, and offer assistance. However, the rating is not a 10 because there is still a hint of uncertainty in some parts of the conversation, which may not convey complete confidence to the customer.

这是微软给我们的例子,如果我们想要做一个信息抽取的应用,可以试试这段Prompt:

input format :

你是一个自然语言处理专业机器人,你需要从我给出的内容中抽取[所有出现的名词]并通过[列表]的形式进行展示。接下来你需要抽取的内容是:[老师在教室给学生教授各种知识。他解释了人体的结构,从脑部到肌肉到骨骼都详细描述了。然后他转向自然科学,讲解了地球的成分,从水到土壤到空气,再到天文学,从星球到星云到银河,有关宇宙的一切他都简要概括了。]

output format:

以下是从文本中抽取的名词列表: 老师 教室 学生 知识 人体 脑部 肌肉 骨骼 自然科学 地球 成分 水 土壤 空气 天文学 星球 星云 银河 宇宙。

以上设定回答格式完毕之后就暂时不用担心回答多样化了,但是也会存在一些偏离格式的回答,取决于给出的问题,这点需要注意。

有始有终

提示中显示信息的顺序很重要。 GPT 风格的模型内核是以格式理解方式构建的,这定义了它们处理输入的方式。 在共享其他上下文信息或示例之前,在提示开始时告诉模型你希望它执行的任务有助于生成更高质量的输出。模型可能容易受到近因偏差的影响,在此上下文中,这意味着提示结束时的信息对输出的影响可能比提示开头的信息更大。 因此在提示结束时重复指令,可以更有效的控制LLM的回答。

我们以引导输出的Prompt来看:

System messageUserAssistant
You are an AI assistant that helps people find information. Answer in as few words as possible.John Smith is married to Lucy Smith. They have five kids, and he works as a software engineer at Microsoft. What search queries should I do to fact-check this? ## One possible search query is:"John Smith married Lucy Smith five kids software engineer Microsoft"

在上述提示中,文本“一个可能的搜索查询是:”引导模型生成单个输出。 如果没有此提示,模型将生成多个搜索查询作为输出。

这是指在提示的末尾包含几个字词或短语,以获取遵循所需形式的模型响应。 例如,使用 “Here’s a bulleted list of key points:\n- ” 等提示有助于确保输出的格式为项目符号列表。

添加明确的语法

在提示中使用清晰的语法——包括标点符号、标题和小节标记——有助于传达意图,通常使输出更容易解析。 在下面的例子中,在不同的信息源或步骤之间添加了分隔符(在本例中为---)。这允许使用---作为生成的停止条件。此外,章节标题或特殊变量以大写字母表示,以区分它们。

System messageUserAssistant
You are an AI assistant that helps people find information.You will read a paragraph, and then issue queries to a search engine in order to fact-check it. Also explain the queries. --- PARAGRAPH John Smith is married to Lucy Smith. They have five kids, and he works as a software engineer at Microsoft. What search queries should I do to fact-check this? --- QUERIES1. "John Smith Microsoft" - To check if John Smith is indeed employed at Microsoft. 2. "John Smith Lucy Smith" - To check if John Smith is married to Lucy Smith. 3. "John Smith children" - To check if John Smith has five children.

模型已经在很多XML和Markdown的网页内容上进行了训练,如果你不确定使用什么语法可以考虑使用Markdown或XML。

分解任务

大型语言模型(LLMs)在任务被分解成较小步骤时,往往表现得更好。例如,在之前提到的搜索查询提示中,可以重新构建提示,使模型首先被指示提取相关事实,然后被指示生成可以用来验证这些事实的搜索查询。

System messageUserAssistant
You are an AI assistant that helps people find information.You will read a paragraph, and then issue queries to a search engine in order to fact-check it. --- PARAGRAPH John Smith is married to Lucy Smith. They have five kids, and he works as a software engineer at Microsoft. What search queries should I do to fact-check this? --- Now you will extract factual claims, and issue queries to fact-check them. When issuing a query, use the function SEARCH("query") FACTUAL CLAIMS1. John Smith is married to Lucy Smith 2. They have five kids 3. He works as a software engineer at Microsoft QUERIES SEARCH("John Smith married Lucy Smith") SEARCH("John Smith family size") SEARCH("John Smith Microsoft software engineer")

比如看以上例子,使用清晰的语法来区分不同的部分并引导输出。在这个简单的例子中,将任务从一个步骤分解成两个步骤并不是无规则的变化,可以尝试对包含许多事实大量文本段落进行此操作时,分解任务可以产生显著的效果。

自发功能

有时我们可以让模型使用一种工具(affordance),而不是仅依赖其自身的参数来获取信息和答案。例如,搜索可以作为一种工具来帮助减轻捏造答案的问题,并获取最新信息。也就是阶段性Prompt生成,在模型生成工具调用后停止生成,然后将结果粘贴回提示中。这种方法比较平常,先用LLM去搜索寻找一些内容,然后自我调用,这个模式十分常见暂不作演示。

思维链提示

不同于将任务分解成更小的步骤,在这种方法中,模型的响应被指示逐步进行并呈现涉及的所有步骤。这样做减少了结果不准确的可能性,并使评估模型响应变得更容易。通过逐步展示处理过程,模型不仅提供了最终的答案或解决方案,而且还展示了达到这个答案的具体步骤。这种方法对于教育、解释复杂问题或在需要详细说明决策过程的情境中尤其有用。它允许用户跟踪模型的思考过程,理解模型是如何从问题描述到达最终结论的。

System messageUser
You are an AI assistant that helps people find information.Who was the most decorated (maximum medals) individual athlete in the Olympic games that were held at Sydney? Take a step-by-step approach in your response, cite sources and give reasoning before sharing final answer in the below format: ANSWER is: <name>

此外,通过将任务分解为明确的步骤,可以更容易地识别和纠正过程中可能出现的错误,因为每一步都可以单独验证和评估。这种逐步方法也有助于提高模型透明度和用户对模型生成内容的信任。

指定输出结构

使用提示指定输出的结构可能会对结果的性质和质量产生重大影响。有时,系统消息输入为“只写真实事实”或“不编造信息”可能不足以缓解。相反,要求模型回复也包括引用可以帮助降低错误回复的普遍性。 如果指示模型在进行陈述时引用源材料,则这些陈述更有可能是有根据的。请求引用使得模型每次生成响应时都必须犯两个错误:第一个错误是捏造的响应,第二个错误的引用。引文越接近其支持的文本,模型预测引文所需的距离就越短,这表明内联引文比内容末尾的引文更好地缓解虚假内容的生成。

同样,如果你要求模型从段落中提取事实陈述,它可能会提取复合陈述,如“X正在做Y和Z”(这可能更难验证)。这可以通过指定诸如(entity1,relationship,entity2)之类的输出结构来避免。

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基于flask考研学习交流系统30vy7附源码django

考研在线学习与交流平台根据实际情况分为前后台两部分&#xff0c;前台部分主要是让用户使用的&#xff0c;包括用户的注册登录&#xff0c;首页&#xff0c;课程信息&#xff0c;在线讨论&#xff0c;系统公告&#xff0c;后台管理&#xff0c;个人中心等功能&#xff1b;后台…

Redis 中的全局命令

查看所有键 keys * keys命令会遍历所有键&#xff0c; 所以它的时间复杂度是O&#xff08;n&#xff09; 查看键总数 dbsize dbsize命令在计算键总数时不会遍历所有键&#xff0c; 而是直接获取Redis内置的键总数变量&#xff0c; 所以dbsize命令的时间复杂度是O&#xff…

Mysql锁与MVCC

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 exlpain字段解析ACID的原理日志引擎整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a; 乐观锁&#xff08;Optimistic Locking&#xff09;&#xff1a;假设并发操作时不会发…

CODE001

GPIO通用输入输出端口 1.可以配置八种输入输出模式 2.引脚电平0~3.3v 部分可以容忍5V 3.输出模式下可控制端口输出高低电平&#xff0c;用来驱动LED&#xff0c;蜂鸣器&#xff0c;模拟通信协议输出时序 4.输入模式下可读取端口的高低电平或电压&#xff0c;用于读取按键输入&a…

3.Python从入门到精通—Python 基础语法详细讲解-中

【30天】Python从入门到精通详解版—第二天—Python 基础语法详细讲解-中 控制流程语句条件语句循环语句 函数和模块函数模块 控制流程语句 在Python中&#xff0c;控制流程语句用于控制程序的执行流程&#xff0c;包括条件语句和循环语句。 条件语句 Python中的条件语句包括…

Database Connectivity using Python使用 Python 进行数据库连接

Introduction • The Python programming language has powerful features for database programming • Python supports various databases like MySQL, Oracle, Sybase, PostgreSQL, etc • Python also supports Data Definition Language (DDL), Data Manipulation Langua…

ARMV8-aarch64的虚拟内存(mmutlbcache)介绍-概念扫盲

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 思考: 1、cache的entry里都是有什么&#xff1f; 2、TLB的entry里都是有什么? 3、MMU操作…

代码简洁之道

《代码简洁之道》&#xff08;Clean Code&#xff09;是由Robert C. Martin所著的一本经典书籍&#xff0c;主要介绍了如何编写清晰、可读性高、易于维护的代码。以下是该书中的一些重要观点&#xff1a; 1. 命名清晰明了&#xff1a;变量、函数、类等命名应当清晰明了&#x…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

Java策略模式源码剖析及使用场景

策略模式 一、介绍二、不同的支付方式采用不同的策略三、 电商定价策略四、日志记录策略五、 压缩算法六、Java 中的 Arrays.sort() 方法,不同的排序策略进行排序七、Spring 中的 ResourceLoader 类,不同的资源位置采用不同的加载策略 一、介绍 策略模式是一种行为型设计模式,…

计算机行业在数字经济时代的角色与数字化转型之路

目录 前言1 数字经济时代下的计算机行业角色与定位1.1 数字经济支撑者1.2 创新引领者1.3 产业融合者 2 数字化转型对计算机行业的影响与挑战2.1 技术更新换代的压力2.2 人才培养与流动的问题2.3 数据隐私与安全的挑战 3 数字化转型如何提升行业竞争力3.1 提高生产效率与优化产品…

【Java】获取手机文件名称补充

本地的 ADB 工具路径指的是你电脑上安装的 Android Debug Bridge&#xff08;ADB&#xff09;工具的路径。ADB 是 Android SDK 中的一个工具&#xff0c;用于与连接到计算机上的 Android 设备进行通信。你需要确保 ADB 已正确安装&#xff0c;并知道其在你计算机上的位置。 通…

Prometheus 监控告警配置

文章目录 一、告警通知1.邮件通知2.钉钉通知2.1.获取钉钉机器人webhook2.2.prometheus-webhook-dingtalk2.3.配置信息2.4.自定义模板 3.自定义 二、告警规则1.Prometheus2.Linux3.Docker4.Nginx5.Redis6.PostgreSQL7.MySQL8.RabbitMQ9.JVM10.Elasticsearch 开源中间件 # Prome…

odoo中使用domain基础操作

Odoo中的domain是一个用于筛选记录的条件列表&#xff0c;它通常用于搜索、过滤和定义视图中可见记录的规则。Domain由一系列的元组组成&#xff0c;每个元组定义了一个筛选条件。这些条件可以是简单的字段比较&#xff0c;也可以是更复杂的逻辑组合。 基本语法 Domain的基础…

模拟无人驾驶汽

下面是一个简单的Python代码示例&#xff0c;用于模拟无人驾驶汽车的自动驾驶功能。 import timeclass Car:def __init__(self):self.speed 0self.heading 0def drive(self):while True:self.update_sensors()self.process_sensors()self.control_car()self.update_car()tim…

CentOS搭建NAS服务器并使用

CentOS搭建NAS服务器并使用 文章目录 前言一、配置NAS服务器安装 NFS 服务&#xff1a;启动 NFS 服务&#xff1a;使 NFS 服务在系统启动时自动启动&#xff1a; 二、挂载服务器三、常见错误以及解决方案1、mount.nfs: No route to host2、mount.nfs: access denied by server …

vue3之组合式函数

抽取成一个组合式函数&#xff1a; // fetch.js //接收响应式状态 import { ref, watchEffect, toValue } from vue //一个封装的异步请求 import { fetch } from ../XX export function useFetch(url) {const data ref(null)const error ref(null)const fetchData () >…

OpenCV的常用数据类型

OpenCV涉及的常用数据类型除包含C的基本数据类型,如&#xff1a;char、uchar&#xff0c;int、unsigned int,short 、long、float、double等数据类型外, 还包含Vec&#xff0c;Point、Scalar、Size、Rect、RotatedRect、Mat等类。C中的基本数据类型不需再做说明下面重点介绍一下…

打包 加載AB包 webGl TextMeshPro 變紫色的原因

1.打包 加載AB包 webGl TextMeshPro 變紫色的原因 編輯器命令行https://docs.unity3d.com/cn/2019.4/Manual/CommandLineArguments.html 1.UnityHub 切換命令行參數 -force-gles 2.-force-gles&#xff08;仅限 Windows&#xff09;| 使 Editor 使用 OpenGL for Embedded Sys…

揭秘WMM:wifi中的QOS

更多内容在 WiFi WMM&#xff08;无线多媒体&#xff09;是一种用于无线局域网&#xff08;WLAN&#xff09;的QoS&#xff08;服务质量&#xff09;标准。WMM旨在提供更好的网络性能&#xff0c;特别是在传输多媒体内容&#xff08;如音频和视频&#xff09;时。它通过对不同类…