大模型应用(六)如何写好一个prompt,理论+实践

news2024/9/20 10:32:33

前言

设定是四个基本要素之一,没有一个好的prompt,就绝对不可能有一个好的agent。

如何写prompt的大部分是我粘的,实在是懒得写了。不感兴趣可以直接跳实战。

什么是prompt

大语言模型(LLM)的能力并不是被设计出来的,需要人不断去探索ta的能力边界,prompt 就是探索的一种方式。目前看到的各种教程,其实就是探索出了一些典型【方式或规则】实践,直接复用就可以达到预期效果。

什么是pe

pe是Prompt Enginerring的简写。中文翻译成“指令工程”。常规的通过 ChatGPT 的聊天界面输入的信息,是通常理解的 Prompt;而通过调用 LLM 的 API 接口,给 LLM 发出指令就可以理解成“Prompt Enginerring”,目前市面上大部分教程都是关于 prompt enginerring 的

Temperature

Temperature 用来控制模型输出内容的稳定性,因为 LLM 的输出是通过“概率”来排序的。如果对同一个问题想要每次输出完全一致的内容,temperature 直接设置为 =0。而如果我们想要提升 LLM 输出内容的“创意性”,可以把 temperature 的数值往上增加,一般来说 temperature 在【0-1】的范围获得的结果是可用的,大于1可能结果就不可用了。我们最好是按不同场景来配置 temperature 的数值,例如写诗就需要更高的 temperature 数值。

如何写一个好的prompt

OpenAI 的官方说明文档中,提供了 6 个提升 prompt 能力的原则/方法,每个方法中又包括了一些子方法,整个 Best Practices Guide 就是围绕这 6 个方法来的。而且在官方的文档中,还提供了在线测试的工具,可以边修改内容边查看效果,所以推荐作为小白学习 prompt 的第一个教程。6 大原则如下:

  1. 指令要清晰
  2. 提供参考内容
  3. 复杂的任务拆分成子任务
  4. 给 GPT “思考”时间
  5. 使用外部工具
  6. 系统性测试变化

代码实战

按照惯例,先来个构建抽象,非常简单。

pub trait PromptBuilder:Send+Sync {
    async fn build(&self,uid:&str,query: &str,lg:Language)->String;
}

构造一个通用的模版:

#[derive(Clone,Default)]
pub struct PromptCommonTemplate{
    role:Option<String>,  //角色
    target:Option<String>,//目标
    style:Option<String>, //风格
    skill:Option<Vec<String>>, //技能
    example:Option<Vec<String>>, //示例
    user:Option<Vec<(String,String)>>, //信息
    records:Option<Vec<String>>, //记录
    limit:Option<Vec<String>>, //限制
    extend:Option<Vec<(String,String)>>, //拓展设定
    ...
}

实际使用,让我们来构建一个角色

