【AI大模型】Prompt Engineering

目录

什么是提示工程(Prompt Engineering)

Prompt 调优

Prompt 的典型构成

「定义角色」为什么有效?

防止 Prompt 攻击

攻击方式 1:著名的「奶奶漏洞」

攻击方式 2:Prompt 注入

 防范措施 1:Prompt 注入分类器

防范措施 2:直接在输入中防御

高质量 prompt 技巧总结


什么是提示工程(Prompt Engineering)

提示工程也叫「指令工程」。

  • Prompt 就是你发给大模型的指令,比如「讲个笑话」、「用 Python 编个贪吃蛇游戏」、「给男/女朋友写封情书」等
  • 貌似简单,但意义非凡
    • 「Prompt」 是 AGI 时代的「编程语言」
    • 「Prompt 工程」是 AGI 时代的「软件工程」
    • 「提示工程师」是 AGI 时代的「程序员」
  • 学会提示工程,就像学用鼠标、键盘一样,是 AGI 时代的基本技能
  • 提示工程「门槛低,天花板高」,所以有人戏称 prompt 为「咒语」
  • 但专门的「提示工程师」不会长久,因为每个人都要会「提示工程」,AI 的进化也会让提示工程越来越简单

Prompt 调优

找到好的 prompt 是个持续迭代的过程,需要不断调优。

如果知道训练数据是怎样的,参考训练数据来构造 prompt 是最好的。「当人看」类比:

  1. 你知道 ta 爱读红楼梦,就和 ta 聊红楼梦
  2. 你知道 ta 十年老阿里,就多说阿里黑话
  3. 你知道 ta 是日漫迷,就夸 ta 卡哇伊

不知道训练数据怎么办?

  1. 看 Ta 是否主动告诉你。例如:
    1. OpenAI GPT 对 Markdown 格式友好
    2. OpenAI 官方出了 Prompt Engineering 教程,并提供了一些示例
    3. Claude 对 XML 友好。
  2. 只能不断试了。有时一字之差,对生成概率的影响都可能是很大的,也可能毫无影响……

「试」是常用方法,确实有运气因素,所以「门槛低、 天花板高」。

高质量 prompt 核心要点:具体、丰富、少歧义

Prompt 的典型构成

不要固守「模版」。模版的价值是提醒我们别漏掉什么,而不是必须遵守模版才行。

  • 角色:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」
  • 指示:对任务进行描述
  • 上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
  • 例子:必要时给出举例,学术中称为 one-shot learning, few-shot learning 或 in-context learning;实践证明其对输出正确性有很大帮助
  • 输入:任务的输入信息;在提示词中明确的标识出输入
  • 输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如(JSON、XML)

「定义角色」为什么有效?

  • 模型训练者并没想到过会这样,完全是大家「把 AI 当人看」玩出的一个用法
  • 实在传得太广,导致现在的大模型训练数据里充满了角色定义,所以更有效了
  • 有一篇论文证实的现象,可以说明为啥「你是一个 xxx」特别有效

防止 Prompt 攻击

攻击方式 1:著名的「奶奶漏洞」

      正情况下大模型会拒绝回答一些危险的问题,但是用户在进行prompt 的时候,可以让大模型不经意的回答了有害问题。

攻击方式 2:Prompt 注入

     用户在进行prompt 的时候,向大模型提出更换大模型已定义的角色,让他回答用户自身需要的一些问题。

 防范措施 1:Prompt 注入分类器

    就像安检一样,在提交Prompt前,让大模型先判断这个Prompt是否有害。

防范措施 2:直接在输入中防御

当人看:每次默念动作要领。在Prompt前面添加必要的提示要求。

总结:目前并没有 100% 好用的防范方法。 

高质量 prompt 技巧总结

  1.  把大模型当“”人”,看,不同的大模型有不同的沟通偏好。如:chatgpt对 Markdown 格式的文本识别度很高。 Claude 对 XML 友好。
  2.  发出的指令要尽量具体、丰富、少歧义。
  3.  定义角色。现有的大模型里的很多数据都是基于角色定义训练的。
  4.  大模型对prompt的 开始和结束词语更敏感。将重要的事情在末尾描述三遍是一个不错的做法。
  5.  必要的时候举例描述或直接给出模板,能提升大模型回答的准确性。
  6.  思维链模型:将一个复杂的问题拆分成多个小问题,一步步 提问 比 直接将这个复杂的问题丢给 大模型,要可靠的多。
  7.  自洽性: 同一个问题,换个角度多问几次,取出现次数最高的结果。
  8.  注意做好prompt攻击防范。

