大模型开发(四):OpenAI API调用方法

全文共8500余字,预计阅读时间约17~30分钟 | 满满干货(附代码示例),建议收藏!

在这里插入图片描述
代码下载点这里

一、获取OpenAI的API keys

前提:拥有OpenAI账户,并可以魔法上网

如果涉及账户或魔法上网问题,请看本文末尾的内容,自行配置!

具体的流程如下:

OpenAI 官网

  1. 登录OpenAI 账户。 使用电子邮件地址和密码登录到 OpenAI 账户。

image-20230713224316125

  1. 创建 API Key。 选择左侧菜单栏的“API Keys”,然后单击“+ Create new API key”按钮.

image-20230713224820536

  1. 在弹出的窗口中,为该 API Key 创建一个名称

image-20230713224930450

然后复制保存完成的key编码,注意:要保留好,这个key只在创建的时候可以复制。

二、设置环境变量存储秘钥

将API密钥存储在环境变量中,而不是直接写在代码中,可以降低泄露密钥的风险。这样,即使有人不小心看到了你的代码,他们也无法获得你的API密钥。毕竟这东西是花钱的,让别人盗用肯定是有风险的!

同时,如果在测试开发中,这样做也易于管理,如果有多个项目都使用了OpenAIAPI,只需修改环境变量,所有项目都能自动使用新的密钥,省时省力!

image-20230713225643442

新建系统变量:

变量名:OPENAI_API_KEY

变量值:OpenAI API秘钥(上一步复制的那个key)

image-20230713225900206

三、连通性测试

官网文档链接在这里

image-20230713230230991

Step 1: 安装openai库

!pip install openai

Step 2:获取系统变量中的秘钥

import openai
import osopenai.api_key = os.getenv("OPENAI_API_KEY")

Step 3: 测试连通性

# 创建一个 GPT-3 请求
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k",messages=[{"role": "user", "content": "Hello, Nice to meet you"}]
)print(completion.choices[0].message)

测试成功!

image-20230715113407230

四、OenAI API的基本参数

4.1 GPT3.5 系列接口

image-20230715114051302

image-20230715114210371

GPT-3.5系列是一系列在2021年第四季度之前的文本和代码混合训练的模型。

以下是GPT-3.5系列中的几个模型

  • code-davinci-oo2是一个基础模型,适用于纯代码补全任务。

  • text-davinci-002是基于code-davinci-002的lnstructGPT模型。

  • text-davinci-003是text-davinci-002的改进版。

  • gpt-3.5-turbo-0301是在text-davinci-003的基础上进行了改进,针对聊天应用进行了优化。

4.2 GPT 4接口

2023年7月7日,OpenAI在官网宣布,gpt-4 api全面开放使用。所有付费api用户都可直接访问8k上下文的gpt-4,无需任何等待。再也不用等申请了!

image-20230715120929180

GPT-4是一个大型多模态模型(目前接受文本输入并生成文本输出,未来将支持图像输入),与gpt-3.5-turbo类似,GPT-4在聊天方面进行了优化,但在传统的完成任务中也能表现出色,都可以使用Chat Completions API。在我们的GPT指南中学习如何使用GPT-4。

以下是GPT-4系列中的几个模型

  • gpt-4 比任何GPT-3.5模型更强大,能够执行更复杂的任务,并且针对聊天进行了优化。
  • gpt-4-32k 与基础gpt-4模型具有相同的功能,但上下文长度增加了4倍。将随最新模型迭代进行更新。

五、API使用方法

5.1 Completions

给定一个提示,模型将返回一个或多个预测的完成结果,并且还可以返回每个位置上备选标记的概率。

官方给的建议是使用的Chat Completions API

使用方式是:

 openai.ChatCompletion.create()

官网看这里

image-20230715121402445

其重要及常用参数如下:

1

使用方法:

test_reponse = openai.Completion.create(model="text-davinci-003",prompt="Say this is a test",max_tokens=7,temperature=0
)
print(test_reponse)

