【一文系列】一篇文章记录gpt API的使用过程(python版)

【一文系列】一篇文章记录gpt API的使用过程(python版)

“一文系列”目标是仅通过一篇文章来解决一个类别问题,简洁高效,快速获取知识,提升技能。

文章目录

  • 【一文系列】一篇文章记录gpt API的使用过程(python版)
  • 前言
  • 一、背景介绍
  • 二、gpt API的代码调用
    • 1. 环境准备
    • 2. 环境验证
    • 3. 简单参数说明
  • 三、牛刀小试:利用gpt API实现加法器
    • 1. 创建任务提示词
    • 2. 代码示例
    • 3. 运行并测试
    • 4. 注意点
  • 四、进阶案例:利用gpt API实现交互式翻译器
    • 1. 创建任务提示词
    • 2. 代码示例
    • 3. 运行并测试
  • 总结


前言

让我们开始吧!!!

自然语言处理(NLP)作为人工智能领域的关键技术之一,正在以迅猛的步伐发展。OpenAI的GPT系列模型一直是NLP领域的领军者,为我们带来了许多令人惊叹的进展。也为开发者提供了无与伦比的自然语言处理能力。本文将探讨ChatGPT API的背景,并以python语言为例,基于gpt-3.5-turbo-0613模型进行API调用、小例子、进阶使用等方面的讨论,帮助读者能够了解如何利用AI来创造程序开发的新时代。


一、背景介绍

就在前些时间,openai推出了gpt-3.5-turbo-0613和gpt-3.5-turbo-16k这两款为开发者提供更强大和多样化的自然语言处理模型,在gpt-3.5-turbo模型的基础上进一步缩短了单次访问的响应时间,并扩展了模型的应用范围。

作为大语言模型,gpt的功能远不止进行智能聊天那么简单,如果能够借助AI的力量来实现我们日常开发中比较棘手的问题,那才是AI真正能为开发人员进行赋能的价值,基于以上思考,本文将从简单的gpt API使用作为入口,并通过案例来展示gpt模型在NLP领域的前瞻性意义以及能为开发人员带来的无限可能。

二、gpt API的代码调用

1. 环境准备

(1)python3环境: 本文在进行gpt API的使用上是直接基于python3的openai模块进行的,所以应该确保操作系统中按照了python3环境,python3的安装这里不再过多陈述,具体的安装方法请参考python官网。
(2)openai API key: 需要去openai官网上申请API key。
(3)外网访问条件:openai api的访问服务目前还没有向国内提供,在进行调用时需要通过技术手段进行科学上网,或是在国外vps服务器上访问,推荐使用第二种方案,第一种会有被封号的可能。
(4)openai python模块:安装好python3环境后可以使用以下2种命令安装openai模块

使用pip工具

pip3 install openai

使用conda工具

# 需要安装conda环境
conda install openai

2. 环境验证

完成上述的环境准备,就可以上手进行openai模块的调用,可以使用以下代码来验证环境的可用性。

将api key写入环境变量,不推荐以明文方式在代码中出现

export OPENAI_API_KEY="<OPENAI_API_KEY>"

环境验证代码

import openai
import os# 从环境变量中读取openai api key
openai.api_key = os.getenv('OPENAI_API_KEY')resp = openai.ChatCompletion.create(model = 'gpt-3.5-turbo-0613',messages = [{'role': 'system', 'content': 'hello'}],timeout = 30,n = 1
)
print(resp)

当有如下输出后说明环境验证成功,接下来就可以享受AI带来的乐趣了。
请添加图片描述

3. 简单参数说明

(1)请求参数

  1. model: 模型的名称,这里调用gpt-3.5-turbo-0613模型。
  2. messages: 消息上下文列表,使用数组表示,数组的元素表示一次会话消息,其中role属性表示当前会话的角色,包括:systemuserassistant。system表示系统消息,user表示模型使用者,assistant表示gpt机器人;content属性表示当前会话的内容,未来提交给gpt的提示词就是这个属性。
  3. timeout: 会话超时时间,单位为秒。
  4. n: 希望gpt给出回答的数目,会影响gpt响应中的choices数组长度,默认为1,一般使用默认值即可。

