5分钟实现调用ChatGPT接口API实现多轮问答

5分钟实现调用ChatGPT接口API完成多轮问答


最近ChatGPT也是火爆异常啊,在亲自使用了几个月之后,我发现这东西是真的好用,实实在在地提高了生产力。那么对于开发人员来说,有时候可能需要在自己的代码里加入这样一个智能问答的功能,我最近就出现了这样的想法和需求,所以简单研究了一下。网上类似的方法有很多,这里我提供一种我目前测试成功的也正在使用的一种,有其他需求可以自行上网查找。

1、下载openai库

我们可以直接使用Python中的openai库来实现对ChatGPT的调用。

首先第一步就是下载,下载方式也很简单,只需要一条命令pip install openai 。下载过程中可能会出现各种问题:比如pip版本太低,可以使用pip install --upgrade pip命令来升级。如果在命令行已经显示安装成功,但是调用的时候找不到库,可能是openai版本有问题,可以尝试使用这条命令pip install -U openai

我的已经安装成功了,所以给我显示的是openai已安装的版本信息:

image-20230508174711485

Windows进入命令行是WIN+R后输入cmd,然后运行相关命令。但是有个点需要注意,最好选择管理员权限来运行cmd命令行窗口。如果还有其他问题,可以尝试切换网络或者使用Anaconda来安装。

image-20230508174411733

2、获取API KEY

在调用接口之前,我们需要申请一个API KEY来获取使用权限。获取方式有两种,可以自行去OpenAI官网(https://platform.openai.com/account/api-keys)注册账号,然后申请(需要魔法上网)。不过也可以选择其他方式去获取,网上有很多渠道,可以自行查找。这个key的格式大概是这个样子的:sk-[一大串混乱的字母和数字]。

3、模型简述

OpenAI 开放了两个新模型的api接口(也就是我们用的这个),专门为聊天而生的 gpt-3.5-turbo 和 gpt-3.5-turbo-0301。我查了一下这两个模型的区别:

gpt-3.5-turbo 需要在 content 中指明具体的角色和问题内容,而 gpt-3.5-turbo-0301 更加关注问题内容,而不会特别关注具体的角色部分。另外,gpt-3.5-turbo-0301 模型有效期到 6 月 1 日,而 gpt-3.5-turbo 会持续更新。

4、参数介绍

首先介绍一下主要参数的含义:

  • model:模型名称,可选gpt-3.5-turbo或gpt-3.5-turbo-0301。
  • messages:数据格式为json,问题描述或者角色定义,也是我们需要重点关注的字段。
  • temperature:控制返回结果的随机性,0.0表示结果固定,随机性大可以设置为0.9。
  • max_tokens:最大字数,通常一个汉字占两个长度,API最多支持的token数量为4096,需要注意的是这个字数同时包含了问题和答案的字数和。
  • top_p:也即top probability,是指在生成文本时,模型将考虑概率最高的词语。设置为1即可。通过调节该值可以控制模型生成文本时的多样性。较小的 top_p 值会导致生成的文本更加确定性,而较大的 top_p 值则会导致生成的文本更加多样化但可能存在不连贯、不合理的情况。
  • frequency_penalty:该参数用于对词汇进行惩罚(penalty),以减少重复性和不必要的单词或短语。当参数设置为较大的值时,模型会倾向于避免使用已经出现过的单词或短语。通过调节该值可以控制模型对文本的流畅度。较小的值会导致生成的文本更加流畅但可能存在重复或者不太符合逻辑的情况,而较大的值则会导致生成的文本更加严谨但可能会出现断句或者语义不连贯的情况。一般建议设置在0.6到1之间。
  • stream:控制是否为流式输出。当参数设置为 True 时,API 的返回结果会以流的方式不断推送给客户端,无需等待全部结果生成完成。当参数设置为 False 时,则需要等待所有结果生成才能一次性返回给客户端。

messages字段需要重点解释一下:我们可以在代码中指定角色类型,在gpt-3.5-turbo模型中。主要包含三种角色,分别是系统system系统、user用户和assistant助手。

下面这一段是对此比较官方的阐释:

  1. System:系统角色指的是聊天机器人所运行的计算机系统或者软件平台。在对话过程中,System 负责接受用户请求并将其转发给 Assistant 进行处理或响应,并最终将结果返回给 User。
  2. User:用户角色指的是与聊天机器人进行对话的人。在对话交互中,User 可以提出各种问题,包括需要获取信息、解决问题、咨询建议等等。User 一般通过输入文本、语音等方式向 Assistant 发出请求,并通过系统获取相应的回复或结果。
  3. Assistant:Assistant 角色指的是聊天机器人中的智能助手程序,主要负责对用户请求进行处理和响应,并生成相应的回答或结果。Assistant 可以使用自然语言处理技术,如文本理解、知识库查询、逻辑推理等,从而实现与 User 的智能化交互。

代码示例

  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What year is this year?"},
        {"role": "assistant", "content": "2023"},
        {"role": "user", "content": " xxxx ?"}
    ]

