【大模型实战篇】创建有效的大模型提示词Prompt(提示词工程)

news2024/11/26 17:50:32

1. 背景介绍

        随着chatgpt、llama、chatglm、claude AI等一系列生成式 AI 工具的普及,很明显能感受到,个人的生产力得到了大幅地提升。这些生成式算法模型能够帮助我们开发新想法、轻松获取信息,并简化各种个人和职业任务。个人在日常生活、工作中已经大比例地在应用这些大模型服务,包括英语口语的练习、旅行规划、代码编程、文档的撰写,甚至包括用大模型备考。

        然而,这些生成式算法服务并不能读心术,因此需要使用者明确表达自己的需求。这些需求通过指令来表达,也就是被称为大模型提示词(prompts)。

        之前看过一篇阿里技术分享的提示词撰写经验分享文章【1】,内容篇幅很长,比较丰富,可能会给人一种好的提示词构建过于复杂的错觉。本文主要关注好的提示词所需要具备的核心要素。

2. 有效提示的要素

2.1 关键要素

        有效的提示能够为大模型执行任务提供充足且有用的参数,以生成可靠有效的响应,避免幻觉的产生。编写提示时应包括以下要素【2】:

  • 目标:你所需的具体任务的相关信息;
  • 上下文:你需要这些信息的原因或计划,如何使用这些信息;
  • 期望:希望响应符合的格式或针对的目标受众;
  • 来源:应使用的已知信息、数据源等。

        每个好的提示都应该有一个明确的目标。无论是通过指令还是问题的形式,需要表明你希望从当前会话中获得什么。上下文可以指时间范围或你计划将响应用于报告等信息。期望可以包括你是否希望响应以表格格式、行动步骤列表、摘要甚至图表的形式呈现。来源可以用于指定你所指的插件等。有些插件需要更多的上下文信息才能有效工作,或者需要支持插件来确保在初始响应失败时仍能得到答案。当然在某些场景下,来源也可以省略。

        比如提示词也可以由三层构成【3】:

  • 查询:你的问题;
  • 指令:你的要求(例如“用两字回答问题”或“概括文本);
  • 上下文:模型完成请求所需的外部信息(要总结的文本、包含问题答案的文章等)。

2.2 每一项细分展开

2.2.1 目标:保持提示词清晰且具体以让大模型理解你的任务

        编写提示词时,关键是保持清晰和具体。避免使用复杂的语言,以免混淆或误导模型。当然这并不意味着提示词要简短,应当清楚简明地提供足够的上下文和指令,减少歧义,并在给定上下文中明确指示模型执行特定任务。

        这么做的目的,是希望有效提示词能够帮助大模型理解你的任务。任务可以是各种形式,比如总结段落、从大量文本数据中提取信息、转换文本(例如,将英文翻译成法文),或者通过提供合适的上下文和指令生成某一特定主题的段落。

2.2.2 提供充足但适当的上下文

        上下文在创建有效提示词时至关重要。提供足够但适当长度的上下文可以帮助模型更好地理解意图并生成更相关且准确的输出。在提示词中提供上下文和指令时,应该确保编写的方式,能够使模型明确区分何为上下文,何为指令。也就是说在提示词中添加结构会更有效,添加结构的目标是将模型的构建模块分开,并让模型知道指令结束和上下文开始的地方。这个技巧不仅让提示词更清晰,还能帮助避免提示词注入问题——即上下文或用户输入覆盖了初始指令。

        采用少样本提示技术。少样本提示可以启用上下文学习,通过在提示中提供示例来引导模型更好地表现。即使只提供一个示例,也能提高大模型的响应质量。

        另外,也需要考虑大模型的上下文窗口大小。有时你可能需要处理一份长文档来进行总结或回答问题。

        虽然一般来说,大模型扩展了上下文窗口的大小【4,5】。下图为大模型中的上下文长度扩展技术分类。图中将这些技术区分为插值和外推,进一步分类为零-shot和微调分支。在上下文长度扩展领域,涉及位置编码、检索、注意力机制和基于RoPE的技术。

        但可能在处理大量上下文时还是可能会遇到问题。

        这里特别提一下关于“上下文长度”和“上下文窗口”概念区别:

        Context Length是对模型能处理的总信息量的限制,而Context Window是模型在生成时实际利用的最近的上下文信息范围。

        假设一个模型的Context Length是2048,输入了一段包含1500个token的文本(prompt),那么模型生成的响应最多只能有548个token(1500输入 + 548输出 = 2048总长度)。

        如果这个模型的 Context Window是512 token,那么在生成第513个token时,模型只能参考前面的512个token,而不是全部2048个token。

        还有比如根据N.F.Liu等人的研究(2023),许多大模型存在“U形注意力曲线”,即在上下文开头或结尾处找到正确答案的机会更大,而当答案在文本中间时,找到答案的机会会大幅下降。

