Prompt工程与实践
Prompt工程与实践
一、Prompt与大模型
1.1 大模型的定义
大模型本质上就是一个概率生成模型,该模型的模型参数足够大,并且在训练过程中阅读了非常多的各个领域的语料。这个时候,如果通过一个正确的、有效的指令去引导这个模型,就能够生成我们想要的内容。
1.2 大模型的用途
- 信息抽取
将长段文字提取出结构化信息
- 信息检索
通读结果并根据你的查询生成针对性的回答
- 对话系统
根据制定规则进行对话
- 辅助开发
辅助编写代码,降低门槛
- Agent
Agent模型加上外围的技术架构可以让大模型去完成一个具体的任务,将任务背后的若干个工作都做好。
其中的智能工单系统就一边跟你沟通,一边去调用后端的一些接口,将自身的诉求下发到接口里帮助你直接去问完成。比如说智能导购系统,通过我们在前端构建一个用户和这个机器的一个聊天的一个交互的界面,然后在背面我们把更多丰富的像商品搜索的接口、下订单的接口都连接起来,让用户和模型在对话的过程中,执行各种后端的工具,完成一个闭环的完整任务。
Agent的价值就是模型可以充分利用多个API,换而言之,每个人都可以构建一个垂直领域的Agent的机器人,然后调用平台各种开发的工具,完成自己想让他完成的一个特定领域的任务。
预训练环节是模型厂商会大量做的工作,目的是让模型具备一个基础的智能,然后它可以面对各行各业的问题,能够有一个比较好的基础的认知,能够去分析、推理。进一步到了这个具体的场景当中,我们可以通过微调和指令工程这俩个方式,然后去调用大模型的能力去解决具体的业务问题。特别是微调这个环节,可以使用较多的监督性语料,从而去改变模型的参数,使其在这个具体的事情上做得更加充分。
对于指令工程,我们要考虑**如何用工程化的方式写好一个指令?**它没有特别多的模板,更多的是一些指导性的思路。我个人的建议是,**写好一个Prompt,在刚接触的情况下,可以先基于一些基本的框架进行套用,结合原理以及一些指导性的思路对指令进行添加和改写。**如果在可以的情况下,可以预先准备好数据集,包含了Input
、Output
、Output tips
、Reason
等等部分,并且不断地通过LLM的反馈来进一步修正Prompt。
二、Prompt框架
不同的任务类型对应不同的Prompt框架,不同的Prompt框架对应不同的思考逻辑;每个框架都有自身适合的场景。
2.1 CO-STAR框架
介绍
CO-STAR Framework是最新一届的新加坡政府举办的Prompt工程大赛的冠军选手的框架,可以予以借鉴。
如何应用CO-STAR框架:
·©上下文:为任务提供背景信息,通过为大语言模型(LLM)提供详细的背景信息,可以帮助它精确理解讨论的具体场景,确保提供的反馈具有相关性。
·(O)目标:明确你要求大语言模型完成的任务 清晰地界定任务目标,可以使大语言模型更专注地调整其回应,以实现这一具体目标
·(S)风格:明确你期望的写作风格 你可以指定一个特定的著名人物成某个行业专家的写作风格。如商业分析师或CEO。这将指导大语言模型以一种符合你需求的方式和词汇选择进行回应。
·(T)语气:设置回应的情感调 设定话当的语气,确保大语言模型的回应能够与预测的情感或情绪背景相协调。可能的语气包括正式、幽默、富有同情心等。
·(A)受众:识别目标受众 针对特定受众定制大语言模型的回应,无论是领域内的专家,初学者还是儿童,都能确保内容在特定上下文中适当且容易理解。
·®响应:规定输出的格式 确定输出格式是为了确保大语言模型按照你的具体需求进行输出,便于执行下游任务。常见的格式包括列表、JSON格式的数据、专业报告等。对于大部分需要程序化处理大语言模型输出的应用来说,JSON格式是理想的选择。
2.2 其他框架
- ICIO框架
将指令的内容分为四个部分,第一部分是介绍角色、任务和背景知识,第二部分是给出执行的步骤、思维链、样例数据,第三部分是给出输入数据,第四部分是给出输出的定义和指引。
- LangGPT
这个框架更偏向开发,给了很多的细节要求,里面有一部分涉及到洞察力,比如说工程师需要自行判断这个指令的目标用户是什么?因此写指令不仅需要我们的逻辑能力,也需要我们的产品能力。
三、Prompt原则
3.1 清晰明确
可以考虑将我的理想输出内容细化为多个部分,限定字数,来使其更加清晰明确。
3.2 给模型思考的空间和路径
将模型做这件事情的思考过程尽可能地讲清楚,比如说在标黄的三部分,对开头、主体和结尾三大部分给模型一个具体的思考逻辑。写好一个指令的前提是需要有一个清晰的目标,有些问题可能比较有难度,光给他目标也不够,此时就应该附加一些具体的思考逻辑和路径。
四、Prompt的指导性思路
4.1 Few Shot
给出示例来解释内容
Few Shot
其实是一个Context Learning
的思路,通过说不改变模型的思路,仅仅通过指令的上下文窗口去调优模型生产内容,提供一些示例,让模型自己去学。
4.2 COT(Chain Of Thought)
让其输出思考过程,将COT量化出来,提升模型输出的准确性。
进一步强化的话,可以给一些具体的COT的示例。
4.3 Temperature
temperature
用于控制模型输出内容的多样性。temperature
越低,内容越稳定;temperature
越高,内容越多样。
利用指令追求正确性的过程中,大模型的创造性在很多场景对于一些难题或者一些需要创造性答案的题很有帮助。
4.4 top_p
top_p
影响每次输出选词集中的程度。
top_p
越低,选词词数越集中;top_p
越高,选词词数越发散。
4.5 Tree Of Thought
将任务拆分为多个子任务,再通过不同的Prompt指令进行实现。
4.6 Agent
此处我们以定义一个"智能客服"的Agent
为例。
第一部分我要在其中定义好工具,对于一个智能客服,我们需要定义像订单情况的查询,天气的查询计算器,政策赔偿查询等等。第二部分是我要告诉指令你该怎么去做思考,遇到每个工具返回的过程性结果,应该如何去做思考?第三部分是对于每个思考,都需要有具体的行动和调用的工具,最终得到Final Action
,做出行动。
Agent
的明显优势就是能够独立完成一个完整的任务,这对Prompt工程设计的要求程度更高,我们至少要定义清楚这个工具的用途,以便让模型知道应该调用哪个工具,并且需要告诉模型在这个场景下应该去如何拆解任务。因此大家可以看到,随着模型能力的不断增强,指令在这其中发挥的作用只会越来越大。
五、Prompt Engineering是什么
- 迭代:没有人能直接写出100分的指令
- 评测:像训练算法模型一样优化你的指令
我们需要==通过评测集==对指令不断地去调优,判断该指令是否能够放到生产环境中去用。
六、调优Prompt
Prompt的调优一般从内容和结构两个方面进行入手。
6.1 从内容上调优指令
- 角色迭代
告知大模型他应该扮演的角色,例如"你是口语对话教练"
- 任务迭代
对于指令中的关键动作,尝试不同的近义词或其他相近的描述来提升准确性。
避免负向指令,通过更换概念等方式,尽量告诉模型应该输出什么。
逻辑完备,避免在"无"的时候,大模型自由发挥、臆造信息。
- Few Shot迭代
使添加的样例比例更加均匀。
6.2 从结构上迭代指令
- 分隔符:将文本上下文、不同的知识模块做分隔,避免无关知识模块的影响。
-
分条目
-
顺序
先输出的内容会影响后输出的内容。可尝试不同的顺序,避免提取项之间的干扰,找到最佳的提取效果。
- 嵌套
对于每一个要求尽量让模型都独立的做出判断
- 位置
指令的首部和尾部的指令遵循效果较好,适当的调整位置
七、指令工程实战
7.1 用户情绪识别
1.增加COT,告知思考过程,是如何判断正向还是负向的?
2.将具体的细节表述得更清晰
3.在正向、负向、中性情绪的判断增加一些Few Shot
4.对输出的格式进行强约束
- 给文章打分(从文章中抽取信息)
- 赋予角色
- 添加修辞关键特征、分析原因
- 加示例、引号强调
- 增添一些反面示例
相关文章:

Prompt工程与实践
Prompt工程与实践 一、Prompt与大模型 1.1 大模型的定义 大模型本质上就是一个概率生成模型,该模型的模型参数足够大,并且在训练过程中阅读了非常多的各个领域的语料。这个时候,如果通过一个正确的、有效的指令去引导这个模型,…...

电脑录屏怎么录?7个电脑录屏软件免费版强势来袭,赶快收藏!
电脑录屏怎么录?相信很多小伙伴们都不知道怎么在Windows电脑上录屏吧?在当今社会,随着互联网的快速发展,越来越多的小伙伴们开始通过制作视频内容来分享知识、展示技能或者记录生活。电脑录屏成为了一种简单高效的方式,…...
ts: 映射类型
映射类型会携带接口的可选和只读属性 interface User { name: string; age?: number; readonly email: string; } interface User { name: string; age?: number; readonly email: string; } type change<T> {[P in keyof T]: T[P] } type obj change<…...
调出idea解决冲突界面
背景 我对idea使用不熟练,还是习惯用git bash来合并代码,合并爆冲突后,我进入idea准备解决冲突,却发现找不到解决冲突的界面。 解决 右击idea中冲突的文件,将鼠标移动到菜单栏的git上,此时应该出现包含有…...
android studio项目 gradle-xx-bin.zip下载失败或很慢的解决方法
一、环境: gradle官网:https://services.gradle.org/distributions/ IDE: android studio 二、下载并拷贝以下文件 下面已 gradle-8.0 为例,gradle缓存目录为(file->settings->Build,Execution…->Build Tools->Gradle查看Gradle…...