返回结果:

image-20230715125638246

5.2 Chat Completions

Chat Completions是一种专门用于聊天补全的语言模型,可以接受消息列表作为输入,并返回模型生成的消息作为输出。类似于使用的ChatGPT对话,可以进行角色扮演,回答一系列问题,其参数如下:

image-20230715131751723

代码实现:

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k-0613",messages=[{"role": "system", "content": "精通机器学习和自然语言处理的AI领域专家,具备20年相关经验"}, {"role": "user", "content": "我是一个小白,我想入门AI领域,我需要学习哪些知识"}]
)
print(completion.choices[0].message.content)

结果如下:

image-20230715132219758

如果想进行多轮对话,可以把上一个的输出也传递给ChatGPT共同输入:

completion = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k-0613",messages=[{"role": "system", "content": "精通机器学习和自然语言处理的AI领域专家,具备20年相关经验"}, {"role": "user", "content": "我是一个小白,我想入门AI领域,我需要学习哪些知识"}]
)
print(completion.choices[0].message)

输出如下:

image-20230715160444697

复制这个回答,和新对话一起送人ChatGPT新一轮的问答中,使其具备记忆上下文能力:

#加入上次对话的信息
completion = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=[{"role": "system", "content": "精通机器学习和自然语言处理的AI领域专家,具备20年相关经验"}, {"role": "user", "content": "我是一个小白,我想入门AI领域,我需要学习哪些知识"},{"role": "assistant","content": "\u4f5c\u4e3a\u4e00\u4e2a\u5c0f\u767d\uff0c\u8981\u5165\u95e8AI\u9886\u57df\uff0c\u4f60\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5b66\u4e60\uff1a\n\n1. \u6570\u5b66\u57fa\u7840\uff1a\u4e86\u89e3\u7ebf\u6027\u4ee3\u6570\u3001\u6982\u7387\u8bba\u548c\u7edf\u8ba1\u5b66\u3002\u8fd9\u4e9b\u662fAI\u9886\u57df\u7684\u57fa\u7840\u6570\u5b66\u77e5\u8bc6\uff0c\u80fd\u591f\u5e2e\u52a9\u4f60\u7406\u89e3\u7b97\u6cd5\u80cc\u540e\u7684\u539f\u7406\u3002\n\n2. \u7f16\u7a0b\u57fa\u7840\uff1a\u5b66\u4e60\u4e00\u95e8\u5e38\u7528\u7684\u7f16\u7a0b\u8bed\u8a00\uff0c\u5982Python\u3002\u638c\u63e1\u57fa\u672c\u7684\u7f16\u7a0b\u6982\u5ff5\u548c\u8bed\u6cd5\uff0c\u80fd\u591f\u5199\u51fa\u7b80\u5355\u7684\u7a0b\u5e8f\u3002\n\n3. \u673a\u5668\u5b66\u4e60\uff1a\u5b66\u4e60\u673a\u5668\u5b66\u4e60\u7684\u57fa\u672c\u6982\u5ff5\u548c\u7b97\u6cd5\u3002\u4e86\u89e3\u76d1\u7763\u5b66\u4e60\u3001\u65e0\u76d1\u7763\u5b66\u4e60\u548c\u5f3a\u5316\u5b66\u4e60\u7b49\u4e0d\u540c\u7c7b\u578b\u7684\u7b97\u6cd5\u3002\u53ef\u4ee5\u9605\u8bfb\u76f8\u5173\u6559\u6750\u3001\u53c2\u52a0\u5728\u7ebf\u8bfe\u7a0b\u6216\u8005\u53c2\u8003\u673a\u5668\u5b66\u4e60\u5e93\u4e2d\u7684\u6587\u6863\u548c\u793a\u4f8b\u3002\n\n4. \u6df1\u5ea6\u5b66\u4e60\uff1a\u6df1\u5ea6\u5b66\u4e60\u662fAI\u9886\u57df\u7684\u4e00\u4e2a\u70ed\u95e8\u5206\u652f\uff0c\u5b66\u4e60\u6df1\u5ea6\u5b66\u4e60\u7684\u57fa\u672c\u6982\u5ff5\u548c\u5e38\u7528\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\uff0c\u5982\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u548c\u5faa\u73af\u795e\u7ecf\u7f51\u7edc\u3002\u53ef\u4ee5\u4f7f\u7528\u6df1\u5ea6\u5b66\u4e60\u6846\u67b6\u5982TensorFlow\u6216PyTorch\u8fdb\u884c\u7ec3\u4e60\u548c\u5b9e\u9a8c\u3002\n\n5. \u81ea\u7136\u8bed\u8a00\u5904\u7406\uff1a\u5982\u679c\u4f60\u5bf9NLP\uff08\u81ea\u7136\u8bed\u8a00\u5904\u7406\uff09\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u5b66\u4e60\u76f8\u5173\u7684\u6280\u672f\u3002\u4e86\u89e3\u6587\u672c\u5904\u7406\u3001\u8bcd\u5411\u91cf\u8868\u793a\u548c\u6587\u672c\u5206\u7c7b\u7b49\u57fa\u672c\u6982\u5ff5\u3002\u9605\u8bfbNLP\u9886\u57df\u7684\u7ecf\u5178\u8bba\u6587\u548c\u6559\u6750\uff0c\u4e86\u89e3\u6700\u65b0\u7684\u7814\u7a76\u8fdb\u5c55\u3002\n\n6. \u5b9e\u8df5\u9879\u76ee\uff1a\u627e\u4e00\u4e9b\u5b9e\u8df5\u9879\u76ee\u6765\u953b\u70bc\u81ea\u5df1\u7684\u6280\u80fd\u3002\u53ef\u4ee5\u9009\u62e9\u4e00\u4e9b\u5f00\u6e90\u7684\u6570\u636e\u96c6\u548c\u95ee\u9898\uff0c\u5c1d\u8bd5\u4f7f\u7528\u673a\u5668\u5b66\u4e60\u548c\u6df1\u5ea6\u5b66\u4e60\u7b97\u6cd5\u8fdb\u884c\u89e3\u51b3\u3002\u901a\u8fc7\u5b9e\u8df5\u9879\u76ee\uff0c\u4f60\u53ef\u4ee5\u5de9\u56fa\u6240\u5b66\u7684\u77e5\u8bc6\uff0c\u540c\u65f6\u4e5f\u80fd\u63d0\u5347\u89e3\u51b3\u95ee\u9898\u7684\u80fd\u529b\u3002\n\n\u9664\u4e86\u4ee5\u4e0a\u7684\u5b66\u4e60\u6b65\u9aa4\uff0c\u53ef\u4ee5\u591a\u53c2\u52a0\u4e00\u4e9b\u76f8\u5173\u7684\u5b66\u672f\u7814\u8ba8\u4f1a\u3001\u5de5\u4f5c\u574a\u548c\u57f9\u8bad\u8bfe\u7a0b\uff0c\u7ed3\u8bc6\u4e00\u4e9b\u4e1a\u5185\u4e13\u5bb6\u548c\u540c\u884c\uff0c\u6269\u5927\u4f60\u7684\u4eba\u8109\u5708\u5e76\u4e0e\u4ed6\u4eec\u4ea4\u6d41\uff0c\u4ece\u4e2d\u5b66\u4e60\u548c\u83b7\u53d6\u7ecf\u9a8c\u3002\u53e6\u5916\uff0c\u4e5f\u8981\u575a\u6301\u5b66\u4e60\u548c\u5b9e\u8df5\uff0c\u4e0d\u65ad\u66f4\u65b0\u81ea\u5df1\u7684\u77e5\u8bc6\u3002"},{"role": "user", "content": "我想具体点了解机器学习方面的,你帮我详细的说明一下"}]
)
print(completion.choices[0].message.content)

