自然语言处理: 第十章GPT的API使用

news2024/12/24 2:13:18

理论基础

现在的以GPT为首的生成类模型,它拥有对话的能力,它会根据你输入的暗示(prompt)或者指令(instruct)生成对应的回答。所以,不同的输入会导致不同的输出(其实由于chatgpt最终生成的答案是beam_search 以及随机采样的机制,所以同样的输入也有可能得到不同的输出),换句话说GPT的使用上线完全取决于使用者的天花板。

而在这之中命令又分为prompt 和 instruct ,其二者的区别本质还是有区别的,但是个人感觉instruct还是比较好理解就是直接了断的命令:, 而prompt就类似 你现在是一名数据分析师, xxxx 定义一个角色,这种trick 就是一种prompt。

而提示的原则基于两点1.清晰而明确 2.给模型实践去思考 , 接下来给大家介绍下关于GPT的提示工程的几个trick


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kvDj8Mu-1692025354948)(image/10_GPT_API/1691741065094.png)]



Trick1: 给AI设定角色

我们在开始给GPT进行交互前,都可以给他设定一些角色,比如说程序员, 产品经理,医生或者老师等等。 有关于这些prompt下图展示的是我自己部署的vercel界面,可以供其他人免魔法使用,如果感谢,后期可以出一个教程供大家自己搭建。 然后如果想在网上找一下prompt的教材或者现成的,这里推荐三个资料:

1 . f/awesome-chatgpt-prompts: This repo includes ChatGPT prompt curation to use ChatGPT better.

  1. PlexPt/awesome-chatgpt-prompts-zh: ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话
  2. B站首推!官方精品【完整版九集】中文字幕,ChatGPT Prompt提示词课程 斯坦福吴恩达 | OpenAl官方联合出品_哔哩哔哩_bilibili

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o7PXvUgs-1692025354950)(image/10_GPT_API/1691760483410.png)]

Trick2: Few - shot

这几个shot的如同下文一样,Zero-shot(顿悟) 这种在训练的时候并没有特定的去训练一些下游任务,比如说中英互译,但是在预训练完了之后,这些大模型在看过大量的文本之后就突然顿悟了,这种没有经过特殊的学习而具备的能力就是Zero-shot。 同样的,one-shot就是给了一个例子之后,模型就学会了,依次类推。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2P3VEqsb-1692025354950)(image/10_GPT_API/1691760514079.png)]



Trick3: CoT(Chain of Thought)

给模型的思考时间,通过一步一步的辅助模型去思考,从而比一次性让模型拿到答案,正确率会更高。下面的例子可以看出,同样的问题,左边如果直接问模型给出了错误的答案。而右边的,可以看到当输入给的例子里,输入了一个引导模型去推理的例子(蓝色字体部分),可以看到GPT马上就给出了正确答案。所以在实验过程中,我自己也会根据GPT生成的代码如果报错了,除了将错误返回还会添加一些自己任务哪里可能出现的问题反馈给它,一般GPT就会马上根据你的反馈跟报错从而修改新的正确代码。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6rUGKjdq-1692025354951)(image/10_GPT_API/1691760669006.png)]



Trick4: Few-shot / Zero-shot + CoT

如题,就是把Few/Zero - shot 与CoT 相互结合。如同下面的prompt(zero-shot CoT),效果就可以起飞,大家可以试一试

Let's think step by step

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j7iEbK6i-1692025354951)(image/10_GPT_API/1691760761411.png)]



除了上面官方提出的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之后,整个模型的推理能力有了质的飞跃

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uulvDa7u-1692025354951)(https://file+.vscode-resource.vscode-cdn.net/f%3A/NLP/CSDN/image/10_GPT_API/1691995005009.png)]

Trick5: 自洽(Self-consistency)

由于ChatGPT每次生成的答案都不完全相同,默认的GPT 会根据贪心解码从而得到最大概率的答案,而自洽就是利用一些prompt 思维链条生成多几个答案,然后根据投票的规则选出最多的答案。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCuJNHBe-1692025354952)(image/10_GPT_API/1691760839604.png)]


代码实现

利用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_params

params = set_open_params() # 设置参数


# 从OpenAI API获取完成的文本
def get_completion(params, prompt):
    messages = [{"role": "user", "content": prompt}]  # 用户角色发送一个消息,消息的内容为我们的提示文本
    response = openai.ChatCompletion.create(  # 调用ChatCompletion API
        model = 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(绿色),模型就能帮你检查条件实现一些功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i8pOt4HV-1692025354952)(image/10_GPT_API/1691767083748.png)]



