[LLM][Prompt Engineering]:大语言模型提示工程(Prompt Engineering)

devtools/2024/9/18 2:23:20/ 标签: prompt, 语言模型, 人工智能

Prompt Engineering

  • Prompt Engineering
    • Prompt Engineering(提示工程) 是啥?
      • Prompt是什么?
      • Why Prompt Engineering?
    • 怎样进行提示工程

语言模型(LLM)的微调(Fine-tune)代价较高,基于自然语言的提示(Prompt)方法已经成为了使用大语言模型解决下游任务的主要途径。而且提示的质量在很大程度上会影响大语言模型在特定任务中的表现。当前的很多工作和应用集中在如何快速应用LLM,使其适配下游任务,所采用的方法统称为Prompt Engineering,其中包括了上下文学习(In-Context Learning,ICL)和思维链提示(Chain-of-Thought,CoT),部分内容来自GPT Prompt Engineering官网和LLM Books

上下文学习和思维链相关文章参考链接:

  1. 上下文学习,ICL:https://blog.csdn.net/qq_41897558/article/details/141676968?spm=1001.2014.3001.5501
  2. 思维链,CoT:https://blog.csdn.net/qq_41897558/article/details/141676968?spm=1001.2014.3001.5501

Prompt Engineering(提示工程) 是啥?

Prompt是什么?

在大语言模型(如GPT-4)的应用中,Prompt 是指用户输入给模型的一段文字或问题,用于引导模型生成相应的回答或内容。简单来说,Prompt 就是你给模型的指令或提示。

例如,如果你想让模型生成一段关于人工智能的介绍,你可以输入一个 Prompt 如:“请介绍一下人工智能的基本概念。” 模型会根据这个提示生成相应的内容。

Prompt 的设计和编写在大语言模型的应用中非常重要,因为一个好的 Prompt 可以帮助模型更准确地理解用户的需求,从而生成更符合预期的回答。

Why Prompt Engineering?

Prompt engineering 是指设计和优化输入提示(Prompt)以便大语言模型(如GPT-4)能够生成更准确和有用的输出。这一过程涉及到理解模型的工作原理用户需求以及**如何通过不同的提示结构来引导模型生成所需的内容。**通过提示工程,可以:

  1. 提高准确性:通过精心设计的Prompt,可以帮助模型更好地理解用户的意图,从而生成更准确的回答
  2. 优化输出质量:不同的Prompt结构可能会导致模型生成不同质量的输出。通过Prompt engineering,可以找到最优的提示结构,提升输出的质量。
  3. 节省时间和资源:一个好的Prompt可以减少模型生成不相关或错误内容的概率,从而节省用户的时间和计算资源。
  4. 增强模型的适应性:Prompt engineering可以使模型更好地适应不同的应用场景和需求,提高其通用性和灵活性。

怎样进行提示工程

一般而言,针对大语言模型的提示设计需要考虑四个关键要素,即==任务描述输入数据上下文信息提示策略==。下面将对这四个关键要素进行具体介绍。

  1. 任务描述: 用户应该使用清晰的、具体的表述来描述任务目标。对于一些特殊任务,还要求对输入或输出的格式进行更详细的说明,可以使用关键词或者特殊符号来强调特殊设置以指导大语言模型更好地完成任务。

  2. 输入数据: 通常情况下,用户可以直接使用自然语言描述输入数据的内容。对于特殊形式的输入数据,则需要采用合适的方法使其能够被大语言模型读取与理解(比如,表格、代码等)。

  3. 上下文信息(上下文学习):任务示例数据也有助于提升大语言模型处理复杂任务的能力,模型可以通过示例数据学习任务目标输出格式以及输入和输出之间的映射关系。

  4. 提示策略:针对不同的大语言模型设计合适的提示策略对于激发模型解决特定任务的能力非常重要。在某些情况下,添加特定的前缀或后缀有助于引导大语言模型解决复杂任务。例如,使用前缀“让我们一步一步地思考”可以激发大语言模型的逐步推理能力,而使用前缀“你是这项任务(或这个领域)的专家”可以提高大语言模型在某些特定任务(或领域)中的表现。此外,对于对话式的大语言模型(例如ChatGPT),由于其使用了大量对话数据进行训练,因此更合适的做法是将提示拆分为多个子任务提示,以多轮对话的方法逐步输入给大语言模型

