Code前端首页关于Code前端联系我们

如何使用Python调用ChatGPT API

terry 2年前 (2023-09-24) 阅读数 68 #后端开发

详细讲解如何使用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)

运行后效果如下:

如何使用Python来调用ChatGPT API

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。温馨提示:

这里有一些温馨提示,避免误入陷阱。

⑴。建议深度(上下文链接数量)不要太大。首先,连接数越多,响应时间就越长,很容易影响性能。其次,你问的问题越多,费用就越高。有钱人可以忽略它。

⑵。建议您将历史聊天数据存储在数据库中,以便于检索。

⑶。注意数据结构的顺序,上下文,上下文,从上到下。

下图是打开我的一个项目的上下文的效果:

如何使用Python来调用ChatGPT API

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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门