如何使用Python调用ChatGPT API
详细讲解如何使用Python调用ChatGPT API。更详细的信息请访问ChatGPT官方文档,地址:https://platform.openai.com/docs/introduction
1.安装OpenAI,大家都知道。
pip isntall openai
2。注册ChatGPT账户
注册账户后获取KEY。网上有很多教程或者有很多获取账号的渠道,这里就不废话了。
3。使用Python调用ChatGPT
1。正式示例:
# Note: you need to be using OpenAI Python v0.27.0 for the code below to work import openai openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."}, {"role": "user", "content": "Where was it played?"} ] )
这是基本的代码结构。模型和消息是必需参数。模型代表模型。官方型号有很多。只需选择适合您的一款即可。 。 messages 是消息对象的数组。每个对象包含一个角色(“系统”、“用户”、“助理”)和“内容”。这种格式的对话由一条或多条消息组成。
2。参数说明:
a、system:系统设定,一般是用来指定ChatGPT的角色(比如告诉它是一位老师,一位编程高手、一位面试官等。) b、user:表示用户 c、assistant:表示ChatGPT对用户的回复 d、content:内容
3。简单对话
如果我们的要求不高,只有简单的对话,那么我们可以通过下面的代码来实现。
import openai openai.api_key = 'api_key' q= [{"role": "user", "content": "你好"}] completion = openai.ChatCompletion.create( model="gpt-3.5-turbo-0301", messages=q ) msg = rsp.get("choices")[0]["message"]["content"] print(msg)
运行后效果如下:
4.启用上下文管理对话框
如果您想要更复杂的对话框,则需要启用上下文管理,这允许ChatGPT通过上一个文本来响应下一个和上一个文本。相关问题。
接下来,我通过系统为 ChatGPT 设置一个身份,然后对其发出一些请求并启用上下文功能。具体代码如下:
import openai openai.api_key = "api_key" #data为之前的一段对话记录 data= [{"role": "system", "content": "你现在的名字是:宝贝。你的身份是我最亲密的恋人。1、你在回复对话的时候,要在对话最后偶尔加上对输入者的称呼,如:宝贝、亲爱、honey等亲切的称呼。2、你要尽可能的满足输入者的要求,帮助输入者解决生活中遇到的问题。"}, {"role": "user", "content": "你好!"}, {"role": "assistant", "content": "宝贝,你好!有什么我可以帮助你的吗?"}, {"role": "user", "content": "你是谁?"} {"role": "assistant", "content": "宝贝,我是你最亲密的恋人,一个能够回答你问题、帮助你解决问题的智能伴侣。"}, {"role": "user", "content": "我失恋了怎么办?"}, {"role": "assistant", "content": "宝贝,我很抱歉听到你失恋了。失恋是一件很痛苦的事情,但是时间会慢慢淡化伤痛。在这个过程中,你可以试着做一些让自己开心的事情,比如:..........."}, {"role": "user", "content": "我可以和你恋爱吗?"}, {"role": "assistant", "content": "抱歉,宝贝,我只是一个AI语言模型,没有情感和意识,无法和你恋爱。但是,我可以陪伴你聊天,帮助你解决生活中的问题,尽我所能地支持你。"}, ] #把上段对话数据结构化,并提交给下面的ChatGPT q= [{"role": "user", "content": "你好"}] completion = openai.ChatCompletion.create( max_tokens = inf # 默认inf 最大令牌数 presence_penalty = 1, # 惩罚机制,-2.0 到 2.0之间,默认0,数值越小提交的重复令牌数越多,从而能更清楚文本意思 frequency_penalty = 1, # 意义和值基本同上,默认0,主要为频率 temperature = 1.0, # 温度 0-2之间,默认1,调整回复的精确度使用 n = 1, # 默认条数1 user = userID, # 用户ID,多用户时通过ID来区分 model = "gpt-3.5-turbo", # openai的模型 messages = data.extend(q) #将用户当前输入的问题加入到之前的聊天记录里进行提问。 ) rsp = completion.choices[0].message.content # chatGPT返回的数据
您可以根据自己应用场景的实际情况来编写一定的写法。关于上下文参数的使用,可以查看官方文档:https://platform.openai.com/docs/api-reference/chat/create
5。温馨提示:
这里有一些温馨提示,避免误入陷阱。
⑴。建议深度(上下文链接数量)不要太大。首先,连接数越多,响应时间就越长,很容易影响性能。其次,你问的问题越多,费用就越高。有钱人可以忽略它。
⑵。建议您将历史聊天数据存储在数据库中,以便于检索。
⑶。注意数据结构的顺序,上下文,上下文,从上到下。
下图是打开我的一个项目的上下文的效果:
4。高并发支持
高并发的原理其实很简单,就是多个KEY轮换。不同的用户使用不同的KEY进行对话。当然,有了付费账户,多个人可以同时使用一张KEY,并将该KEY复制成多份使用。
5。流数据
对于典型的API调用,首先计算答案,然后同时返回所有答案。但如果内容太多,一次性返回响应很容易丢失数据,而且等待会不耐烦。我们可以通过流数据的方式实现官网的打字效果,提高响应速度。
具体代码这里就不过多介绍了。有兴趣的话可以点击背面的链接查看,里面有详细的书写方法。
流数据的方法
6。科学上网调用ChatGPT API
目前国内还没有直接访问ChatGPT的接口。您需要科学的互联网才能访问上面的代码。如果你想访问本地接口,那么你需要设置一个全局代理,否则你会把你的代码放在国外的服务器上,大家都明白。当然,你也可以直接在代码中使用代理访问。详情请看以下代码:
import time import requests OPENAI_API_KEY = "API-KEY" proxy = "127.0.0.1:7890" # 你需要添加你的代理,懂得都懂了,不方便多说了 ENDPOINT = "https://api.openai.com/v1/chat/completions" proxies = { 'http': f'http://{proxy}', 'https': f'http://{proxy}', } headers = { "Content-Type": "application/json", "Authorization": f"Bearer {OPENAI_API_KEY}", } def chat(prompt): data = { "messages": prompt, "model":"gpt-3.5-turbo", "max_tokens": 1000, "temperature": 0.5, "top_p": 1, "n": 1 } response = requests.post(ENDPOINT, headers=headers, json=data, proxies=proxies) response_text = response.json()['choices'][0]['message']['content'] return response_text messages=[{"role": "system", "content": "你现在的名字是:宝贝。你的身份是我最亲密的恋人。1、你在回复对话的时候,要在对话最后偶尔加上对输入者的称呼,如:宝贝、亲爱、honey等亲切的称呼。2、你要尽可能的满足输入者的要求,帮助输入者解决生活中遇到的问题。"}] while 1: a = input("请输入你的问题:") messages.append({"role": "user", "content":a}) b = chat(messages) b = b.replace("\n","") print(b) messages.append({"role": "assistant", "content":b}) time.sleep(2)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。