自然语言处理: 第十章GPT的API使用
理论基础
现在的以GPT为首的生成类模型,它拥有对话的能力,它会根据你输入的暗示(prompt)或者指令(instruct)生成对应的回答。所以,不同的输入会导致不同的输出(其实由于chatgpt最终生成的答案是beam_search 以及随机采样的机制,所以同样的输入也有可能得到不同的输出),换句话说GPT的使用上线完全取决于使用者的天花板。
而在这之中命令又分为prompt 和 instruct ,其二者的区别本质还是有区别的,但是个人感觉instruct还是比较好理解就是直接了断的命令:, 而prompt就类似 你现在是一名数据分析师, xxxx 定义一个角色,这种trick 就是一种prompt。
而提示的原则基于两点1.清晰而明确 2.给模型实践去思考 , 接下来给大家介绍下关于GPT的提示工程的几个trick
Trick1: 给AI设定角色
我们在开始给GPT进行交互前,都可以给他设定一些角色,比如说程序员, 产品经理,医生或者老师等等。 有关于这些prompt下图展示的是我自己部署的vercel界面,可以供其他人免魔法使用,如果感谢,后期可以出一个教程供大家自己搭建。 然后如果想在网上找一下prompt的教材或者现成的,这里推荐三个资料:
1 . f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.
- PlexPt/awesome-chatgpt-prompts-zh: ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话
- B站首推!官方精品【完整版九集】中文字幕,ChatGPT Prompt提示词课程 斯坦福吴恩达 | OpenAl官方联合出品_哔哩哔哩_bilibili
Trick2: Few - shot
这几个shot的如同下文一样,Zero-shot(顿悟) 这种在训练的时候并没有特定的去训练一些下游任务,比如说中英互译,但是在预训练完了之后,这些大模型在看过大量的文本之后就突然顿悟了,这种没有经过特殊的学习而具备的能力就是Zero-shot。 同样的,one-shot就是给了一个例子之后,模型就学会了,依次类推。
Trick3: CoT(Chain of Thought)
给模型的思考时间,通过一步一步的辅助模型去思考,从而比一次性让模型拿到答案,正确率会更高。下面的例子可以看出,同样的问题,左边如果直接问模型给出了错误的答案。而右边的,可以看到当输入给的例子里,输入了一个引导模型去推理的例子(蓝色字体部分),可以看到GPT马上就给出了正确答案。所以在实验过程中,我自己也会根据GPT生成的代码如果报错了,除了将错误返回还会添加一些自己任务哪里可能出现的问题反馈给它,一般GPT就会马上根据你的反馈跟报错从而修改新的正确代码。
Trick4: Few-shot / Zero-shot + CoT
如题,就是把Few/Zero - shot 与CoT 相互结合。如同下面的prompt(zero-shot CoT),效果就可以起飞,大家可以试一试
Let's think step by step
除了上面官方提出的CoT的案例,还有人专门针对CoT 进行了研究,Large Language Models are human-level prompt Engineers 这一文中提出利用强化学习的方法,利用语言模型生成不同的prompt从而使得GPT生成的答案正确率更高,最后的实验效果如下: 可以发现在加入了 let's work this out in a step by step way to be sure we have the right answer
这句zero-shot prompt之后,整个模型的推理能力有了质的飞跃
Trick5: 自洽(Self-consistency)
由于ChatGPT每次生成的答案都不完全相同,默认的GPT 会根据贪心解码从而得到最大概率的答案,而自洽就是利用一些prompt 思维链条生成多几个答案,然后根据投票的规则选出最多的答案。
代码实现
利用API生成内容
首先,我们需要利用OPENAI 的API生成对话,下面是已经封装好了的函数,只需要提供自己的apikeys和设置一些超参数就可以进行对话了
import openai # 导入OpenAI,用于调用聊天模型
import IPython # 导入IPython,用于展示聊天输出# 这里替换为你的 OpenAI API 密钥
openai.api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx' # 这里需要设置下你自己的apikeys# 设置OpenAI API调用参数
def set_open_params(
# model="text-davinci-003", # 最好的文本模型model="gpt-3.5-turbo", # 模型temperature=0.7, # 多样性n = 1, # 返回结果的数量max_tokens=256, # 生成结果的最大词数top_p=1, # 随机抽样的阈值frequency_penalty=0, # 调整生成的文本的常见度presence_penalty=0, # 调整生成的文本中的新概念出现的频率
):openai_params = {} openai_params['model'] = model # 使用的模型名称openai_params['temperature'] = temperature # 结果多样性的参数,数值越大结果越随机,反之越确定openai_params['n'] = n # 返回结果的数量openai_params['max_tokens'] = max_tokens # 生成结果的最大词数openai_params['top_p'] = top_p # 随机抽样的阈值,较小的值将使结果更加集中,较大的值将使结果更加分散openai_params['frequency_penalty'] = frequency_penalty # 调整生成的文本的常见度,较高的值将使模型更可能生成罕见的文本openai_params['presence_penalty'] = presence_penalty # 调整生成的文本中的新概念出现的频率,较高的值将使模型更可能引入新的概念return openai_paramsparams = set_open_params() # 设置参数# 从OpenAI API获取完成的文本
def get_completion(params, prompt):messages = [{"role": "user", "content": prompt}] # 用户角色发送一个消息,消息的内容为我们的提示文本response = openai.ChatCompletion.create( # 调用ChatCompletion APImodel = params['model'], # 模型messages=messages, # Prompt消息temperature = params['temperature'], # 多样性n = params['n'], # 返回结果的数量max_tokens = params['max_tokens'], # 生成结果的最大词数top_p = params['top_p'], # 随机抽样的阈值frequency_penalty = params['frequency_penalty'], # 生成的文本的常见度presence_penalty = params['presence_penalty'], # 生成的文本中的新概念出现的频率)return response # 接收模型的聊天返回结果# 简单示例
prompt = input('Human(please input your question): ') # 设置Prompt
response = get_completion(params, prompt) # 调用API
print(f'GPT: {response.choices[0].message["content"]}')
利用API实现一些推理
下图中通过设置了prompt(绿色),模型就能帮你检查条件实现一些功能
Few-shot 实例
CoT 实例
模型幻觉
实战
实战一: 在提示中设定AI角色以莎士比亚风格的作家,创作一段文学作品
假设你现在是一名莎士比亚风格的作家,请帮我以人工智能为主题,参照莎士比亚的风格帮我写一首诗
可以得到下面结果:
实战二: 针对大模型的模型幻觉,提供一个prompt使得其不再胡说八道
我知道你是一个大模型,所以请给我的答复尽量简介,并且不要无中生有,如果你不知道或者不确定的内容,请直接告诉我你不知道或者不了解,不要生成一些你不知道的内容。 如果我给的问题跟你的知识有出入,请指出。 下面我的问题是: 唐朝时期,著名的文学家胡适写了一本传奇小说《朝花夕拾》,请介绍一下这本书的详细内容,人物以及里面的精彩故事片段
可以看到加入了prompt后,GPT的就不胡乱输出内容了
实战三: 针对下面客服场景,对第二个场景用AI自动生成客服反馈
可以看到利用One-shot就让gpt自动学会了你指定的格式,从而生成对应的内容
Your job is act as a support following scene 1 to answer scene 2: scene 1:
<user_manual>: To capture a photo, press the shutter button halfway down to focus, then press it fully to take the picture.
<user>: I did that, but my photos are still coming out blurry.
<support>: It sounds like there might be an issue with your camera's autofocus system. Try cleaning the lens, make sure there is enough light, and then try again. If the problem persists, you might want to consider getting your camera servicedscene 2:
<user_manual>: To install a new app on your smartphone, navigate to your device's app store, search for the app you want, and then tap on 'Install'.
<user>: I followed these steps, but the app isn't installing. It's stuck on 'Installing...
相关文章:

