自然语言处理: 第十章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官网的一张图,可以把我们在第二部分做的所有开发…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...