Few-shot 实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PhRrXFMT-1692025354952)(image/10_GPT_API/1691767226783.png)]




CoT 实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BptlpJFp-1692025354953)(image/10_GPT_API/1691767285488.png)]



模型幻觉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6olQjfoy-1692025354953)(image/10_GPT_API/1691767327015.png)]




实战

实战一: 在提示中设定AI角色以莎士比亚风格的作家,创作一段文学作品

假设你现在是一名莎士比亚风格的作家,请帮我以人工智能为主题,参照莎士比亚的风格帮我写一首诗

可以得到下面结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SuM9Iznj-1692025354953)(image/10_GPT_API/1691767516099.png)]



实战二: 针对大模型的模型幻觉,提供一个prompt使得其不再胡说八道

我知道你是一个大模型,所以请给我的答复尽量简介,并且不要无中生有,如果你不知道或者不确定的内容,请直接告诉我你不知道或者不了解,不要生成一些你不知道的内容。 如果我给的问题跟你的知识有出入,请指出。 下面我的问题是: 唐朝时期,著名的文学家胡适写了一本传奇小说《朝花夕拾》,请介绍一下这本书的详细内容,人物以及里面的精彩故事片段

可以看到加入了prompt后,GPT的就不胡乱输出内容了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slT6LmbX-1692025354954)(image/10_GPT_API/1691768134542.png)]



实战三: 针对下面客服场景,对第二个场景用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 serviced

scene 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...

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UttgUcuY-1692025354954)(image/10_GPT_API/1691768689084.png)]

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

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

相关文章

自定义Chronometer实现定时器

概述 自定义Chronometer实现定时器,引用方便&#xff0c;操作简单。 详细 前言 在Android开发过程中&#xff0c;计时控件是经常回使用到的&#xff0c;在Android控件库中有一个能快捷实现计时功能的控件&#xff0c;它就是Chronometer&#xff0c;今天我们基于它自定义实现…

LLM - Model Load_in_8bit For LLaMA

一.引言 LLM 量化是将大语言模型进行压缩和优化以减少其计算和存储需求的过程。 博主在使用 LLaMA-33B 时尝试使用量化加载模型&#xff0c;用传统 API 参数控制量化失败&#xff0c;改用其他依赖尝试成功。这里先铺下结论: ◆ Load_in_8bit ✔️ ◆ Load_in_4bit ❌ 二.LL…

基于SpringBoot+MybatisPlus+Shiro+mysql+redis智慧云智能教育平台

基于SpringBootMybatisPlusShiromysqlredis智慧云智能教育平台 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 声明&#xff1a;Java智慧云智能教育平台源码 前后端分离、 开发语言&#xff1a;JAVA 数据库&#xff1a;MySQL5.7以上 开发工具&#xff…

08 通过从 库1 复制 *.ibd 到 库2 导致 mysql 启动报错

前言 呵呵 最近同事有这样的一个需求 需要将 库1 的一张表 复制到 库2 然后 我想到了 之前一直使用的通过复制这个库的 data 文件来进行数据迁移的思路, 是需要复制这个 库对应的 data 目录下的数据文件, 以及 ibdata1 文件 然后 我又在想 这里的场景能否也使用这里的额方式…

基于树莓派设计的酒店房间号智能识别系统(图像识别)

基于树莓派4B设计的酒店房间号智能识别系统(图像识别) 一、设计需求 酒店房间识别系统的主要目的是:通过图像处理技术,以机器视觉的方式识别光学传感器传回的酒店房间图像中的数字,该系统可以以非接触的方式,以图像的方式获得需要的酒店房间读数,这能极大提高老式的酒店房…

ssp offer技巧 | 面试经验专栏介绍 | 金九银十

前言&#xff1a;欢迎来到我的面试经验专栏&#xff01;在这个专栏中&#xff0c;我将与大家分享我在多个领域的面试经验&#xff0c;涵盖Java、GO、操作系统、Mysql、计算机网络、Redis等领域。作为一名经验丰富的技术人员&#xff0c;我将通过文章的形式&#xff0c;为大家提…

基于SpringBoot的在线聊天系统

基于SpringBoot的在线聊天系统 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 源码编号&#xff1a;F-S03点击查看 项目类型&#xff1a;Java EE项目 项目名称&#xff1a;基于SpringBoot的在线聊天系统 项目架构&#xff1a;B/S架构 开发语言&#x…