自然语言处理: 第十章GPT的API使用
理论基础 现在的以GPT为首的生成类模型,它拥有对话的能力,它会根据你输入的暗示(prompt)或者指令(instruct)生成对应的回答。所以,不同的输入会导致不同的输出(其实由于chatgpt最终生成的答案是beam_search 以及随机采样的机制,所…...

docker使用harbor进行镜像仓库管理演示以及部分报错解决
目录 一.安装harbor和docker-compose 1.下载 2.将该文件修改为这样,修改好自己的hostname和port,后文的用户和密码可以不改也可以改,用于登录 3.安装 二.修改daemon.json文件和/etc/hosts文件 三.使用powershell作windows端域名映射 四…...

【精算研究01/10】 计量经济学的性质和范围
一、说明 计量经济学是使用统计方法来发展理论或测试经济学或金融学中的现有假设。计量经济学依赖于回归模型和零假设检验等技术。计量经济学也可以用来预测未来的经济或金融趋势。 图片来源:https://marketbusinessnews.com 二、 计量经济之简介 计量经济学是对经济…...

【python知识】用 Tkinter实现“剪刀-石头-布”和“弹球游戏 ”
一、提要 Tkinter是一个Python内置模块,它提供了一个简单易用的界面来创建GUI。 在实现一些动态的画面、如游戏还是需要一些创新性思维的。在本文中,我们将使用 Tkinter 探索 Python GUI 编程。我们将介绍 Tkinter 的基础知识,并演示如何使用…...

Android 绘制之文字测量
drawText() 绘制文字 绘制进度条:paint.strokeCap Paint.CAP.RONUD 线条两边样式 设置文字字体:paint.typeFace Resources.Compat.getFont(context,font) 设置加粗 paint.isFakeBoldText 设置居中: paint.setTextAlign Paint.Align.CENTER //居中, 并不是真正的居中 往…...

基于AVR128单片机智能传送装置
一、系统方案 1、板载可变电阻(电位器)R29的电压作为处理器ATmega128的模数转换模块中单端ADC0的模拟信号输入(跳线JP13短接)。 2、调节电位器,将改变AD转换接口ADC0的模拟信号输入,由处理器完成ADC0的A/D转…...

Nexus私有仓库+IDEA配置远程推送
目录 一、docker安装nexus本地私服,Idea通过maven配置deploy本地jar包(简单) 二、docker push镜像到第三方nexus远程私服(shell命令操作) 三、springboot通过maven插件自动生成docker镜像并push到nexus私服…...

idea2023项目上传到gitee
1、按照gitee插件 File——>Settings plugins——>Marketplace下面搜索gitee,然后按照gitee插件 2、上传项目 VCS_——>Share Project on Gitee 如果第一次没登录的需要先登录,登录完后就可以上传了...

【golang】派生数据类型---指针 标识符、关键字等
1、指针 对比C/C中的指针,go语言中的指针显得极为简洁,只是简单的获取某个空间的地址 或者 根据指针变量中的内容 获取对应存储空间的内容等操作。 具体示例如下: go中使用指针需要注意的点: 可以通过指针改变它所指向的内存空…...

深度学习技术
深度学习是什么? 深度学习,英文名为Deep Learning,其实就是机器学习的一种高级形式。它的灵感来源于人脑神经网络的工作方式,是一种让机器可以自主地从数据中学习和提取特征的技术。你可以把它想象成一位小侦探,通过不…...
TCP/IP网络江湖——物理层护江山:网络安全的铁壁防线(物理层下篇:物理层与网络安全)
TCP/IP网络江湖——物理层护江山:网络安全的铁壁防线(物理层下篇:物理层与网络安全) 〇、引言一、物理层的隐私与保密1.1 加密技术的护盾1.2 安全传输协议的密约1.3 物理层的安全控制1.4 面对未知威胁的准备二、电磁干扰与抵御2.1 电磁干扰的威胁2.2 抗干扰技术的应用2.3 屏…...

python-数据可视化-使用API
使用Web应用程序编程接口 (API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化 使用Web API Web API是网站的一部分,用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的…...

窗口看门狗
从下往上看: 1. 时钟设置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//使能独立看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//看门狗预分频器WWDG counter clock (PCLK1/4096)/8 2.设置窗口值 实际就是设置WWDG_CR的低七位值, 但是这个值要大于0x40(也就是…...

开发新能源的好处
风能无论是总装机容量还是新增装机容量,全球都保持着较快的发展速度,风能将迎来发展高峰。风电上网电价高于火电,期待价格理顺促进发展。生物质能有望在农业资源丰富的热带和亚热带普及,主要问题是降低制造成本,生物乙…...

error: can‘t find Rust compiler
操作系统 win11 pip install -r requirements.txt 报错如下 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/56/fc/a3c13ded7b3057680c8ae95a9b6cc83e63657c38e0005c400a5d018a33a7/pyreadline3-3.4.1-py3-none-any.whl (95 kB) Building wheels for collected p…...

全面解析MES系统中的车间退料管理
一、车间退料管理的定义: 车间退料是指在生产过程中,将不合格或多余的物料、半成品或成品从车间环节返还到供应链的过程。车间退料管理则是指对这一退料过程进行规范化、系统化的管理和跟踪。 二、车间退料管理的流程: 1. 退料申请…...

探究finally代码块是否执行
情况一:try代码块正常执行,无异常,finally代码块无retrun; 代码演示 public class Test38 {public static void main(String[] args) {int foo foo();System.out.println("foo:" foo);}public static int foo() {tr…...

leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)
目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和 1、字符串相加 class Solution:def addStrings(self, num1: str, num2: str) -> str:i len(num1) - 1 # num1的末…...
Grafana reporter定时报表踩坑记录
前言:本以为测试grafana reporter功能能很顺利,但按照网上大佬分享的记录进行操作,屡屡报错,不知是因为我的grafana部署在k8s中之前由低版本升级到高版本导致的,还是其他原因,在grafana中安装Grafana Image Renderer 一直报错。 Github地址:https://github.com/IzakMar…...

Flutter 状态管理引子
1、为了更好地了解状态管理,先看看什么是状态。 在类似Flutter这样的响应式编程框架中,我们可以认为U相关的开发就是对数据进行封装,将之转换为具体的U1布局或者组件。借用Flutter官网的一张图,可以把我们在第二部分做的所有开发…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...