针对上述这些关键要素,有哪些实用的建议和例子呢?

  1. 清晰地表达任务目标
  • 表达越详细越好。Make your prompt as detailed as possible, e.g., “Summarize the article into a shortparagraph within 50 words. The major storyline and conclusion should be included,and the unimportant details can be omitted.”
  • 角色扮演,让LLM扮演一个该领域的专家
    • It is helpful to let the LLM know that it is an expert with a prefixed prompt, e.g.,“You are a sophisticated expert in the domain of compute science.”
    • Before the prompt, assigning a role for the LLM is useful to help it better fulfill thefollowing task instruction, e.g., “I want you to act as a lawyer”.
  • 告诉LLM应该做啥。Tell the model more what it should do, but not what it should not do.
  • 需要些简短凝练的回答时,给予一些关键字。To avoid the LLM to generate too long output, you can just use the prompt: “Question:Short Answer: ”. Besides, you can also use the following suffixes, “in a or a few words”,“in one of two sentences”.
  • 分类or打分任务,提示详尽的打分标准。If you want LLMs to provide the score for a text, it is necessary to provide a detailed description about the scoring standard with examples as reference.
  • For few-shot chain-of-thought prompting, you can also use the promptLet’s think step-by-step”, and the few-shot examples should be separated by “\n” instead of full stop.
  • 少用代词。The prompt should be self-contained, and better not include pronouns (e.g., it and they)in the context.
  • 比较问题,顺序很关键。When using LLMs for comparing two or more examples, the order affects the performancea lot.
  • 多选择的问题,限制输出空间,For multi-choice questions, it is useful to constrain the output space of the LLM. You can use a more detailed explanation or just imposing constraints on the logits.
  • 推荐任务的排序问题,用选项指代要分类or排序的内容。For sorting based tasks (e.g., recommendation), instead of directly outputting the complete text of each item after sorting, one can assign indicators (e.g., ABCD) to the unsorted items and instruct the LLMs to directly output the sorted indicators.
  1. 将复杂任务分解为简单且详细的子任务(CoT,ToT)。
  • **思维链,CoT,**For complex tasks, you can clearly describe the required intermediate steps to accomplishit, e.g., “Please answer the question step by step as: Step 1 - Decompose thequestion into several sub-questions, · · · ”
  • 让LLM解释为什么生成这个答案,When LLMs generate text according to some context (e.g., making recommendations according to purchase history), instructing them with the explanation about the generated result conditioned on context is helpful to improve the quality of the generated text.
  • 通过自然语言的形式实现ToT,An approach similar to tree-of-thoughts but can be done in one prompt: e.g., Imagine three different experts are answering this question. All experts will write down one step of their thinking, then share it with the group of experts. Then all experts will go on to the next step, etc. If any expert realizes they’re wrong at any point then they leave. The question is
  • As a symbol sequence can typically be divided into multiple segments (e.g., 𝑖1, 𝑖2, 𝑖3−→𝑖1, 𝑖2 and 𝑖2, 𝑖3), the preceding ones can be used as in-context exemplars to guide LLMs to predict the subsequent ones, meanwhile providing historical information.
  • **输出前让LLM先检查一下。**Let the LLM check its outputs before draw the conclusion, e.g., “Check whether the above solution is correct or not.”
  1. 提供少量样本,few-shot-CIL。
  • 示例要用良好的格式,Well-formatted in-context exemplars are very useful, especially for producing theoutputs with complex formats.
  • You can also retrieve similar examples in context to supply the useful task-specifi cknowledge for LLMs. To retrieve more relevant examples, it is useful to first obtain the answer of the question, and then concatenate it with the question for retrieval.
  • 示例的多样性和代表性,The diversity of the in-context exemplars within the prompt is also useful. If it is not easy to obtain diverse questions, you can also seek to keep the diversity of the solutions for the questions.
  • 示例的顺序很重要,Order matters for in-context exemplars and prompts components. For very long inputdata, the position of the question (first or last) may also affect the performance.
  • 实用LLM生成一个示例,If you can not obtain the in-context exemplars from existing datasets, an alternative way is to use the zero-shot generated ones from the LLM itself.
  1. 采用模型友好(训练时出现的)的提示格式。