2.2.3 期望:分步骤和层次化指导、要求自检并定义输出格式

        对于复杂任务,考虑将其拆分为几个子任务并逐步解决。例如,如果你需要根据摘要写一个故事,先生成标题,然后根据摘要生成角色,最后逐步完善故事结构。这种策略称为提示链【3】。

        也就是说给模型足够的时间思考,让模型按照特定顺序执行任务,而不仅仅是直接让它输出结果。让模型解释其推理过程的想法,这种思路源自于链式思维提示技术。特别是在数学和逻辑任务中,要求模型解释其推理过程会增加正确回答的机会。比如想检查某个数学问题的解决方案是否正确。如果仅仅让模型检查,而不是让它自己解答数学问题,可能会导致错误的输出。因为人类有时如果不亲自计算,仅凭快速浏览也无法捕捉到细微的错误。所以,最好先指示模型自己解决问题,然后将其解答与给定的答案进行比较,再得出结论。

        假如你需要结构化输出结果,也需要明确要求。这对于构建应用程序或进一步处理响应特别有用。可以指定响应的格式,例如要求以项目符号列表、JSON或HTML格式输出。还可以提供输出格式的示例,以确保响应格式正确。

        此外可以设置自检,让大模型检查回答的内容是否满足条件。比如添加“如果你不知道答案,请说‘没有信息’”,避免出现各种幻觉。      

2.2.4 设置角色提示

        prompts很多种类型【6】,其中之一就是Role Prompting【7,8】。可以让大模型按照某个角色执行任务。不同的角色设置,会调整响应的风格和语气,也会影响到大模型的思考方式。

        角色提示使大模型能够将响应调整到符合问题的确切需求。比如可以指示AI成为一名工程师,或者著名艺术家。通过假设特定角色,大模型可以利用相关知识和专业知识,从而提供更准确和信息丰富的回答。

3. 提示词示例

        这两天A股大涨,就用A股来做一个提示词示例,展示如下:

任务描述

撰写一篇关于政策因素如何影响股市走向的文章。请撰写一篇800字的文章,详细讨论不同政策如何影响股市的表现,特别强调货币政策和财政政策的作用。

背景信息

政策因素对股市的影响是一个重要的研究领域。货币政策的变动(如利率调整)和财政政策的变化(如税收政策和支出计划)会直接或间接地影响投资者的信心、市场流动性和整体经济环境,从而影响股市走向。

角色描述

经济学研究员

任务目标

分析政策因素对股市走向的影响,特别是货币政策和财政政策的作用。

特定要求和条件

文章必须包括关于货币政策和财政政策对股市影响的具体讨论,字数不超过800字。

目标受众

投资者、经济学家和政策制定者

衡量标准
  • 准确性:文章内容必须真实反映政策因素对股市的影响。
  • 完整性:需包含关于货币政策和财政政策的具体细节。
  • 流畅性:文章语法正确、语言通顺。
  • 相关性:内容紧扣政策因素影响股市走向的主题。
分步骤指南
  1. 介绍政策因素对股市的总体影响。
  2. 详细讨论货币政策对股市走向的影响。
  3. 详细讨论财政政策对股市走向的影响。
  4. 总结政策因素对股市表现的综合影响。
