吴恩达ChatGPT《Prompt Engineering》笔记

news2024/11/15 7:31:07

ChatGPT 提示词工程师教程

1. 课程介绍

1.1 ChatGPT 相关术语

LLM:Large Language Model,大语言模型

Instruction Tuned LLM:经过指令微调的大语言模型

Prompt:提示词

RLHF:Reinforcement Learning from Human Feedback,人类反馈强化学习

Chat Completion:

Temperature:其范围是0到1,它用于控制模型响应的多样性,可以将其视为模型的探索程度或随机性。

1.2 Instruction Tuned LLM 训练流程

Instruction Tuned LLM 训练流程:已经有在大量语料上进行预训练的模型 Base LLM,然后使用输入和输出格式的指令数据集进行微调,让模型更好的遵循这些指令,然后使用 RLHF 的技术进一步优化,让模型能够更好地遵循指令。最终,模型可以根据提示词生成有用的,诚实的和无害的文本。
在这里插入图片描述

在使用 Instruction Tuned LLM 时,可以将其视为给一个聪明但不知道具体任务的人提供指令。因此,当LLM的效果不尽如人意时,有可能是因为提供的指令不够清晰。

2. 编写提示词指南

2.1 OpenAI API 使用

安装 OpenAI 的库

pip install openai

设置密钥

import openai
import os

from dotenv import load_dotenv, find_dotenv
# 读取本地 .env 文件
_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv("OPENAI_API_LEY")
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(model=model, messages=messages, temperature=0)
    return response.choices[0].message["content"]

2.2 原则1:编写明确和具体的指令

这样做的目的是让模型生成更详细和更相关的内容。

1)使用分隔符清楚地知识输入的不同部分

在这里插入图片描述

```{text}```指明了让模型需要总结的文本段落。这样做的目的是将提示词的其余部分与该部分文本明确地分隔开,防止无关的内容影响模型的输出结果。下面这些分隔符的作用在当前例子中是等价的。

在这里插入图片描述

2)要求模型的输出格式化为 JSON/HTML 类型

具体的Prompt:

在这里插入图片描述

3)要求模型检查是否满足某些条件

要求模型先检查是否满足某些条件,并让模型分别按照不同情况处理。

在这里插入图片描述
在这里插入图片描述

4)为模型提供少量提示

此举旨在要求模型执行任务之前,在Prompt中提供少量成功执行任务的示例,以让模型学会示例中的风格。

在这里插入图片描述

2.3 原则2:给模型思考的时间

如果模型急于给出回复而导致生成的内容出现推理错误,作为调用方,在模型提供最终答案之前,我们应该尝试重新构建查询请求相关推理的链或序列。

1)指定完成任务所需的步骤

在这里插入图片描述

在这里插入图片描述

2)要求模型在输出结果之前思考解决方案

如果在提示词中,人为规定了处理逻辑,那么默认情况下ChatGPT只会按照提示词中的逻辑处理,如果出错则报错,不会再自行计算。如果想为了规避人为指定处理逻辑出错的问题,可以添加提示词,让ChatGPT在按照人为指定计算逻辑计算出错时,返回ChatGPT按照自己的逻辑的计算结果。

在这里插入图片描述

修正之后的提示词:让模型按照规定的步骤(子任务)去执行。

在这里插入图片描述

上面的提示词说明了:让模型给出自己的解决方案,然后将其与提示词中的方案对比,并评估提示词中的方案是否正确。

在这里插入图片描述

2.4 模型的局限性

1)模型的幻觉

即使使用了大量的知识来训练模型,但它并没有完全记住这些信息。因此,它并不是非常了解其知识的边界,这导致的后果是当模型在尝试回答一些晦涩难懂的问题时,他可能会编造听起来合理但是不正确的内容。这称之为幻觉(Hallucination)。

一个关于牙刷的例子:模型输出了一个不存在的产品的描述。

在这里插入图片描述

2)应对策略

减少这种幻觉的策略是:要求模型首先从文本中找到任何相关的引用,然后要求它使用这些引用来回答问题。加上生成这些答案的引用也有助于减少幻觉。

3. 迭代演进提示词

在这里插入图片描述

以让模型总结一张椅子说明书为例

第一个prompt

在这里插入图片描述

上述提示模型生成的结果太长,不适合放到购物网站的介绍里。所以下一步的优化提示的思路是让模型编写简短的介绍。

在这里插入图片描述

更进一步,要求模型生成最多三句话的描述。

在这里插入图片描述

如果仔细阅读总结可以发现,其面向的对象更可能是面向消费者的,如果要是面向椅子的经销商,他们可能更关注技术细节和材料。所以更进一步,可以要求模型生成更精确地描述技术细节的总结。

在这里插入图片描述

更进一步,让模型生成的结果中包含说明书中的产品型号

在这里插入图片描述
在这里插入图片描述
指明模型的输出格式为 HTML
在这里插入图片描述
在这里插入图片描述

4. 使用LLM总结文本

第一个例子,总结电商网站商品评论,限制30个单词。

在这里插入图片描述