回复如下:

image-20230715160544612

测试一下不同参数下 其效果如何,以temperature在取值为0和1两种不同的参数下,看下输出:

#不同参数的效果(temperature)
query="是一个小白,我想入门AI领域,我需要学习哪些知识"
completion_1=openai.ChatCompletion.create(model="gpt-3.5-turbo-16k-0613",messages=[{"role": "user", "content": query}], temperature=0
)completion_2=openai.ChatCompletion.create(model="gpt-3.5-turbo-16k-0613",messages=[{"role":"user","content": query}],temperature=1
)print("gpt-3.5-turbo-16k-0613 + temperature=0 --->\n\t", completion_1.choices[0].message['content'])
print("gpt-3.5-turbo-16k-0613 + temperature=1 --->\n\t", completion_2.choices[0].message['content'])

看下结果:

image-20230715133225924

能很明显感觉出,temperature取值越大,回答更具创造性和发散性

5.3 Images

根据给定的提示创建一个图像

image-20230715160632794

图片API提供了三种与图片交互的方法:

1.根据文本提示从头开始创建图像

2.根据新文本提示创建现有图像的编辑

3.创建现有图像的变体

其参数如下:

2

看下代码:

openai.Image.create(prompt="一只白色小猫\在野地上\奔跑",n=1,size='512x512'
)