5、调用接口

在我们完成了openai库的安装并了解了上述参数的含义之后,就可以着手写代码了,下面一个简单的多次问答机器人代码示例:

# -*- coding: utf-8 -*-
import openai

api_key = "在这里填入你的KEY"

openai.api_key = api_key

def askChatGPT(messages):
    MODEL = "gpt-3.5-turbo"
    response = openai.ChatCompletion.create(
        model=MODEL,
        messages = messages,
        temperature=1)
    return response['choices'][0]['message']['content']

def main():
    messages = [{"role": "user","content":""}]
    while 1:
        try:
            text = input('问:')
            if text == 'quit':
                break
            # 问
            d = {"role":"user","content":text}
            messages.append(d)
            text = askChatGPT(messages)
            d = {"role":"assistant","content":text}
            # 答
            print('答:'+text+'\n')
            messages.append(d)
        except:
            messages.pop()
            print('ChatGPT:error\n')
            
if __name__ == '__main__':
    main()

运行上述代码之后,在控制台会提示我们输入问题。每输入一个问题并敲回车之后,等待片刻会显示ChatGPT的回答,我们可以进行连续问答,下图是运行效果(测试问题无任何价值导向)。

image-20230508183535885

下面这段代码实现了单次问答调用,本质上和上面的代码是一样的,各位按需自取:

# -*- coding: utf-8 -*-
import openai
def openai_reply(content, apikey):
    openai.api_key = apikey
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0301",  # gpt-3.5-turbo-0301
        messages=[
            {"role": "user", "content": content}
        ],
        temperature=0.5,
        max_tokens=2048,
        top_p=1,
        frequency_penalty=0.7,
    )
    # print(response)
    return response.choices[0].message.content


if __name__ == '__main__':
    content = '我比较喜欢大海,请给我推荐几个景点。'
    ans = openai_reply(content, '在这里填入你的KEY')
    print(ans)

image-20230508183634801

原始的返回值数据格式示例如下:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "xxxx",
        "role": "assistant"
      }
    }
  ],
  "created": 1683542226,
  "id": "chatcmpl-",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 373,
    "prompt_tokens": 30,
    "total_tokens": 403
  }
}

6、总结

以上就是针对程序调用ChatGPT接口的全部步骤了,如果运行代码出现了问题可以最后尝试一下这个方法:找到目前所使用的python环境的安装目录,进入openai库文件夹下(D:\environment\python39\Lib\site-packages\openai),替换api_requestor.py文件。所需的替换文件可以关注我的订阅号【靠谱杨的挨踢生活】回复【chat】获取。

image-20230508184423063

理性看待人工智能的发展,正确认识人的不可替代性。让AI作为一个越来越实用的工具服务于我们的生产和生活(仅代表个人观点)。

原文链接:https://www.cnblogs.com/rainbow-1/p/17382852.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:5分钟实现调用ChatGPT接口API实现多轮问答 - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月8日

相关文章

  • CTC+pytorch编译配置warp-CTC遇见ModuleNotFoundError: No module named ‘warpctc_pytorch._warp_ctc’错误

    如果你得到如下错误: Traceback (most recent call last): File “<stdin>”, line 1, in <module> File “/my/dirwarp-ctc/pytorch_binding/warpctc_pytorch/__init__.py”, line 8, in <mod…

    PyTorch 2023年4月8日
    00
  • CAFFE(四):Ubuntu 下安装jupyter notebook

    Ubuntu 下安装jupyter notebook 第一步、安装 pycaffe notebook 接口环境  在上一步成功安装 caffe 之后,就可以通过 caffe 去做训练数据集或者预测各种相关的事了,只不过需要在命令行下通过 caffe 命令进行操作,而这一步 pycaffe 的安装以及 notebook 环境配置只是为了更方便的去使用 caff…

    Caffe 2023年4月8日
    00
  • (五)目标检测新趋势拾遗

    转载自知乎:https://zhuanlan.zhihu.com/p/34142321 关于作者: @李家丞同济大学数学系本科在读,现为格灵深瞳算法部实习生。 —————————————————————————————————-…

    2023年4月8日
    00
  • pytorch 数据拼接与拆分cat、stack、split、chunck

    1、cat拼接 功能:通过dim指定维度,在当前指定维度上直接拼接 默认是dim=0 指定的dim上,维度可以不相同,其他dim上维度必须相同,不然会报错。 1)拼接两个维度相同的数 a = torch.rand(2, 3, 2) a # 输出: tensor([[[0.6072, 0.6531], [0.2023, 0.2506], [0.0590, 0.…

    PyTorch 2023年4月8日
    00
  • 深度学习2.0-37.循环神经网络层

    文章目录 weight sharing-用一个线性层处理单词(共享)解决参数量过大的问题 Consistent memory-解决语义相关性问题 Gradient-可导 weight sharing-用一个线性层处理单词(共享)解决参数量过大的问题 Consistent memory-解决语义相关性问题 需要用全局的视角来处理语义信息,来解决语义相关性问题 …

    2023年4月6日
    00
  • GAN网络无监督对抗网络

    1、在MINST数据集中,选出一个样本,输入数字标签,输出图像,并让输出的图像与样本图像尽可能相似,总误差最小化; 2、同上,只不过并不直接比较输出和样本相似性,而是让一个已训练好的手写数字识别网络来判断这个伪造的图像是几; 3、DCGAN,同时训练一个生成器一个判别器。每个时刻随机采样一个向量输入给生成器,它输出一张图像,同时读取一个数据样本,判别器判断样…

    2023年4月5日
    00
  • PyTorch动态神经网络(六)——循环神经网络RNN

    1、什么是循环神经网络RNN RNN是在有序的数据上进行学习的。 对于含有关联关系的数据,普通的神经网络并不能很好的体现或者是发现利用数据之间的关联关系。于是也就有了循环神经网络,它很善于分析内部有关联关系的序列数据,在单独分析数据的同时,也不忘考虑数据间的关系。 假如我们在分析Data0、Data1、Data2、Data3这些数据时,对于每个数据都经过相同…

    2023年4月6日
    00
  • keras 入门——电影评论二分类问题(from python深度学习)

    一、IMDB数据集的介绍       电影评论IMDB数据集,包含来自电影数据库(IMDB)的50000两级分化的评论。我们在深度学习中采用其中的25000条评论作为训练集,剩下的25000条评论作为测试集。两个测试集都包含各50%的正面与负面评论,其中0代表负面,1代表正面。数据集已经内置于keras库,并且做过了预处理,其中的评论单词已经被转化为了整数序…

    2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部