如何使用Python来调用ChatGPT API

2023-05-0706:53:14后端程序开发Comments2,531 views字数 4481阅读模式

详细的讲解一下如何使用Python来调用ChatGPT API。更多的详细资料,请去ChatGPT官方文档查阅,地址:https://platform.openai.com/docs/introduction文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

一、安装OpenAI,这个大家都懂的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

pip isntall openai

二、注册一个ChatGPT账号文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

注册了帐号之后,然后获取到KEY,这里网上有很多教程,或者有很多渠道可以弄到账号,这里我就不废话了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

三、使用Python调用ChatGPT文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

1、官方示例:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

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?"}
    ]
)

这是基本的代码结构,model和messages是必选参数,model代表模型,官方有很多模型,选适合自己的就好。messages是一个消息对象数组。每个对象都包含了一个角色('system'、'user'、'assistant')和'content'。对话都是由这样形式的一条消息或者多条消息组成的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

2、参数解释:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

a、system:系统设定,一般是用来指定ChatGPT的角色(比如告诉它是一位老师,一位编程高手、一位面试官等。)
b、user:表示用户
c、assistant:表示ChatGPT对用户的回复
d、content:内容

3、简单对话文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

如果我们要求不高,只是简单对话,那么我们通过下面的代码就可以实现。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

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)

运行之后效果如下图:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

如何使用Python来调用ChatGPT API文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

4、启用上下文管理方式对话文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

想要进行复杂一些的对话,那就需要开启上下文管理,能让ChatGPT通过上文来回复下一个与上文有关联的问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

下面我通过system给ChatGPT设置一个身份,然后对它提出一些要求,并开启上下文的功能。具体代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

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文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

5、温馨提示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

下面的是一些温馨提示,避免踩坑。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

⑴、关于上下文关联的深度(条数)建议不要太大,一是因为关联条数越多,响应的时间就会越长,容易影响性能,二是越问,会越贵。土豪可以忽略。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

⑵、历史聊天数据建议保存在数据库里,方便查询。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

⑶、注意数据结构的顺序,上下文,上下文,由上到下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

下面图片的是我一个项目开启上下文的效果图:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

如何使用Python来调用ChatGPT API文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

四、支持高并发文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

支付高并发的原理其实很简单,就是多KEY轮循。不同的用户用不用的KEY来进行对话。当然付费账户,可以多个人同时用一个KEY,把KEY复制多份使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

五、通过流式传输数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

对于典型的API调用,首先计算响应,然后一次性返回所有响应。但是如果内容太多了,一次性返回响应的话容易丢失数据,而且等待的也让人焦急。这个我们可以通过流式传输数据的方法来实现官网那样的打字效果,提升响应速度。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

具体代码我不在这里做过多介绍,感兴趣的,可以点击后边的链接查看,里面有详细的写法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

流式传输数据的方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

六、使用科学上网的方式调用ChatGPT API文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

目前国内没法直接访问ChatGPT接口,需要科学上网才能访问,上面的代码,想要在本地能访问接口,那就得设置全局代理,不然就把你的代码放到国外的服务器上去,懂的都懂。当然,你也可以直接在代码中使用代理的方式访问,具体可以参考下面的代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html

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)
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38623.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/38623.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定