(2)响应参数

  1. choices: gpt模型做出的回答的对象数组,数组长度为请求参数中的n。choices对象的各个属性如下:
  • finish_reason: 模型对于此次会话结束的原因,分别为stoplengthmax_tokens,其中stop正常结束,后面两项分别为是因为达到了最大内容长度和最大token而异常结束。
  • index: 在choices数组中的索引。
  • message: 会话消息对象,包括如下属性:
    • content: 消息内容,即gpt模型给出的回答内容。
    • role: gpt模型所扮演的角色,一般固定为assistant
  1. created: 请求的时间戳。
  2. id: 请求id。
  3. model: 模型名称,与请求中的model参数一致。
  4. object: 返回的对象类型(例如:chat.completion)
  5. usage: token的利用量,包括:
    • completion_tokens:模型完成会话所利用的token量。
    • prompt_tokens:提示词利用的token量。
    • total_tokens:总共利用的token量,即completion_tokens与prompt_tokens的累加和。

上述列出的是平时开发中最为常用的参数,更多参数请参考openai官方文档。


三、牛刀小试:利用gpt API实现加法器

完成环境的构建,就可以借助gpt API进行一些有趣的实验,在这一部分将以实现一个简单的加法器作为切入点,并总结了本人在使用gpt API时的步骤和心得。

1. 创建任务提示词

提示词(prompt)在使用gpt这种生成式大语言模型中至关重要,好的提示词可以清晰的让AI理解功能需求,并能够对输入输出格式进行把控。本人在构建提示词时习惯从以下方面来考虑:

(1)背景:描述需求场景,让gpt能够理解我们的需求。
(2)输入格式:给出我们提供给gpt的输入格式,并对必要部分进行说明,让gpt能够更有目的的提前我们给出的提问。
(3)输出格式:这部分至关重要,在不规定输出格式时,gpt给出的回答格式是没有规则的,我们很难对结果进行目的性提取。因此需要严格规定gpt的输出格式,这一点就类似于我们日常的api接口开发,需要对期望结果指定返回格式,对于gpt模型而言道理同理。
(4)示例:对于较为复杂的需求可能只通过背景的描述还不足够让gpt所理解,所以需要给出1到多个示例,就类似于我们在做算法题一样,这样可以让gpt给出的结果更加精准。
(5)要求:给出gpt一些要求去限制其回答,例如异常处理,格式控制等。
(6)任务:明确需求任务,让gpt作为执行引擎来完成我们的目标需求。
(7)确认:用于确认gpt能否理解我们的需求,同时也作为模型预处理阶段gpt给我们的反馈,只有经过确认的模型我们才可以开始之后的交互操作。

基于上述说明,为了gpt能够实现加法器需求,可以给出类似如下的提示词:

sum.prompt(我习惯于将提示词文件命名为.prompt后缀,只是为了方便识别)