let p = PromptCommonTemplate::default()
    .memory(memory)
    .role("你叫旋涡名人,是动漫《火影忍者》的主角。身体里封印着九尾,是九尾人柱力,你拥有无尽的查克拉。")
    .target("成为火影,保护你所在的村子木叶")
    .style("热血,大大咧咧,中二,好色")
    .add_skill("螺旋丸:将查卡拉凝聚在手中不断旋转,当它碰到敌人时会造成巨大伤害")
    .add_skill("多重影分身:分裂出多个和自己类似的复制体,用于迷惑或攻击敌人")
    .add_example("面对雏田:既然你什么也做不了就别做了,等我当上了火影,再来改变你们日向家吧!")
    .add_example("面对自来也:吹过村子的风开始编织,将师徒间的羁绊永远的连在一起。")
    .add_example("面对纲手:我会成为火影!而且是超越历代火影的火影!笔直向前!我绝不会违背自己的誓言")
    .add_example("面对村民:所谓的火影就是要强忍伤痛走在大家面前的人,为了大家把死胡同开辟成坦荡通途的人。想成为火影,根本就没有近路可抄,而对于成为了火影的人而言,也根本就没有后路可退。")
    .add_example("面对朋友:我向来都是有什么话就直说的,因为这就是我的忍道!")
    .add_user("父亲","第四代火影波风水门")
    .add_user("母亲","旋涡玖辛奈")
    .add_user("老婆","日向雏田")
    .add_user("最好的朋友","春野樱,宇智波佐助")
    .add_user("老师","自来也")
    .add_user("年龄","18岁")
    .add_limit("你曾经最喜欢的人是春野樱,现在最喜欢的人是日向雏田")
    .add_extend("你现在面对的人是:",r#"${name}"#)
    .add_tags(vec!["name".into()])
    .build(uid, "来,打一架吧", Language::Chinese).await;

println!("--->\n{}\n<---",p);

看一下构建后的样子:

# 角色
你叫旋涡名人,是动漫《火影忍者》的主角。身体里封印着九尾,是九尾人柱力,你拥有无尽的查克拉。
## 目标
成为火影,保护你所在的村子木叶
## 风格
热血,大大咧咧,中二,好色
## 技能
1. 螺旋丸:将查卡拉凝聚在手中不断旋转,当它碰到敌人时会造成巨大伤害
2. 多重影分身:分裂出多个和自己类似的复制体,用于迷惑或攻击敌人
## 示例
1. 面对雏田:既然你什么也做不了就别做了,等我当上了火影,再来改变你们日向家吧!
2. 面对自来也:吹过村子的风开始编织,将师徒间的羁绊永远的连在一起。
3. 面对纲手:我会成为火影!而且是超越历代火影的火影!笔直向前!我绝不会违背自己的誓言
4. 面对村民:所谓的火影就是要强忍伤痛走在大家面前的人,为了大家把死胡同开辟成坦荡通途的人。想成为火影,根本就没有近路可抄,而对于成为了火影的人而言,也根本就没有后路可退。
5. 面对朋友:我向来都是有什么话就直说的,因为这就是我的忍道!
## 信息
- 父亲: 第四代火影波风水门
- 母亲: 旋涡玖辛奈
- 老婆: 日向雏田
- 最好的朋友: 春野樱,宇智波佐助
- 老师: 自来也
- 年龄: 18岁
## 限制
1. 你曾经最喜欢的人是春野樱,现在最喜欢的人是日向雏田
## 设定
### 你现在面对的人是:
宇智波佐助

看一下交互上的效果,主要是组建标签,和召回历史记录。

  • 在每轮对话中动态组建pe
  • 我这里提前用memory总结了一个记录

image.png

尾语

总的来说prompt很容易,但是想写好却很难,需要大量实践经验。

在这里插入图片描述

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

【数据结构与算法】迷宫求解------回溯法

回溯法 一.迷宫求解算法二.二维数组表示地图1.地图2.初始化地图3.地图的打印 三.进入迷宫四.栈的实现五.迷宫内探1.首先判断我们的入口2.入栈做标记3.开始探险4.出口判断5.能否下一步6.做标记7.不能下一步 六.运行结果 一.迷宫求解算法 当我们想要找到迷宫的出口,那我们在计算…

为什么网站要使用HTTPS访问

网站使用HTTPS访问的原因有很多&#xff0c;主要可以归纳为以下几个关键点&#xff1a; 1、数据安全性&#xff1a;HTTPS使用SSL/TLS协议对通信过程进行加密&#xff0c;确保信息在传输过程中不被窃取、篡改或冒充。对于涉及敏感信息&#xff08;如个人身份、信用卡号等&#x…

AnyGPT: Unified Multimodal LLM with Discrete Sequence Modeling

发表时间&#xff1a;arXiv 2024年2月26日 论文链接&#xff1a;https://arxiv.org/pdf/2402.12226 作者单位&#xff1a; Fudan University Motivation&#xff1a; LLM 在理解和生成人类语言方面表现出非凡的能力。但是&#xff0c;LLM 的能力仅限于针对文本的处理。而现实…

JVM系列 | 对象的消亡2——HotSpot的设计细节

HotSpot 的细节实现 文章目录 HotSpot 的细节实现OopMap 与 根节点枚举根节点类型及说明HotSpot中的实现 OopMap 与 安全点安全点介绍如何保证程序在安全点上&#xff1f; 安全区域记忆集与卡表记忆集卡表 写屏障并发的可达性分析&#xff08;与用户线程&#xff09;并发可达性…

Spring boot框架指南

1. Spring Boot 概述 1.1 定义与起源 Spring Boot是一种基于Spring框架的开源框架&#xff0c;旨在简化Spring应用程序的创建和开发过程。它通过提供一系列默认配置和自动配置功能&#xff0c;减少了开发者在配置上的工作量&#xff0c;使得快速搭建生产级别的Spring应用程序…

OV SSL证书优势及获取渠道

OV证书&#xff0c;即组织验证型SSL证书&#xff0c;通过严格的组织审查流程&#xff0c;为网站提供数据传输加密、身份验证和信息完整性保护。 OV证书优势 1 高信任度 OV证书通过证书颁发机构&#xff08;CA&#xff09;对企业实名认证&#xff0c;包括企业名称、注册地址、…

万能门店小程序开发平台功能源码系统 带完整的安装代码包以及安装搭建教程

互联网技术的迅猛发展和用户对于便捷性需求的不断提高&#xff0c;小程序以其轻量、快捷、无需安装的特点&#xff0c;成为了众多商家和开发者关注的焦点。为满足广大商家对于门店线上化、智能化管理的需求&#xff0c;小编给大家分享一款“万能门店小程序开发平台功能源码系统…

kernel32.dll丢失?那么kernel32.dll如何修复?教你几种修复丢失kernel32.dll错误的方法

在使用电脑时你是否遇到过kernel32.dll丢失的情况&#xff0c;那么遇到这种情况应该如何解决呢&#xff1f;遇到kernel32.dll丢失就会导致电脑无法正常运行&#xff0c;应用程序也会无法正常使用&#xff0c;今天就教大家kernel32.dll丢失的解决办法。 几种解决kernel32.dll丢失…

破解USB设备通讯协议实现自定义软件控制的步骤与方法

在设备和计算机之间通过USB进行通讯的情况下&#xff0c;厂家提供的软件可以控制设备&#xff0c;但没有提供任何其他资料和支持&#xff0c;这种情况下&#xff0c;若希望自行开发软件来实现同样的功能&#xff0c;可以通过以下步骤破解通讯协议并开发自定义程序。 1. 捕获US…

干货!如何选择Ai大模型(LLMs)?

过去一年里&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在人工智能界风起云涌&#xff0c;纷纷以突破性的进步拓展生成式人工智能的可能性。新模型层出不穷&#xff0c;令人目不暇接。 这些模型依靠日益增长的参数数量和庞大的数据集进行训练&#xff0c;显著提升了…

CentOS版本的Linux系统误删了自带的python和yum,恢复过程

文章借鉴于&#xff1a;Centos误删自带python2.7恢复方法_centos默认的被卸载了-CSDN博客 在进行别的操作的时候&#xff0c;一不小心将我的系统自带的Python2.7.5和yum删除掉了。 后来我尝试重新安装yum&#xff0c;但是安装yum必须要有python。 我又去重新安装了python&am…

前端面试:项目细节重难点问题分享(16)

&#x1f481;&#x1f481;更多详情&#xff1a;爱米的前端小笔记&#xff08;csdn~xitujuejin~zhiHu~Baidu~小红shu&#xff09;同步更新&#xff0c;等你来看&#xff01;都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&…

数据库|SQLServer数据库:数据的基本查询

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 其实对于数据库的查询以前也应用过&#xff0c;只是使用时一般也是根据要实现的要求从网上搜索&#xff0c;能实现应用要求即可&#xff0c;现在根据视频学习&#xff0c;正好有这么一节&#xff0c;就听一遍&#xff…

ROS 2 话题:使用C++进行发布与订阅

ROS 2 话题&#xff1a;使用C进行发布与订阅 ROS 2提供了一种强大而灵活的通信机制&#xff0c;称为话题&#xff08;Topics&#xff09;。话题允许节点之间进行异步消息传递&#xff0c;从而实现松耦合的通信模式。在本文中&#xff0c;我们将介绍如何使用C编程语言在ROS 2中…

常见中间件漏洞大全及其修复方法(未完成)

一.Tomcat tomcat 是一个开源而且免费的 jsp 服务器&#xff0c;默认端口 : 8080 &#xff0c;属于轻量级应用服务器。它可以实现 JavaWeb程序的装载&#xff0c;是配置 JSP &#xff08; Java Server Page &#xff09;和 JAVA 系统必备的一款环境。 1.1 CVE-2017-12615 Tomc…

Transformers 中的Softmax 和 Layer Norm 如何并行?

1.Softmax 如何并行&#xff1f; Softmax 计算公式&#xff1a; 安全的 Softmax 运算&#xff1a; softmax 有个问题&#xff0c;那就是很容易溢出。比如采用半精度&#xff0c;由于float16的最大值为65504&#xff0c;所以只要x>11&#xff0c;那么softmax就溢出了。即使是…

C语言新手小白详细教程(6)函数

希望文章能够给到初学的你一些启发&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏支持一下笔者吧&#xff5e; 阅读指南&#xff1a; 开篇说明为什么要使用函数&#xff1f;1.定义一个函数2.调用函数3.定义函数详解 开篇说明 截止目前&#xff0c;我们已…

华清IOday7 24-8-5

文章目录 使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&#xff0c;另一个进程收到消息后&#xff0c;展示到终端上&#xff0c;并且将消息保存到文件上一份使用有名管道实现两个进程间相互通信 使用有名管道实现&#xff0c;一个进程用于给另一个进程发消息&a…

服务器数据恢复—raid5阵列上层Oracle数据库数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器上有8块SAS硬盘&#xff0c;其中的7块硬盘组建了一组RAID5阵列&#xff0c;另外1块硬盘作为热备盘使用。划分了6个LUN&#xff0c;服务器上部署有oracle数据库。 RAID5磁盘阵列中有2块硬盘出现故障并离线&#xff0c;RAID5阵…

浮点数在计算机中的编码方式

一、前言 我们常能听到&#xff0c;直接用浮点数做运算得出的结果是不准确的了&#xff1b;或者也能看到涉及到浮点数时&#xff0c;会出现一些奇奇怪怪的问题&#xff0c;比如&#xff1a; public class DecimalTest {public static void main(String[] args) {float f1 1.…