层次化信息
  • 引言: 介绍政策因素及其对股市的总体影响。
  • 货币政策: 详细讨论货币政策如何影响投资者信心和市场流动性。
  • 财政政策: 详细讨论财政政策如何影响企业盈利和投资环境。
考虑多种可能性和边界条件

示例1:
输入: 利率上升,股市下跌。 输出: 随着利率的上升,借贷成本增加,企业融资困难,导致股市下跌。

示例2:
输入: 税收政策变动,影响市场预期。 输出: 新的税收政策提高了企业税负,导致市场预期下降,投资者信心减弱。

自动检测与修正

设置机制,如果未按要求描述货币政策和财政政策,则提示重新输入相关信息。 示例:
输入: 未提及财政政策。 输出: “请包括关于财政政策的讨论内容。”

语言和文化敏感性

确保内容对各个文化背景的读者友好,避免使用技术术语影响理解。

示例:

  • 营销文章: 使用通俗易懂的语言,避免技术术语。
数据隐私和安全性

示例:
输入: 客户反馈内容,客户ID已脱敏。

任务约束
  • 内容约束: 描述政策因素对股市的具体影响。
  • 格式约束: 包括引言、主体和结论。
  • 风格约束: 使用正式语调。
  • 长度约束: 不超过800字。

大模型的响应结果部分摘录:

4. 参考材料

【1】掌握Prompt写作技巧:写出完美Prompt的秘籍

【2】Create effective prompts

【3】Prompt Engineering: 10 Tips to Write Effective Prompts

【4】Creating Effective Prompts: Tips and Best Practices

【5】The What, Why, and How of Context Length Extension Techniques in Large Language Models – A Detailed Survey

【6】How to Create Effective AI Prompts

【7】What is role prompting in Gen AI?

【8】Role Prompting

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

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

相关文章

问卷调查毕设计算机毕业设计投票系统SpringBootSSM框架

目录 一、引言‌ ‌二、需求分析‌ 用户角色‌: ‌功能需求‌: ‌非功能需求‌: ‌三、系统设计‌ ‌技术选型‌: ‌数据库设计‌: ‌界面设计‌: ‌四、实现步骤‌ ‌后端实现‌: …

Python快速编程小案例——猜数字

提示:(个人学习),案例来自工业和信息化“十三五”人才培养规划教材,《Python快速编程入门》第2版,黑马程序员◎编著 猜数游戏是一种经典的密码破译类益智游戏,通常由两个人参与。一个人在心中设…

【C++网络编程】(三)多线程TCP服务端程序

文章目录 (三)多线程TCP服务端程序多线程服务端客户端 (三)多线程TCP服务端程序 图片来源:https://subingwen.cn/linux/concurrence 主线程负责监听和连接多个客户端,子线程负责和对应的客户端进行通信&am…

vue后台管理系统从0到1搭建(4)各组件的搭建

文章目录 vue后台管理系统从0到1搭建(4)各组件的搭建Main.vue 组件的初构 vue后台管理系统从0到1搭建(4)各组件的搭建 Main.vue 组件的初构 根据我们的效果来看,分析一下,我们把左边的区域分为一个组件&am…

如何将本地磁盘镜像包部署到docker中(以mysql5_7.tar.gz为例)

1.复制文件到宿主机 2.找到对应目录,docker load docker images就可以看到该镜像啦

PE结构之导入表