输出如下:

image-20230715161900010

点击链接可查看生成的图片,虽然有点难看,这需要提示工程,此处就做一个简单示例

image-20230715161938919

还可以修改图片尺寸、编辑图片等,可以自己试一下,代码参考:

# 修改图片尺寸
from PIL import Imagedef transfer(infile, outfile):im = Image.open(infile)reim=im.resize((512, 512))#宽*高reim.save(outfile,dpi=(200.0,200.0)) ##200.0,200.0分别为想要设定的dpi值if __name__ == '__main__':infil=r"mask.png"outfile=r"mask_512.png"transfer(infil, outfile)
# edit 图片
openai.Image.create_edit(image=open("小猫.png", "rb"),mask=open("mask_512.png", "rb"),prompt="小猫\趴着炕头上",n=1,size="512x512"
)

六:一些实用函数

6.1 Code Pormpt

分享一个Code Pormpt Example,提供一种实现思路:

def Iamadictionary(word:str='hello'):prompt = "你是一个英语单词查询助手,每当用户发送一个英语单词给你,你都要以固定格式响应用户," \"如果用户发给你的不是一个单词,回复 'invalid token'"response_few_shot_text = "run [/rʌn/]" \"\n\nn. 奔跑;竞赛;连续的演出\nHe went for a run after work. (他下班后去跑步了)" \"\n\nv. 奔跑;运行\nI like to run in the park every morning. (我喜欢每天早上在公园里跑步)" \"\n\nadj. 连续的;流畅的\nThis printer is really fast and runs smoothly. (这台打印机速度非常快,而且运行流畅)"# message = 'color'data = {"model": "gpt-3.5-turbo-16k-0613","temperature": 0,"top_p": 1,"frequency_penalty": 1,"presence_penalty": 1,"stream": False,"messages": [{"role": "system", "content": prompt},{"role": "user", "content": "run"},{"role": "assistant", "content": response_few_shot_text},{"role": "user", "content": word}]}return openai.ChatCompletion.create(**data)# 25个雅思最难词汇❗️认识5个就是真学霸~
# https://www.xiaohongshu.com/explore/641d813300000000130149fccompletion = Iamadictionary(word='uncanny')
# print(completion)
print(completion.choices[0].message['content'])

image-20230715162900957

测试一下:

image-20230715163005983

6.2 如何计算Tokens

调用API接口是按Tokens收费的,那么如何计算每次会话用了多少Tokens?

#计算toukens
import tiktoken
MODEL_gpt35 = "gpt-3.5-turbo-16k-0613" # 3.5
env35 = tiktoken.encoding_for_model(MODEL_gpt35)def get_token(x:str):txt = env35.encode(x)len_ = len(txt)print(txt)print(len_)get_token(x = '测试Token大小')

感谢您阅读这篇文章!如果您觉得有所收获,别忘了点赞、收藏并关注我,这是我持续创作的动力。您有任何问题或建议,都可以在评论区留言,我会尽力回答并接受您的反馈。如果您希望了解某个特定主题,也欢迎告诉我,我会乐于创作与之相关的文章。谢谢您的支持,期待与您共同成长!

最后,给大家送上干货!建议大家点赞&收藏,Mark住别丢了。有高质量资料免费送!

1. 关于魔法,你需要知道的

2. 超全流程!OpenAI账户注册看这里!

3. ChatGPT Plus 升级指南

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

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

相关文章

ChatGPT技术将给智能硬件带来更多新机会

近期,由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在各大中外媒体平台掀起了一阵狂热之风。短短2个月时间,其用户量就达到一亿用户,注册用户之多导致服务器一度瘫痪。 ChatGPT到底是什么呢?ChatGPT是一种基于GPT-3&…

使用ChatGPT完成程序开发——目标:不写一行代码完成图像识别并点击

本文作为一个使用AI开发的思路,让更多的人可以利用AI完成一些简单的程序,文中使用的是国内镜像GTP3.5 源码: GitHub - kasimshi/testCV: AI编写的OpenCV图像识别例子 GTP镜像: 知汇 对AI描述我们要做的功能,让它给给初步的思路和方向 作为新…

如何在WhatsApp中更改聊天背景

By default, WhatsApp has a pretty weird and childish background for your chat messages. The good news is that you can change it. Here’s how. 默认情况下,WhatsApp的聊天消息背景非常古怪而幼稚。 好消息是您可以更改它。 这是如何做。 We’re using an …

如何抠图换背景?介绍两个抠图换背景的方法

如何抠图换背景?在我们的日常生活中,总是会需要使用到抠图技巧,现在已经进入冬天,有一些特殊情况以及天气寒冷,我们可能很少出门拍照。这个时候如果我们想要在朋友圈发一些新图的话,其实完全可以借助于抠图…

怎样改证件照的背景颜色?两种方法教你换背景色

怎么改证件照的背景色呢?证件照大家在日常中经常会使用到,这也是我们每个人必备的一种证件。但是在使用的过程中,相信很多小伙伴遇到过自己的证件照背景色与要求的颜色不符的情况,因为通常情况下不会有这种情况,所以我…

如何抠图换背景?教你几个抠图换背景的方法

如何抠图换背景?金秋十月,天气逐渐转凉,正是外出游玩的好时节。秋天很适合和银杏拍照,但是由于各种各样的因素,我们可能无法亲自去拍摄和银杏的照片,这个时候我们完全可以借助一些技术手段来帮助自己制作这…

怎么给照片换背景颜色?分享几种非常简单的操作方法

照片的背景颜色怎么更换呢?如果我们想要发布一张自拍照并想要突出自己的服装,可以更改背景颜色,使服装更加突出,更受关注。还有很多小伙伴的证件照背景颜色不符合要求,需要更换背景色,但是怎么才能做到呢&a…

照片怎么换背景底色?这几种换背景颜色方法很方便

照片的背景颜色怎么更换呢?更改照片的背景颜色可以制造出很多不同的效果。例如,将照片的背景颜色改为黑色或白色可以带来高度对比的效果,而将背景颜色改为柔和的粉色或淡蓝色则可以制造出柔和、浪漫的感觉。然而很多小伙伴不清楚怎么给照片换…

怎么给图片换背景?点开收货一些新方法

平时我们有些照片拍出来可能任务比较好看而背景拍的不是那么理想,那么对于这种照片如果删除重新拍一张会有些可惜,其实我们可以给照片中的人物抠图出来更换背景就可以解决啦,那么怎么给图片换背景呢?今天来给小伙伴们分享两个好方…

照片怎么换背景?这几个方法或许能帮到你

大学上就业指导课的时候,老师让我们制作一个自己的简历,并要求了头像需要是蓝底的一寸照。课后,在制作简历的过程中,我并没有被简历的内容给难住,而是被如何获得一个蓝底的证件照给拖了后腿。这时候,我的舍…

android应用更换背景图片方法

android应用更换背景图片方法: 这学期刚接触安卓,挺菜的,做一个同事通讯录的时候在换app背景图片的时候不知道咋弄了,到处找怎么换背景图片,后面摸索了一下弄出来了,分享一下步骤。 1、 在项目目录里找到dr…

Centos重置密码

操作系统版本:Centos 7.4 修改普通用户密码 [rootwjy ~]# passwd admin #后输入两次密码即可【此处用得是root用户修改得】修改root密码 [rootwjy ~]# passwd root #后输入两次密码即可 [rootwjy ~]# passwd #修改root密码也可以这样忘记root密码,需…

django-password-reset邮箱重置密码

看了网上不少关于django-password-reset的教程,但个人感觉不适合新手操作,所以本篇文章希望让跟多的人看懂。 官网地址:https://django-password-reset.readthedocs.io/en/latest/quickstart.html 官网的提示: 接下来我就把上…

grafana重置密码

grafana之前设置了密码,后来忘记了,只能登录服务器重置密码了 sqlite3 /var/lib/grafana/grafana.db #连接grafana.db数据库(数据库默认存放位置,根据实际情况)查看所有表 sqlite> .tables查看user表里面有哪些…

Portainer重置密码步骤

以下代码块中的命令依次执行即可 1.停止运行的portainer docker stop 这里写你的portainer id 或者 name2.下载帮助镜像 docker pull portainer/helper-reset-password3.运行重置命令(前提是你安装的时候是根据官网步骤来的) 官网地址:https://documentation.po…

VtigerCRM重置管理员密码

登录Vtiger密码出错,使用邮件重置密码,邮件服务器还没有配置怎么办? Vtiger密码出错,忘记Vtiger密码,重置Vtiger管理员密码 复制一下代码,并在网站根目录创建password.php文件,粘贴代码。运行…

Grafana密码重置

前言 下面介绍的是各种情况下 Grafana忘记密码后进行的重置操作。 【1】web重置 当Grafana的邮件通知配置正常时&#xff0c;你可以通过web界面 点击忘记密码&#xff0c;通过邮件中的链接重置密码 也可联系管理员进入web后台&#xff0c;修改该账户的密码 <1>点击 忘记…

[CentOS8]重置登陆密码与用户密码修改

目录 一.系统版本二.密码修改方式1.用户修改密码2.重置系统登陆密码2.1 方法一(会停止响应)2.1.1进入启动选项编辑模式2.1.2在启动项中添加参数2.1.3修改ROOT用户密码 2.2 方法二2.2.1编辑启动模式2.2.2查看并修改sysroot访问权限2.2.3改变根目录并修改密码2.2.4 SELinux在重启…

Linux中修改或重置密码

在Linux中有两种方法修改或重置密码&#xff1a; 1.重启系统&#xff0c;按‘E’进入编辑内核参数的页面 2.找到linux行&#xff0c;末尾空格后输入 rd.break 然后按ctrlx 3. 输入mount | grep sysroot(注意空格)查看&#xff0c;可选步骤 ro 这里sysroot是以只读的形式挂载的&…

centos7 重置密码

centos7 正常登录root 输入密码后提示 access denied 目前只能重置密码来修复 重启&#xff0c;进入开机页面&#xff0c;按e键&#xff0c;进入编辑页面 找到linux16或linuxefi 开头的内容&#xff0c;光标移动到该行最后&#xff0c;一般是 UTF-8的后面&#xff0c;输入空格&…