OpenAI API 的几个重要参数

其它大模型的 API 基本都是参考 OpenAI,只有细节上稍有不同。

OpenAI 提供了两类 API:

  1. Completion API:续写文本,多用于补全场景。https://platform.openai.com/docs/api-reference/completions/create
  2. Chat API:多轮对话,但可以用对话逻辑完成任何任务,包括续写文本。https://platform.openai.com/docs/api-reference/chat/create

说明:

  1. Chat 是主流,有的大模型只提供 Chat
  2. 背后的模型可以认为是一样的,但也不完全一样
  3. Chat 模型是纯生成式模型做指令微调之后的结果,更多才多艺,更听话
def get_chat_completion(session, user_prompt, model="gpt-3.5-turbo"):_session = copy.deepcopy(session)_session.append({"role": "user", "content": user_prompt})response = client.chat.completions.create(model=model,messages=_session,# 以下默认值都是官方默认值temperature=1,          # 生成结果的多样性。取值 0~2 之间,越大越发散,越小越收敛seed=None,              # 随机数种子。指定具体值后,temperature 为 0 时,每次生成的结果都一样stream=False,           # 数据流模式,一个字一个字地接收response_format={"type": "text"},  # 返回结果的格式,json_object 或 texttop_p=1,                # 随机采样时,只考虑概率前百分之多少的 token。不建议和 temperature 一起使用n=1,                    # 一次返回 n 条结果max_tokens=100,         # 每条结果最多几个 token(超过截断)presence_penalty=0,     # 对出现过的 token 的概率进行降权frequency_penalty=0,    # 对出现过的 token 根据其出现过的频次,对其的概率进行降权logit_bias={},          # 对指定 token 的采样概率手工加/降权,不常用)msg = response.choices[0].message.contentreturn msg

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

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

相关文章

请求 响应

在web的前后端分离开发过程中,前端发送请求给后端,后端接收请求,响应数据给前端 请求 前端发送数据进行请求 简单参数 原始方式 在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。 代码…

Thinkphp5实现自定义路由和使用方法

在 ThinkPHP 5 中,实现自定义路由方法通常涉及到定义路由规则和对应的处理逻辑。虽然 ThinkPHP 5 的路由系统已经相当强大和灵活,但如果你需要实现自定义的路由方法,你可能需要扩展或修改现有的路由解析机制。 不过,对于大多数情…

SpringBoot——整合WebSocket长连接

目录 WebSocket 项目总结 新建一个SpringBoot项目 pom.xml WebSocketConfig配置类 TestWebSocketEndpoint服务端点类 socket.html客户端 IndexController控制器 SpringbootWebsocketApplication启动类 测试客户端和服务端如何使用WebSocket进行连接和通信 WebSocket S…

vscode 突然无法启动 WSL terminal 了怎么办?

参考:https://github.com/microsoft/vscode/issues/107485 根据参考网页,似乎在 windows 更新之后,重启,就有可能出现标题所说的 vscode 无法启动 WSL terminal 的情况。 首先使用 cmd 进入 wsl 终端,把 ~/.vscode-se…

(八)Mybatis持久化框架原理之不同Executor对比和Spring事务关系

文章目录 1. SqlSession的差异2. Executor的差异2.1 SimpleExecutor流程说明2.2 ReuseExecutor流程说明2.3 BatchExecutor流程说明 3. Mybatis事务4. Spring事务5. 总结 本篇文章主要是由一次批量插入数据而引起的思考与探究,在这篇文章中将会分析不同的Executor和S…

Vue3+springboot+sa-token

sa-token是什么? sa-token官网Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。 springboot前后端分离集成sa-token maven <!-- Sa-Token 权限认证,在线文档:…

快来速领限量免费亚马逊云科技助理级架构师(SAA)和云从业者50%半价考试券

前几天在上海5/29的亚马逊云科技Summit峰会里&#xff0c;小李哥在现场分享了AWS 13张认证大满贯的心得&#xff08;图1&#xff09;&#xff0c;并且现场招募了自己的云师兄必过班(图2)。 本次必过班也为成员发放AWS SAA(助理级架构师)和云从业者(Cloud Practitioner)50%考试券…

面向对象程序设计

class是关键字&#xff0c;表示要定义类了 类的属性&#xff0c;即定义在类中的变量&#xff08;成员变量&#xff09; 类的行为&#xff0c;即定义在类中的函数&#xff08;成员方法&#xff09; self关键字是成员方法定义的时候&#xff0c;必须填写的。 它用来表示类对象…

AIGC作答《2024年高考作文|新课标I卷》能拿多少分?

AIGC作答《2024年高考作文&#xff5c;新课标I卷》能拿多少分&#xff1f; 一、前言二、题目三、作答 一、前言 如火如荼的2024年高考圆满落幕&#xff0c;在如此Happy的时刻&#xff0c;AIGC技术正以其前所未有的热度席卷全球。它不仅改变了我们获取信息的方式&#xff0c;也…

Rust-10-数据类型

Rust 标准库中包含一系列被称为 集合&#xff08;collections&#xff09;的非常有用的数据结构。大部分其他数据类型都代表一个特定的值&#xff0c;不过集合可以包含多个值。不同于内建的数组和元组类型&#xff0c;这些集合指向的数据是储存在堆上的&#xff0c;这意味着数据…

【risc-v】arm和riscv有什么关系或者联系?

ARM和RISC-V都是基于精简指令集计算&#xff08;RISC&#xff09;原理的处理器架构&#xff0c;它们在设计理念上有一定的联系&#xff0c;但同时存在一些关键的区别&#xff1a; 设计理念&#xff1a;ARM和RISC-V都采用了RISC的核心设计原则&#xff0c;即通过简化指令集来提高…

C++知识点总结(36):深度优先搜索算法

DFS 一、概念二、典型题目1. 题目2. 分析3. 参考答案 三、变形题目1. 路径数量1.1 审题1.2 思路 2. 走迷宫的过程2.1 审题2.2 参考答案 一、概念 深度优先搜索&#xff08;简称 DFS&#xff09;&#xff0c;其工作原理为不撞南墙不回头&#xff0c;能深则深&#xff0c;不能则退…

Element-UI入门

目录 1.什么是Element-UI 2.作用 3.版本历史 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.代码示例 7.未来展望 8.总结 1.什么是Element-UI Element-UI 是由饿了么前端团队开发的一套基于 Vue.js 的桌面端组件库。提供了一整套 UI 组件&#xff0c;使开发者能够快速构…

一步一学!如何通过SOLIDWORKS曲面放样绘制花瓶?

SOLIDWORKS中&#xff0c;我们对放样凸台的操作已经非常熟悉。现在&#xff0c;我们将进一步探索曲面菜单栏中的放样成型功能。 1、绘制草图 首先&#xff0c;同普通放样凸台建模相同&#xff0c;绘制放样轮廓及引导线段。 可通过创建基准面布置轮廓&#xff0c;利用穿透选项将…

AVL许可安全性问题

在数字化时代&#xff0c;软件已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件应用的广泛普及&#xff0c;安全性问题也日益凸显。如何保障软件使用安全&#xff0c;防止潜在风险&#xff0c;成为了我们必须关注的重要议题。AVL许可作为软件管理的重要组成…

144、二叉树的前序递归遍历

题解&#xff1a; 递归书写三要素&#xff1a; 1&#xff09;确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值 2&#xff09;确定终止条件。操作系统也是用栈的方式实现递归&#xff0c;那么如果不写终止条件或者终止条件写的不对&#xff0c;都…

Android 各个版本名称和特性总结(持续更新)

我们就从Android 5.0开始吧&#xff0c;因为从写文时起&#xff0c;大部分手机都到5.0了。 目录 Android5.0 &#xff08;Lollipop 棒棒糖&#xff09;新特性 Android6.0新特性 Android7.0新特性 Android8.0(O)新特性 Android9.0新特性 Android10.0(Q)新特性 Android11…

定位器追踪器怎么连接手机

定位器追踪器连接手机的方法主要取决于追踪器的类型和功能。下面将列举一些常见的方式来说明如何将定位器追踪器与手机连接&#xff1a; 蓝牙连接 检查设备兼容性&#xff1a;确保你的定位器追踪器支持蓝牙功能&#xff0c;同时手机的蓝牙也已开启。进行配对&#xff1a;在手机…

前端调用接口有参数正常显示返回值,但是打印是undefined

前端调用接口有参数正常显示返回值&#xff0c;但是打印是undefined 这种有几种情况&#xff0c;但总的来说是因为我们做了接口拦截器的处理 一、后端返回code值有误 比如新来的后端忘记传code了。&#xff08;按照公司规范&#xff0c;一般都是200成功码&#xff09; 或者网上…

java程序100道21-30

21.定义一个接口A&#xff0c;有一个String的常量值为Java的 s&#xff0c;有void 的print()方法和String 的getInfo()方法&#xff0c;类X是A的实现类&#xff0c;类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; ​ public…