流程图: 文件中\样式 加载到进程中时 加载到进程中时的过程,一张图不够放 续图 整个流程 考虑到 PE32 可执行文件(64 位),每个 ILT (导入名称表) 条目总结为: 如果设置了高位(位 63,也称为“序号标志”&…

【Spring详解】Maven从安装到应用(Maven Help插件的安装)-国内源的配置(中央仓库及私服的概念)

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &#x1f42f…

48 C 语言实战项目——客户信息管理系统

目录 1 需求说明 1.1 主菜单 1.2 添加客户 1.3 显示客户列表 1.4 修改客户 1.5 删除客户 1.6 退出 2 流程分析 2.1 总流程图 2.2 添加客户流程图 2.3 显示客户列表流程图 2.4 改客户流程图 2.4.1 修改客户总体流程图 2.4.2 具体执行修改部分的流程图 2.5 删除客…

MySQL-约束Constraint详解

文章目录 约束简介非空约束检查约束唯一约束列级约束与表级约束给约束起名字主键约束 约束简介 约束是我们在创建表的时候, 我们可以给表中的字段添加约束确保我们的数据的完整性和有效性, 比如大家平时上网时注册用户常见的 : 用户名不能为空, 对不起, 用户名已经存在等提示信…

【C++】用红黑树模拟实现set与map

目录 一、红黑树的完善: 1、红黑树节点模版的修改: 2、仿函数在模拟实现中的应用: 3、新增迭代器: 4、红黑树中的迭代器实现: 二、set与map的模拟实现: 1、insert: 2、map的[ ]: 三、测…

无刷直流电机工作原理:【图文讲解】

电动机 (俗称马达) 是机械能与电能之间转换装置的通称。可以分为电动机和发电机.一般称电机时就是指电动机。这个在日常应用中,比较多见,比如机器人,手机,电动车等。 直流电机:分为有刷直流电机(BDC&#…

本地ubuntu主机搭建我的世界服务器并免费开启公网映射 结合MESM面板 chmlfrp 保姆级教学

本地ubuntu主机搭建我的世界forge服务器并免费开启公网映射 结合MESM面板 chmlfrp 这是一篇很完成的从ssh命令->配置java环境->安装MCS->部署服务器->开启公网映射的我的世界保姆级开服教程,可以慢慢食用ଘ(੭ˊ꒳ˋ)੭ 。 为什么选择forge服务器进行开服&#x…

【前车之鉴】坑啊~ RestHighLevelClient 超时时间偶尔失效问题解决方案

文章目录 show me code缘起原因分析 几点建议 结论:实际你的配置是生效的,只不过效果不明显而已,通过下面的配置放大直观效果。 show me code 核心代码 public static void main(String[] args) {RestClientBuilder builder RestClient.bu…

【M2TR】M2TR: Multi-modal Multi-scale Transformers for Deepfake Detection

文章目录 M2TR: Multi-modal Multi-scale Transformers for Deepfake Detectionkey points研究贡献方法多尺度变压器频率过滤器跨模态融合损失函数SR-DF数据集实验总结M2TR: Multi-modal Multi-scale Transformers for Deepfake Detection 会议/期刊:ICMR ’22 作者: key …

深入理解栈(Stack)(纯小白进)

目录: 一、栈是什么?1. 栈的概念2.栈的结构选择 二、栈的实现1. 栈结构体的定义2. 栈的初始化3. 栈的销毁4. 入栈5.出栈6. 取栈顶元素7. 栈中元素的个数8. 判断栈是否为空 总结 一、栈是什么? 1. 栈的概念 栈(Stack)…

游戏开发指南:使用 UOS C# 云函数快速构建与部署服务端逻辑实战教学

零基础的服务端小白,现在也可以使用 Unity 结合 C# 来轻松搞定游戏服务端啦! 在本篇文章中,我们将以游戏中的“抽卡”功能为例,展示如何使用 Unity Online Services(UOS)提供的强大 C# 云函数服务&#xf…

Elasticsearch(二)集成Spring Boot 基本的API操作

目录 一、集成Spring Boot 1、创建项目 2、pom文件 查看springboot集成的依赖 3、增加es的config类 二、索引相关API 1、创建索引 2、获取索引,判断其是否存在 3、删除索引 三、文档相关API 1、添加文档 2、获取文档,判断是否存在 3、获取文档…

Java后端面试----某团一面

美团一面 1.介绍一下你的第一个项目 这个就不多说了,主要是根据自己的简历上面的项目进行一个简短的概括使用的技术栈和什么背景解决了什么问题等等。 2.线程安全的类有哪些,平时有使用过哪些,主要解决什么问题 在Java中线程安全的类比如…

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后: 解决方式 方式一 在属性中加上注解,对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

echarts按需引入解决项目大小问题

背景: 按需加载缩减项目大小,提升项目性能和可用性 实现: 创建echarts.js main.js进行配置 页面中引用 效果 全量导入 按需加载: