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

news2024/11/17 0:53:34

前言

上篇文章将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.coloradmin.cn/o/1515538.html

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

相关文章

42.坑王驾到第八期:uniCloud报错

uniCloud 报错 今天调用云函数来调试小程序的时候突然暴了一个奇葩错误&#xff0c;require(…).main is not a function。翻官方文档后发现&#xff0c;原来是这样&#xff1a;**如果你写的是云对象&#xff0c;入口文件应为 index.obj.js&#xff0c;如果你写的是云函数入口…

Oracle 主从切换脚本

一、 切换前预检查 1. dg_precheck_main_v1.4.sh #!/bin/bash#********************************************************************************** # Author: Hehuyi_In # Date: 2022年06月16日 # FileName: dg_precheck_main_v1.4.sh # # For sys user, execute the sc…

Vue.js+SpringBoot开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

java数据结构与算法刷题-----LeetCode491. 非递减子序列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路&#xff1a;时间复杂度O( n 2 ∗ n n^2*n n2∗n),空间复…

COSCUP 2024 正式启动议题征集,开源社专属邀请通道开启,欢迎报名参加!

COSCUP 是由台湾开放原始码社群联合推动的年度研讨会&#xff0c;起源于 2006 年&#xff0c;是台湾自由软体运动 (FOSSM) 重要的推动者之一。活动包括有讲座、摊位、社团同乐会等&#xff0c;除了邀请国际的重量级演讲者之外&#xff0c;台湾本土的自由软体推动者也经常在此发…

深入学习React开发:从基础到实战

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 引言 React是一款流行的JavaScript库&#xf…

基于R语言piecewiseSEM结构方程模型在生态环境领域技术教程

原文链接&#xff1a;基于R语言piecewiseSEM结构方程模型在生态环境领域技术应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247597092&idx7&sn176695e746eccff68e04edda6521f131&chksmfa823dc3cdf5b4d5b77181eb1bd9a2d659ff38e23c7ea78d33bc1cc7d0…

HSE化工应急安全生产管理平台:衢州某巨大型化工企业的成功应用

在化工行业中&#xff0c;安全生产一直是至关重要的议题。为了提高生产安全性、降低成本并提升企业形象&#xff0c;衢州某巨大型化工企业引入了HSE化工应急安全生产管理平台&#xff0c;取得了显著的改善和获益。 该平台的核心功能包括风险管理和应急预案制定。通过对化工生产…

活动图高阶讲解-03

1 00:00:00,000 --> 00:00:06,260 刚才我们讲了活动图的历史 2 00:00:06,260 --> 00:00:11,460 那我们来看这个活动图 3 00:00:11,460 --> 00:00:15,260 如果用来建模的话怎么用 4 00:00:15,260 --> 00:00:20,100 按照我们前面讲的软件方法的工作流 5 00:00:20…

vite ts vue 项目提示 . Projects must list all files or use an include pattern.

vite ts vue 项目提示 . Projects must list all files or use an include pattern. 在引用一个 ts 的时候&#xff0c;提示如下&#xff1a; 需要在 tsconfig.node.json 文件中添加&#xff1a; {"compilerOptions": {"composite": true,"skipLibC…

微信小程序一次性订阅requestSubscribeMessage授权和操作详解

一次性订阅&#xff1a;用户订阅一次发一次通知 一、授权 — requestSubscribeMessage Taro.requestSubscribeMessage({tmplIds: [], // 需要订阅的消息模板的id的集合success (res) {console.log("同意授权", res)},fail(res) {console.log(拒绝授权, res)}})点击或…

拼图小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

图片太大上传不了怎么调整?教你快速解决的办法

在日常工作学习中&#xff0c;经常有用到证件照的地方&#xff0c;比如考试报名证件照&#xff0c;办理各种证件、开学入学照、护照等等&#xff0c;有时候会因为证件照文件太大了、尺寸不符合导致上传不成功&#xff0c;今天就来教大家几个压缩图片大小的方法。 关于图片太大上…

C#Winform中DataBinding实现数据绑定实例

本文实例演示Winform中如何使用DataBinding实现数据绑定。 在我们实例开发中,经常会出现一个数据需要在多个界面中显示和使用。这时如果使用常规方法更新显示时,每个控件得更新都要在程序中体现,比较麻烦还容易遗漏。更好用的方法是使用DataBinding属性,常用的控件是label…

COOH-PEG-Galactose 羧基-聚乙二醇-半乳糖 Galactose 靶向肝肿瘤细胞

在生物体内&#xff0c;正常细胞通过有氧呼吸将糖类等物质分解代谢产生能量&#xff0c;从而供给细胞的增殖和生 长。而癌细胞似乎更为“蛮横”&#xff0c;它们主要依靠糖酵解作用为生&#xff0c;因此癌细胞代谢葡萄糖的速度比正 常细胞要快得多。值得注意的是&#xff0c;…

5.Python从入门到精通—Python 运算符

5.Python从入门到精通—Python 运算符 Python 运算符算术运算符比较&#xff08;关系&#xff09;运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 Python 运算符 Python语言支持以下类型的运算符: 算术运算符比较&#xff08;关系&#xff09;运算符赋…

【网络安全】手机不幸被远程监控,该如何破解,如何预防?

手机如果不幸被远程监控了&#xff0c;用三招就可以轻松破解&#xff0c;再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置&#xff0c;你手机里后装的各种APP全部将灰飞烟灭…

基于Spring boot+Vue的校园社团管理系统

目录 一、 绪论1.1 开发背景1.2 开发技术1.2.1 Spring Boot 框架1.2.2 Vue.js 框架 1.3 开发环境1.3.1 IntelliJ IDEA1.3.2 MySQL 二、系统分析2.1需求分析2.1.1管理员需求分析2.1.2社员需求法分析2.1.3社长管理员功能需求 2.2用例分析2.2.1管理员用例分析2.2.2社员用例分析2.2…

已经会用stm32做各种小东西了,下一步学什么,研究stm32的内部吗?

今天看到了一个提问&#xff0c;原话如下&#xff1a; 这个问题&#xff0c;我能装逼。 曾经干了10年单片机工程师&#xff0c;对工程师从入门&#xff0c;到入行&#xff0c;再到普通&#xff0c;再到高级&#xff0c;整个路径还算清晰&#xff0c;比如什么阶段&#xff0c;会…

一键导入Figma,让团队文件管理更加便捷安全!

如何将Figma引入国内软件已成为人们关注的话题。本文将分享两种Figma导入方法&#xff0c;使您的设计文件更加安全。 两种方法&#xff0c;一键导入Figma文件 即时设计是一种基于云的设计工具&#xff0c;在功能和特性上与Figma非常相似。如果你熟悉Figma的界面&#xff0c;即…