Python系列:教你使用PyMySQL操作MySQL数据库
Python系列 PyMySQL操作MySQL数据库 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855…...
mysql数据库管理面试题-1
1. 描述MySQL架构及其主要组件(例如存储引擎、缓存、优化器等)。 MySQL的架构可以分为三层: 客户端层:这是用户和MySQL数据库交互的接口,包括命令行工具、图形化管理工具等。 服务层:这是MySQL的核心部分…...
Linux安装zsh并配置oh-my-zsh
配置oh-my-zsh 查看当前shell安装zsh切换到zsh配置ohmysh 查看当前shell cat /etc/shells# /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash安装zsh sudo apt install zsh# /etc/shells: valid login s…...

echarts(6大基础图表)的使用
目录 一、vue2挂载 二、柱状图 2.1、基础柱状图介绍 2.2、标记:最大值\最小值(markPoint)、平均值(markLine) 2.3、显示:数值显示(label)、柱子宽度(barWidth)、横向柱状图 三、折线图 3.1、标记:最大值\最小值(markPoint)、平均值(ma…...
React hooks - forwardRef+useImperativeHandle
forwardRefuseImperativeHandle React.forwardRef用法useImperativeHandle用法第三个参数的用法 React.forwardRef与useImperativeHandle配合使用注意事项 React.forwardRef用法 1.创建一个 能够接受到ref属性的React 组件。 ref 用来获取实例,但函数组件不存在实例…...

MyBatis出现:SQLSyntaxErrorException: Unknown column ‘XXX‘ in ‘field list‘
<update id"updateStudent">update tb_students set stu_name${stuName},stu_gender${stuGender},stu_age${stuAge},stu_tel${stuTel}where stu_num ${stuNum}</update> 本质上来说,是Mybatis使用上的错误,不熟悉,理…...
代码随想录算法训练营Day54 | 392.判断子序列、115.不同的子序列 | Python | 个人记录向
本文目录 392.判断子序列做题看文章 115.不同的子序列做题看文章 以往忽略的知识点小结个人体会 392.判断子序列 代码随想录:392.判断子序列 Leetcode:392.判断子序列 做题 借鉴Day53中1143.最长公共子序列的思路,最后改一下判断逻辑即可。…...
利用oracle默认事务隔离级别(提交读)提升多表联查速度
利用oracle默认事务隔离级别(提交读)提升查询速度) 背景介绍: 数据量大查询缓慢,添加太多条件,使用IN走了全表查询导致查询速度缓慢。 解决方案: 版本一: 新建临时表,在查询是将数据插入到临时表中&#…...

B/S架构+java语言+Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用?
B/S架构+java语言+Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用? 药物不良反应(ADR)是指在合格药物以正常用量和用法用于预防、诊断、治疗疾病或调节生理功能时所发生的意外的、与防治目的无关的、不利或…...

Matlab中% note that Wilkinson notation (‘L1~L4~1‘) is used to specify the model
fitrm 函数的输入参数不正确,似乎出错的地方是在定义 fitrm 对象时使用了不正确的参数。 fitrm 函数的语法是这样的: rm fitrm(tbl, model, WithinDesign, withinDesign) 其中: - tbl 是一个表格,包含了待分析的数据。 - mod…...
测试测试测试
一分钟速览新闻点! 京东前副总裁蔡磊回应被指装病:没有时间、精力和能力应对 百度沈抖:主力模型免费的原因很朴素,希望大家别再天天拉表格比价格 蚂蚁集团CTO何征宇:蚂蚁一直在努力优化和提高AI的可靠性、经济性和易…...

动态规划专题
leecode 221 class Solution { public:int maximalSquare(vector<vector<char>>& matrix) {int n matrix.size();if (n 0) return 0; // 如果矩阵为空,则直接返回0 int m matrix[0].size();vector<vector<int>> ans(n, vector<i…...

.net8.0与halcon编程环境构建
1.安装vs2022 2.安装h-12.0.exe ,不要勾选复选框 3.vs2022新建wpf应用程序 4.依赖项添加项目应用,选择halcondotnet.dll 5.安装System.Drawing 安装 HalconDotNet 安装 Rti.HDevEngineDotNet 在工具箱 空白处右键 应用halcon.dll WPF控件也应用halcon.dll 6.xaml申明hal…...

文心智能体平台:快来创建你的Java学习小助理,全方位辅助学习
文章目录 一、文心智能体平台1.1平台介绍1.2智能体介绍 二、智能体创建三、体验与总结 一、文心智能体平台 文心智能体平台是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类…...

AppInventor2 表格布局的外面的黑框怎么去掉?
问:表格布局的外面的黑框怎么去掉啊? 答:这个黑框是界面设计的布局位置示意,实际 App 测试时并没有框。 来源:AppInventor2 表格布局的外面的黑框怎么去掉? - App应用开发 - 清泛IT社区,为创新…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...