为运输部分生成评论摘要:

在这里插入图片描述

生成的结果中可以看出,模型会更关注这些特定部门的相关信息。

为多条评论生成总结:

在这里插入图片描述

5. 使用LLM推理文本

以一个灯的评论为例,让模型推断这个评论的情感类型:

在这里插入图片描述
在这里插入图片描述

提取评论的情感:

在这里插入图片描述

给出是或否的回答:

将多个提示汇总到一个提示中,让模型统一给出结果:
在这里插入图片描述
在这里插入图片描述

找出一篇文档属于哪个主题:

在这里插入图片描述

其背后的实现是零样本学习算法。

基于上述的提示,可以制作一个新闻提醒的下游应用,当有新的主题文档发布时,可以通知订阅了某些主题的用户。

在这里插入图片描述

6. 使用LLM转换文本

一些文本转换的例子:文本翻译,json转html,word转pdf,csv转excel等等。

文本翻译:

在这里插入图片描述

推断语言:

在这里插入图片描述

翻译成多种语言:

在这里插入图片描述

根据不同的场合进行转换:

在这里插入图片描述

根据不同的语气进行转换:

在这里插入图片描述

json转html:

在这里插入图片描述

修正语法错误:

在这里插入图片描述

修正文本:

在这里插入图片描述

获得原始文本与修正之前文本的差异:

在这里插入图片描述

7. 使用LLM扩展文本

扩展文本旨在将短文本(一组说明或主体列表)通过大语言模型转换成更长的文本(比如一封电子邮件或者关于某个主体的文章)。

本小节将演示使用LLM生成个性化的电子邮件。

在这里插入图片描述
在这里插入图片描述

在使用LLM时,经常碰到的一个参数是温度(Temperature),其范围是0到1,它用于控制模型响应的多样性,可以将其视为模型的探索程度或随机性。

在这里插入图片描述

如果想让模型的响应更有多样性,则可以尝试提高温度值。如果想让模型的响应更稳定和更可预测,则可以将温度值设为0。

在这里插入图片描述

在这里插入图片描述

8. 使用LLM构建聊天机器人

在这里插入图片描述

在这里插入图片描述
系统(system)消息提供了整体的指导方针,通常用于设定助手的行为和人设,引导LLM模型生成内容。其好处是为开发者提供了一种在不将请求体本身作为对话一部分的情况下,引导助手生成更贴近用户意图的输出。

用户(user)消息是用户的输入。

助手(assistant)消息是LLM模型的输出。

聊天机器人构建依赖于另一个API,其传入的不再是单个提示,而是个消息列表。这个列表中包含了多种不同角色的多轮对话的消息。
在这里插入图片描述在这里插入图片描述
OpenAI 的 API 是无状态的,即不会保存聊天的上下文,所以如果要基于ChatGPT构建聊天机器人需要每次调用API前将用户的历史会话放到message列表里一起丢给ChatGPT,这样才可以让其具备上下文的记忆能力。

基于ChatGPT构建OrderBot的示例:
在这里插入图片描述
UI设置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
UI界面:
在这里插入图片描述
系统角色消息的编写:
在这里插入图片描述
结果:
在这里插入图片描述

9. 总结

在这里插入图片描述

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

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

相关文章

英特尔oneAPI人工智能黑客松 - 机器视觉挑战案例

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

K8S 生态周报| Kubernetes 公布两个全版本受影响的漏洞

“ 「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]。 ” 大家好,我是张晋涛。 KIND v0.20.0 正式发布 KIND 是我一直参与,也日常一直在使用的项目,用于快速的在本地或者 C…

强化学习:AI领域的下一步里程碑

第一章:引言 近年来,人工智能(AI)的快速发展引起了全球范围内的广泛关注。在AI的众多技术领域中,强化学习(Reinforcement Learning)作为一种类似于人类学习的方式,在解决复杂问题方…

VMware虚拟机中安装Ubuntu20.04小白教程

安装Ubuntu20.04 1.Ubuntu镜像下载2.配置Ubuntu 2.1创建新的虚拟机,进入新建虚拟机向导2.2选择自定义类型配置2.3选择硬件兼容性2.4选择稍后安装操作系统2.5选择客户机操作系统2.6命名虚拟机2.7处理器配置2.8 虚拟机内存2.9配置网络类型2.10选择I/O控制器类型2.11选…

webpakc原理之开发一个清除console.log(xxx)的loader

一、webpack中清除console的方法 当然想要清除console我们可以使用babel-loader结合babel-plugin-transform-remove-console插件来实现。 安装babel-loader和babel-plugin-transform-remove-console插件 npm install babel-loader babel-plugin-transform-remove-console -D…

TOGAF10®标准中文版--(阶段B — 业务架构)方法

4.5 方法 业务架构是能力、端到端价值交付、信息和组织结构的整体、多维业务视图的表示;以及这些业务视图和战略、产品、政策、计划和利益相关者之间的关系。 业务架构将业务元素与业务目标和其他领域的要素联系起来。 4.5.1 概述 业务架构知识是任何其他领域&a…