语言模型采用专门构建的数据集进行预训练,因此可以从数据集中学习到大量的语言表达模式发现并利用这些语言表达模式可以帮助我们更有效地使用大语言模型完成特定任务。

  • 对于提示中需要重点强调的部分,OpenAI 官方文档中建议用户可以使用特殊符号(例如♯♯♯、三引号“““和”””、XML 标签等)进行分隔,从而让大语言模型更好地理解相关内容。
  • 此外,大多数现有的大语言模型主要在英语文本上进行训练,理解英语指令的能力更强,因此在执行任务时使用英语指令可能会获得更好的执行效果。对于非英语用户来说,通过机器翻译工具将非英语任务指令转换为英语指令再输入给大语言模型,可能会是一个更有效的策略。

http://www.ppmy.cn/devtools/105753.html

相关文章

Docker compose 安装 ELK

1. 简介 方案概述 我们使用 Filebeat 作为日志收集器,接入到 Redis 队列,然后消费队列中的日志数据流转到 Logstash 中进行解析处理,最后输出到 Elasticsearch 中,再由 Kibana 展示到页面上。我们采用 Elasticsearch 3 节点集群…

连锁门店收银系统源码-线下线下一体化系统

近年来,越来越多的零售行业从业者意识到,线下线上全渠道整合将成为国内消费市场的大趋势,其中,线下门店能够赋予品牌发展的价值依然不可小觑。 在线下门店中,收银系统可以说是运营管理的关键工具,好的收银…

基于web设备管理系统设计与实现

系统业务需求分析与原型设计 总体业务需求分析 学校对于设备管理的要求越来越高,信息实时录入与查询,主要是提高工作效率,充分利用信息管理,管理学校的设备信息,减少繁琐而又繁重的手工统计工作,从系统总体…

如何共享EC2 AMI给其他AWS账户

在本篇文章中,我们将详细介绍如何通过Amazon Web Services (AWS) 的Elastic Compute Cloud (EC2) 平台,将自定义AMI(Amazon Machine Image)共享给其他AWS账户。接下来,我们九河云将一步步引导您完成整个过程&#xff0…

SQL 编程基础

SQL(结构化查询语言)广泛应用于数据库操作,是每个程序员都需要掌握的技能之一。这篇文章将带你从基础入门,了解SQL编程中的常量、变量及流程控制语句。我们将采用简单易懂的语言,结合实际示例,帮助你轻松理…

C++学习笔记(3)

101、从结构体到类 对面向对象编程来说,一切都是对象,对象用类来描述。 类把对象的数据和操作数据的方法作为一个整体考虑。 定义类的语法: class 类名 { public: 成员一的数据类型 成员名一; 成员二的数据类型 成员名二; 成员三的数据类型 成…

Web APIs第一天

第一天&#xff1a;DOM获取元素&#xff0c;获取元素&#xff0c;修改属性 声明新变量&#xff0c;一般默认const&#xff0c;如果变量的值不变&#xff0c;则使用const。如果变量的值变化&#xff0c;则使用let。var已经被淘汰了。 <script>const arr [red, pink]arr.…

【单调栈 】2289. 使数组按非递减顺序排列

本文涉及的基础知识点 单调栈分类、封装和总结 LeetCode2289. 使数组按非递减顺序排列 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;移除所有满足 nums[i - 1] > nums[i] 的 nums[i] &#xff0c;其中 0 < i < nums.length 。 重复执行步骤&a…

小土堆pytorch

anaconda安装 pip list 可以看有哪些package包 nvidia-smi查看显卡的状态 安装pytorch 检验pytorch是否安装成功&#xff0c;以及是否pytorch是否可以使用gpu。 (1)查看conda版本 conda --version 或 conda -V (2)更新conda&#xff08;将conda自身更新到最新版本&#xff09; …

给鼠标一个好看的指针特效 鼠标光标如何修改形状?

许多爱美的小伙伴们都想着如何给自己的电脑打扮一下&#xff0c;用各种各样的途径来美化我们的电脑。今天我们给大家分享一下&#xff0c;如何美化鼠标效果&#xff0c;给鼠标指针修改成一个非常好看的形状~ 一起来看几组鼠标的效果&#xff0c;小编我给大家做了个录屏&#x…

软考-软件设计师(软件工程习题)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

uniapp icons图标不显示的问题解决

如图所示 在uniapp开发中 突然发现icons组件不显示图标了 &#xff0c;而且没什么报错 这是为什么 其实这最大的原因就是你上面的代码在取值上没有做好null的判断 导致参数取值报错 因此影响了页面正常的渲染 导致下面的图标都不显示

Vue2的学习1

1.Vue是什么&#xff1f; 一套用于构建用户界面的渐进式Javascript 框架 2.Vue的特点 1.采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护, 2.声明式编码&#xff0c;让编码人员无需直接操作DOM&#xff0c;提高开发效率。 3.使用虚拟DOM优秀的Diff 算法&#…

Sublime Text 配置 Terminal (CMD)

1. 安装package 按住 【ctrlshiftp】 , 在弹出的输入框中输入“install”&#xff0c;选择“install package”,回车,等待20秒左右 2. 安装terminal 按住 【ctrlshiftp】 , 在弹出的输入框中输入“install”&#xff0c;选择“install package”,回车,等待新弹窗出来&#…

#驱动开发

内核模块 字符设备驱动 中断、内核定时器 裸机开发和驱动开发的区别&#xff1f; 裸机开发 驱动开发&#xff08;基于内核&#xff09; 相同点 都能够控制硬件&#xff08;本质&#xff1a;操作寄存器&#xff09; 不同点 用C语言给对应的地址里面写值 按照一定的框架格式…

小阿轩yx-云原生存储Rook部署Ceph

小阿轩yx-云原生存储Rook部署Ceph 前言 Rook 一款云原生存储编排服务工具由云原生计算基金会&#xff08;CNCF&#xff09;孵化&#xff0c;且于2020年10月正式进入毕业阶段。并不直接提供数据存储方案&#xff0c;而是集成了各种存储解决方案&#xff0c;并通过一种自管理、…

游戏引擎详解——图片

图片 图片的格式 图片文件格式pngjpg 纹理压缩格式ETC1/2PVRTCASTC 图片的属性 图片属性解释分辨率宽高像素值&#xff08;pt&#xff09;&#xff0c;如&#xff1a;1024*1024位深度用来存储像素颜色的值&#xff0c;如RGBA8888&#xff0c;红黄蓝透明度4个维度每个8bit&…

如何从 Bak 文件中恢复 SQL数据库?(3种方法)

如何从 .bak 文件恢复 SQL数据库&#xff1f; 在数据库管理和维护过程中&#xff0c;数据的安全性和完整性至关重要。备份文件&#xff08;.bak 文件&#xff09;是 SQL Server 中常用的数据库备份格式&#xff0c;它包含了数据库的完整副本&#xff0c;用于在数据丢失、系统故…

解析淘宝商品详情API返回值中的特殊属性

在解析淘宝商品详情API&#xff08;如淘宝开放平台提供的API&#xff09;的返回值时&#xff0c;我们通常会遇到一些特殊的属性&#xff0c;这些属性可能包含复杂的数据结构&#xff0c;如列表、字典、嵌套对象等。由于淘宝API的具体细节可能会随时间变化&#xff0c;这里提供一…

idea配置svn发现安装的svn中的bin目录下没有svn.exe文件

问题描述 使用idea配置svn时&#xff0c;发现安装的svn没有svn.exe文件 解决方法 1、双击svn安装包&#xff0c;找到【modify】 2、默认安装时&#xff0c;没有安装command line client tools&#xff0c;里面是有svn.exe 3、选择will be installed on local hard drive 4、…