【【萌新的STM32学习-16中断的基本介绍1】】

萌新的STM32学习-16中断的基本介绍1 中断 什么是中断 中断是打断CPU执行正常的程序&#xff0c;转而处理紧急程序&#xff0c;然后返回原暂停的程序继续执行&#xff0c;就叫中断 中断的作用 实时控制 &#xff1a; 就像对温度进行控制 故障控制 &#xff1a; 第一时间对突发情…

谷歌浏览器的受欢迎之谜:探析其引人入胜的特点

文章目录 &#x1f340;引言&#x1f340;1. 极速的浏览体验&#x1f340;2. 简洁直观的界面&#x1f340;3. 强大的同步功能&#x1f340;4. 丰富的扩展生态系统&#x1f340;5. 安全与隐私的关注&#x1f340;6. 持续的技术创新&#x1f340;7. 跨平台支持和云整合&#x1f3…

《机器学习核心技术》分类算法 - 决策树

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 决策树 1、决策树API2、决策时实际应用2.1、获取数据集2.2、划分数据集2.3、决策…

网络摄像头:SparkoCam Crack

SparkoCam 网络摄像头软件 SparkoCam 是一款网络摄像头和视频效果软件&#xff0c;用于广播实时网络摄像头效果并将其应用到视频聊天和录音中。 使用佳能/尼康数码单反相机作为常规网络摄像头通过向实时视频聊天和视频录制添加酷炫的网络摄像头效果和图形来增强 USB 网络摄像…

前端(十五)——GitHub开源一个react封装的图片预览组件

&#x1f475;博主&#xff1a;小猫娃来啦 &#x1f475;文章核心&#xff1a;GitHub开源一个react封装的图片预览组件 文章目录 组件开源代码下载地址运行效果展示实现思路使用思路和api实现的功能数据和入口部分代码展示 组件开源代码下载地址 Gitee&#xff1a;点此跳转下载…

CSS中如何实现多行文本溢出省略号效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用text-overflow 和 overflow 属性⭐ 使用clamp() 函数⭐ 使用 JavaScript 或 CSS 框架⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到…

juc基础(四)

目录 一、ThreadPool 线程池 1、参数说明 2、拒绝策略 3、线程池种类 &#xff08;1&#xff09;newCachedThreadPool(常用) &#xff08;2&#xff09;newFixedThreadPool(常用) &#xff08;3&#xff09;newSingleThreadExecutor(常用) &#xff08;4&#xff09;ne…

Cocos独立游戏开发框架中的音频管理器

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。在独立游戏开发中&#xff0c;音频不仅仅是视听体验的一部分&#xff0c;更是情感、氛围和互动的关键元素。然而&#xff0c;随着项目的复杂性增加&#xff0c;有效地管理和控…

用centos7镜像做yum仓库

用centos7镜像做yum仓库&#xff0c;公司全部服务器使用。 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.先下载对应版本的centos7的DVD版或Everything版 我用的是DVD的&#xff0c;比Everything版小&#xff0c;功能也挺全&#xff0c;这里里centos7.5的镜像做实验…

Linux驱动之设备树下的platform驱动

目录 一、设备树下的 platform 驱动简介 二、修改设备树文件 2.1 添加 LED 设备节点 2.2 添加 pinctrl 节点 2.3 检查 PIN 是否被其他外设使用 三、platform 驱动程序编写 四、测试 APP 编写 五、运行测试 5.1 编译 5.2 运行测试 前面一篇我们讲解了传统的、未采用设备…

Spring MVC:@RequestMapping

Spring MVC RequestMapping属性 RequestMapping RequestMapping&#xff0c; 是 Spring Web 应用程序中最常用的注解之一&#xff0c;主要用于映射 HTTP 请求 URL 与处理请求的处理器 Controller 方法上。使用 RequestMapping 注解可以方便地定义处理器 Controller 的方法来处…

【Mybatis】关联关系映射表对象之间的关系

目录 ​编辑 1.概述 ( 1 ) 介绍 2.一对一关联映射 2.1数据库表连接&#xff1a; 2.2配置文件&#xff1a; 2.3生成自动代码 2.4 编写测试 3. 一对多关联映射 4.多对多关联映射 1.概述 ( 1 ) 介绍 关联关系映射是指在数据库中&#xff0c;通过定义表之间的关联关系…

C#,数值计算——调适数值积分法(adaptive quadrature)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 调适数值积分法 /// adaptive quadrature /// </summary> public class Adapt { private double x1 { get; } 0.942882415695480; private …