-- 背景
加法功能是我们常用的功能,可以将两个数字进行相加并求和,请按照以下要求完成数字求和的操作。-- 输入格式
\input: [方括号内为数字1], [方括号内为数字2]
(说明:输入必须以"\input: "字符串作为开头,后面是两个数字类型参数-- 输出格式
\output: [方括号内为数字1 + 数字2的结果]
(说明:输出必须以"\output: "字符串作为开头,后面是输入的两个数字类型的累加和-- 示例-- 我的输入:\input: 1, 2-- 你的输出:\output: 3-- 要求1. 请校验输入格式,不满足输入格式的字符串按照错误情况处理,错误情况请只回答"error";2. 请严格按照输出的格式进行回答;-- 任务
请严格按照上述内容和要求根据我的输入做出相应回答,请只按照输出格式回答,拒绝其他描述性文字。-- 确认
如果了解了上述要求,请只回答”yes“

2. 代码示例

import openai
import osopenai.api_key = os.getenv("OPENAI_API_KEY")model_name = 'gpt-3.5-turbo-0613'# 加载提示词文件并获取提示词
with open('./sum.prompt', 'r', encoding='utf-8') as f:prompt = f.read()def gpt_sum(val1: int, val2: int):# 首先给出gpt任务提示词messages = [{'role': 'system', 'content': prompt}]# 模拟gpt的确认响应,后续可以直接以user角色给出gpt问题messages.append({'role': 'assistant', "content": 'yes'})# 以user角色给出gpt问题user_input = f"\input: {val1}, {val2}"messages.append({'role': 'user', 'content': user_input})gpt_resp = openai.ChatCompletion.create(model=model_name,messages=messages,timeout=30)if gpt_resp.choices and gpt_resp.choices[0]:resp_str: str = gpt_resp.choices[0].message.contentif resp_str and resp_str.startswith('\output: '):return int(resp_str[len('\output: '):].strip())raise Exception(f'Failed to get available response from gpt, resp_str={resp_str}')if __name__ == '__main__':terminal_input = input("Please give two integers, split by comma: ")inputs: list[str] = terminal_input.split(',')if len(inputs) < 2:raise Exception("Invalid input, Please give two integers, split by comma")val1 = int(inputs[0].strip())val2 = int(inputs[1].strip())print(f"result = {gpt_sum(val1, val2)}")

3. 运行并测试

以下是执行结果:
请添加图片描述


4. 注意点

在实验中测试发现gpt对于输入格式的校验存在误判的情况,一般是会将错误的输入格式理解为正确的,但几乎没有出现将正确的输入格式理解为错误的情况;另外一般gpt能够将与规定输入格式相差较大的输入正确判断。以下是对上述观点的测试代码

gpt对与输入格式误判

import openai
import osopenai.api_key = os.getenv("OPENAI_API_KEY")model_name = 'gpt-3.5-turbo-0613'if __name__ == '__main__':# 加载提示词文件并获取提示词with open('./sum.prompt', 'r', encoding='utf-8') as f:prompt = f.read()# 首先给出gpt任务提示词messages = [{'role': 'system', 'content': prompt}]# 模拟gpt的确认响应,后续可以直接以user角色给出gpt问题messages.append({'role': 'assistant', "content": 'yes'})# 以下的用户输入不满足提示词格式user_input = "2, 3"messages.append({'role': 'user', 'content': user_input})gpt_resp = openai.ChatCompletion.create(model=model_name,messages=messages,timeout=30)# gpt仍然将非法的输入格式理解为正确的,并能给出答案misjudgement_content= gpt_resp.choices[0].message['content']print(misjudgement_content)messages.append({'role': 'assistant', 'content': misjudgement_content})# 给出一个更加离谱的输入,一般这种情况gpt能够正确给出判断messages.append({'role': 'user', 'content': "错误的输入"})gpt_resp = openai.ChatCompletion.create(model=model_name,messages=messages,timeout=30)correct_judgment = gpt_resp.choices[0].message['content']# 能够正确给出校验结果print(correct_judgment)

结果如下,可以发现gpt对于第一次的user输入未能给出正确的校验:
请添加图片描述

总结:最好在使用时使用我们自己的程序对异常输入进行提前校验,防止gpt的误判已经可能对gpt带来的干扰。


四、进阶案例:利用gpt API实现交互式翻译器

有了上述的尝试经验,可以利用gpt做一些更加复杂的尝试,毕竟单纯使用gpt作为累加器来说实属大材小用。在这部分将借助gpt来实现一个终端交互式的翻译器。

实际上这部分的区别主要在于提示词的创建,另外考虑到gpt对于请求速率会有限制,在请求时增加了指数退避重试机制,来提高功能的可用。

按照第三部分的步骤进行如下的操作:

1. 创建任务提示词

translator.prompt

-- 背景
需要实现将非中文语言(例如:英文、日文、韩文等)翻译成中文的功能。-- 输入格式
{”source": [方括号内是需要被翻译的文字内容,字符串类型]
}
(说明:输入是json格式,包含一个source属性)-- 输出格式
{"success": [方括号内表示此次功能是否成功,值为布尔类型,成功为true, 失败为false]"translation": [方括号内是将输入内容翻译为中文的文字内容,字符串类型,当且仅当success为true时有值]"reason": [方括号内是错误信息,字符串类型,当且仅当success为false时有值]
}
(说明:输出是json格式,包含success和translation属性)-- 示例1-- 我的输入{"source": "Try it yourself. It was fun!"}-- 你的回答{"success": true,"translation": "试试看吧,这很有趣!"}
-- 示例2-- 我的输入{"source": "楽しみに待っています。"}-- 你的回答{"success": true,"translation": "我正在期待地等待。"}
-- 示例3-- 我的输入{"wrong_attr": "wrong attribute"}-- 你的回答{"success": false,"reason": "输入格式错误",}-- 要求1. 请校验输入格式,不满足输入格式的字符串按照错误情况处理;2. 请严格按照输出的json格式进行回答;-- 任务
请严格按照上述内容和要求根据我的输入做出相应回答,请只按照输出内容回答,拒绝其他描述性文字。-- 确认
如果了解了上述要求,请只回答”yes“

2. 代码示例

import jsonpickle
import openai
import os
import timeopenai.api_key = os.getenv("OPENAI_API_KEY")model_name = 'gpt-3.5-turbo-0613'with open('./translator.prompt', 'r', encoding='utf-8') as f:prompt = f.read()class ChatGpt(object):__init_interval = 2__max_internal_exponent = 5def __init__(self, model: str, messages: list, timeout: int = 30, max_retries: int = 3):self.model = modelself.messages = messagesself.timeout = timeoutself.max_retries = max_retriesdef response(self):retry_time = 0# 进行指数退避重试while True:try:return openai.ChatCompletion.create(model=self.model,messages=self.messages,timeout=self.timeout)except openai.error.RateLimitError as e:interval = self.__init_interval * \(1 << min(self.__max_internal_exponent, retry_time))print(f"[warning]: Slepp {interval}s and retry due to rate limitation")time.sleep(interval)retry_time += 1def translate(content: str):messages = [{'role': 'system', 'content': prompt}]messages.append({'role': 'assistant', "content": 'yes'})messages.append({'role': 'user', 'content': jsonpickle.encode({"source": content}, indent=True)})gpt = ChatGpt(model=model_name, messages=messages)gpt_resp = gpt.response()if gpt_resp.choices and gpt_resp.choices[0]:resp = gpt_resp.choices[0].message.contentresp_obj = jsonpickle.decode(resp)if True is resp_obj['success']:return resp_obj['translation']else:if False is resp_obj['success'] and resp_obj['reason']:raise Exception(resp_obj['reason'])return Noneif __name__ == '__main__':while True:source = input("Please input, enter Q to quit: ")if source == 'Q':print('Bye!')breakprint(f">>> {translate(source)}")

3. 运行并测试

以下是执行结果:
请添加图片描述
上述测试分别使用英文、日文和法文进行了测试,实际发现gpt模型更倾向于欧美语言的翻译,对于其他地区的翻译有时会出现不太准确的情况,不过可以证实gpt已经可以很好的完整我们既定的需求了。


总结

一文总结

通过本篇文章,可以帮助读者了解ChatGPT API的背景和代码调用方式。同时,我们探索了API的小例子和进阶使用技巧。ChatGPT API为开发者带来了更多可能性,我们期待在不同领域看到更多创新和应用。

最后希望笔者的文章能给大家带来帮助,内容方面如有不足之处也希望大家多多给出意见和建议,让我们共同进步!!!

示例代码地址:gitee

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

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

相关文章

一个时代彻底结束了。

最近和几个大佬们吃饭&#xff0c;都感慨时间真的好快&#xff01;85年的&#xff0c;如今都快40岁了。90后&#xff0c;也都快35了。有几个大佬经历了PC互联网时代&#xff0c;移动互联网时代。吃足了红利。如果是2010年开启的是移动互联网时代&#xff0c;那么从18年之后&…

原美团联合创始人欲打造中国版 OpenAI ;ChatGPT 爆红惊动谷歌退隐创始人布林;Gradle 8.0 发布|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

一个时代彻底结束了!

点击上方“码农突围”&#xff0c;马上关注 这里是码农充电第一站&#xff0c;回复“666”&#xff0c;获取一份专属大礼包 真爱&#xff0c;请设置“星标”或点个“在看 这是【码农突围】的第 439 篇原创分享 作者 l 突围的鱼 来源 l 码农突围&#xff08;ID&#xff1a;smart…

输出链表(c语言)

输出链表 描述格式样例题解及详细注释 描述 根据给定的数据建立一个由n&#xff08;n≤1000&#xff09;个元素组成的链表&#xff0c;然后按逻辑顺序输出其中所有的数据。 每个元素节点由两个域组成&#xff1a;第一个域存储数据&#xff0c;第二个域存储后继元素所在的位置…

【编程实践】Linux / UNIX Shell编程极简教程

不同于一般的介绍Linux Shell 的文章&#xff0c;本文并未花大篇幅去介绍 Shell 语法&#xff0c;而是以面向“对象” 的方式引入大量的实例介绍 Shell 日常操作&#xff0c;“对象” 涵盖数值、逻辑值、字符串、文件、进程、文件系统等。这样有助于学以致用&#xff0c;并在用…

【编程语言】AWK 极简教程

1 概述 AWK 是一种解释执行的编程语言。它非常的强大,被设计用来专门处理文本数据。AWK 的名称是由它们设计者的名字缩写而来 —— Afred Aho, Peter Weinberger 与 Brian Kernighan。 由 GNU/Linux 发布的 AWK 版本通常被称之为 GNU AWK,由自由软件基金( Free Software Fou…

ANTI-PHISHING--如何用OCR检测网站?

一些碎碎念 钓鱼网站有典型的几种特征&#xff1a; 有表单有跳转链接有一些很抓马的关键词巨长巨长的链 通过三种判定条件划分它们的不同类别&#xff1a; 有没有表单有没有跳转链接有没有关键词出现 本菜鸡的思路是&#xff0c;先访问网站获取源码&#xff0c;过滤它有没…

Prompt合集

作者 来自&#xff1a;f Prompt主要内容 我想让你充当「英语翻译员」、「拼写纠正员」和「改进员」。 我会用任何语言与你交谈&#xff0c;你会检测语言&#xff0c;翻译它并用我的文本的更正和改进版本用英语回答。 我希望你用更优美优雅的「高级英语单词」和句子替换我简化…

BFT最前线丨浙江大学和蚂蚁集团合作,成立智能视觉实验室;ChatGPT 对亚洲节点大规模封号;谷歌CEO称将推出Bard升级版

文 | BFT机器人 01 浙江大学和蚂蚁集团合作&#xff0c;成立智能视觉实验室 据消息&#xff0c;浙江大学和蚂蚁集团达成合作成立「智能视觉联合实验室」&#xff0c;旨在推进智能视觉的技术创新和产业应用&#xff0c;重点攻坚包括机器视觉、三维重建、视觉内容生成等人工智能及…

内地见证可以办理哪些香港银行卡?哪家更方便门槛要求更低?

首先给大家打个预防针&#xff1a; 香港不像内地&#xff0c;香港银行大都收管理费、普通转账收费&#xff0c;非交易时间不能转&#xff0c;到账速度很难秒到&#xff01; 现在不能去香港&#xff0c;那么很多银行是不能办理的&#xff0c;所以下面就只聊聊能内地见证办理的…

WhaleHiking的“三山五岳”第一站:泰山

Datawhale团队 来源&#xff1a;whaleHiking 开场白 大家应该都听说过杜甫的《望岳》——“会当凌绝顶&#xff0c;一览众山小。”&#xff0c;每次看见这句诗的时候&#xff0c;总想去泰山看一看&#xff0c;感受诗中的壮美山河景色&#xff01; 机不可失时不再来&#xff0c…

玩转 ChatGPT+极狐GitLab|自动化的MR 变更评审来了

本文来自&#xff1a; 尹学峰 极狐(GitLab)高级解决方案架构师 自从 ChatGPT 闪亮登场以来&#xff0c;各种基于它的软件扩展纷至沓来。爱折腾的极狐GitLab 开发者们&#xff0c;也花式玩转起了 ChatGPT 极狐GitLab&#xff0c;让研发工作更高效。 今天&#xff0c;我们来看看…

深度:ChatGPT只是表面的喧嚣,大模型才是那柄尖刀!

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 如果把时钟拨到2023年底&#xff0c;当我们回过头来看今年科技界最激动人心的大事件&#xff0c;ChatGPT的横空出世无疑会占据一席之地。就像几年前大家被谷歌AlphaGo点燃对人工智能的热情一样&#xff0c;人们对ChatGPT的热…

GPT-4:我不是来抢你饭碗的,我是来抢你锅的

目录 一、GPT-4&#xff0c;可媲美人类 二、它和ChatGPT 有何差别&#xff1f; 01、处理多达2.5万字的长篇内容 02、分析图像的能力&#xff0c;并具有「幽默感」 03、生成网页 三、题外话 四、小结 GPT-4的闪亮登场&#xff0c;似乎再次惊艳了所有人。 看了GPT-4官方的…

文心一言正式对标GPT-4,是青铜还是王者?

昨天&#xff0c;OpenAI正式发布GPT-4模型 号称史上最先进的AI系统 今天&#xff0c;百度文心一言在万众瞩目中闪亮登场 这款产品被视为中国版ChatGPT 在这一个多月内备受关注 文心一言某种程度上具有了对人类意图的理解能力 回答的准确性、逻辑性、流畅性都逐渐接近人类…

python详解(7)——进阶(1):排序算法

目录 &#x1f3c6;一、前言 &#x1f3c6;二、什么是算法&#xff08;简单&#xff09; &#x1f6a9;1、算法 &#x1f6a9;2、排序算法 &#x1f3c6;三、冒泡排序&#xff08;中等&#xff09; &#x1f3c6;四、快速排序&#xff08;困难&#xff09; &#x1f3c6;五&…

如何解决ChatGPT 的数据保护盲点

自成立以来的短时间内&#xff0c;ChatGPT 和其他生成式 AI 平台理所当然地赢得了终极生产力助推器的声誉。然而&#xff0c;能够按需快速生成高质量文本的技术&#xff0c;可能同时暴露敏感的公司数据。最近发生的一件事&#xff0c;其中东方联盟网络安全研究人员将专有代码粘…

ChatGPT 的数据保护盲点以及安全团队如何解决这些盲点

自成立以来的短时间内&#xff0c;ChatGPT 和其他生成式 AI 平台理所当然地赢得了终极生产力助推器的声誉。 然而&#xff0c;能够按需快速生成高质量文本的技术&#xff0c;可能同时暴露敏感的公司数据。 最近发生的一起事件&#xff0c;三星软件工程师将专有代码粘贴到 ChatG…

ChatGPT 数据泄露的技术细节公开:引用的 Redis 开源客户端导致

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) 在上周一&#xff0c;ChatGPT 遭遇了一次用户数据泄漏事件&#xff0c;许多 ChatGPT 的用户都在自己的历史对话中看到了其他人的对话记录。不光是对话的历史记录&#xff0c;不少 ChatGPT Plus 用户还在 Reddit 和 T…

A股管家股票自动交易软件系统,功能完善强大

2013年的时候&#xff0c;有个广东的朋友说再用这款A股管家股票自动系统&#xff0c;我当时比较惊讶&#xff0c;以前想过要是有一款股票自动交易软件能偶尔代替我一下就好了&#xff0c;虽然是职业股民&#xff0c;但也经常遇到太忙的时候&#xff0c;实在没时间。然后就在朋友…