HIFUSE:用于医学图像分类的分层多尺度特征融合网络

文章目录 HIFUSE: HIERARCHICAL MULTI-SCALE FEATURE FUSION NETWORK FOR MEDICAL IMAGE CLASSIFICATION摘要本文方法实验结果 HIFUSE: HIERARCHICAL MULTI-SCALE FEATURE FUSION NETWORK FOR MEDICAL IMAGE CLASSIFICATION 摘要 在卷积神经网络(CNN)的…

Spring核心容器——从配置文件到注解开发 创建对象+成员变量赋值 增强方法

目录 引出Spring入门案例初识Spring入门案例1----用配置文件实现 Druid JDBCTemplate dao1.之前的方式:new对象2.用配置文件的方法把new对象交给Spring3.如果要用对象,从spring的容器中获取ac.getBean("userDao");4.实体类和dao层的代码--问…

NodeFormer:一种用于节点分类的可扩展图结构学习Transformer

文章目录 NodeFormer: A Scalable Graph Structure Learning Transformer for Node ClassificationAbstract方法General Model and Key ChallengesEfficient Learning Discrete Structures可微随机结构学习Input Structures as Relational BiasLearning Objective NodeFormer: …

网络的基础介绍

文章目录 1. 网络发展2. 认识 "协议"3. 网络协议初识3.1 协议分层 4. OSI七层模型4.1 TCP/IP五层(或四层)模型 5. 网络传输基本流程5.1 同一个网段内的主机文件传输5.2 认识MAC地址5.3 跨网段的主机文件传输 6. 数据包封装和分用 1. 网络发展 很早之前,计…

基于强化学习(Reinforcement learning,RL)的机器人路径规划MATLAB

一、Q-learning算法 Q-learning算法是强化学习算法中的一种,该算法主要包含:Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息,来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

[unity]Pico VR unity开发笔记(一)

Pico VR 开发笔记(一) XR Interaction Tooikit 版本 2.3.2 一、环境搭建 其实官方文档已经写的很详细了,这里只是不废话快速搭建,另外有一项官方说明有误的,补充说明一下,在开发工具部分说明 插件安装——…

深度学习基础——通过PyTorch构建神经网络实现1维/2维序列分类

文章目录 使用3层前馈神经网络使用循环神经网络生成pickle数据集构建RNN进行1维序列的训练、推理 使用3层前馈神经网络 通过PyTorch构建前馈神经网络,并对二维数据点进行分类。在该例子当中,所有的训练数据和测试数据都是通过高斯混合模型GMM生成的&…

网络 - 你可知 Telnet 能通但是 Ping 不通百思不得其解

问题描述 以前本人以为 telnet 通 ping 一定也是通的,telnet 能通,表示两台计算机之间建立了连接通道。理论上是能 ping 通的。 但是今天万万没想到,并不是这样... 原因分析 如果不能 ping 通,可能的原因是对方主机关闭了 ping…

MYSQL阶段_DAY01~DAY11(附笔记)

注意:(数据表如下) sort表: user表: zhangwu表: 1.Part1 JDBC操作数据库的步骤 1.注册驱动 告知JVM使用的是哪一个数据库的驱动, 把驱动类的对象交给DriverManager管理,用于…

一文理解MySQL的For Update行级锁

一文理解MySQL的For Update行级锁 引言一、MySQL的For Update简介1.1、For Update的作用1.2、For Update与其他锁定方式的区别 二、For Update的语法2.1、SELECT语句的基本语法2.2、mysql如何开启事务和提交事务?2.3、使用For Update进行数据锁定 三、如何使用For U…

王道计算机网络学习笔记(2)——物理层

前言 文章中的内容来自B站王道考研计算机网络课程,想要完整学习的可以到B站官方看完整版。 二:物理层 2.1.1:物理层基本概念 2.1.2:数据通信基本知识 1、数据通信模型和基本概念 通信目的是为了传递消息(消息&…

2022 年第十二届 MathorCup 高校数学建模挑战赛D题思路(移动通信网络站址规划和区域聚类问题)

目录 一、前言 二、问题背景 三、问题 四、解题思路 (1)针对问题1: (2)针对问题2: (3)针对问题3: 五、附上几个典型代码 (1)K-means算法…

6月16日,企业快成长技术创新论坛厦门站大数据专场开启!

全球大数据规模增长快速,2020年全球新增数据规模为64ZB,是2016年的400%,2035年新增数据将高达2140ZB1,大数据呈现指数级增长。随着数字经济的发展和数字化转型的深入,愈来愈多的数据资源正以数据要素的形态独立存在并参…

STM32F4_DS18B20红外温度传感器

目录 前言 1. 单总线时序结构 2. DS18B20结构 2.1 DS18B20操作流程 2.2 DS18B20数据帧 3. 温度存储格式 4. 硬件分析 5. 实验程序详解 5.1 main.c 5.2 DS18B20.c 5.3 DS18B20.h 前言 STM32F4内部集成了温度传感器。在之前的学习中,我们已经学习了使用AD进…