相关文章推荐
安静的手套  ·  陕西省人民政府办公厅关于“十二五”科技统筹创 ...·  8 月前    · 
喝醉的感冒药  ·  激荡清风正气 ...·  1 年前    · 
睡不着的荒野  ·  安庆石化老年大学-女声合唱《山野的风》·  1 年前    · 
行走的楼房  ·  前男友拍视频威胁,网红“狗头萝莉”公开回应, ...·  1 年前    · 
善良的鞭炮  ·  比想象中要好开 体验上汽大通MAXUS ...·  2 年前    · 
Code  ›  「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)开发者社区
python python函数 ps openai
https://cloud.tencent.com/developer/article/2260247
风流倜傥的大熊猫
2 年前
作者头像
THUNDER王
0 篇文章

「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > THUNDER王——CSDN内容同步 > 「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)

「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)

作者头像
THUNDER王
发布 于 2023-04-08 10:31:02
1.9K 0
发布 于 2023-04-08 10:31:02
举报
在这里插入图片描述
在这里插入图片描述

💂 作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅 文章概要: 各位小伙伴们你们好呀。它来啦!它来啦!它带着众望走来啦!在上一期 「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码) 中,我们学会了在本地如何使用Python代码调用ChatGPT的API接口。不过上一期的代码只能实现单轮调用,也就是说——不能实现多轮对话,ChatGPT无法理解我们的上下文。这期教程,就让我们一起来实现多轮对话吧!拿起键盘跟我练,一路火光带闪电!


🤟 每日一言: 你可以遗憾,但是你绝对不能后悔。遗憾证明你努力过了,只是力有不逮。而后悔,只能说明你当时没努力过。


目录

  • 前言
  • 准备工作
    • Python环境安装
    • 安装openai库
    • 安装easygui库
    • 获取API_KEY
  • Python代码讲解
    • 第三方库的引入
    • 类Chat的定义
    • 花销和token计算函数
    • 主体运行函数定义
    • 项目运行
  • 效果演示
  • 完整源码
  • 写在最后的话

前言

在这里插入图片描述
在这里插入图片描述

各位小伙伴们你们好呀。它来啦!它来啦!它带着众望走来啦!在上一期 「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码) 中,我们学会了在本地如何使用Python代码调用ChatGPT的API接口。不过上一期的代码只能实现单轮调用,也就是说—— 不能实现多轮对话 ,ChatGPT无法理解我们的上下文。这期教程,就让我们一起来实现多轮对话吧!拿起键盘跟我练,一路火光带闪电!


准备工作

在这里插入图片描述
在这里插入图片描述

在正式开始教程之前,首先我们需要完成如下的准备工作:

  • 魔法(电脑能够正常登录Google官网)
  • Python环境
  • open ai库
  • Chatgpt的API_KEY

PS:在学习过程中遇到任何问题,请关注公众号 ThundersArk 点击菜单栏中的 联系我 ,添加我的个人微信。

Python环境安装

在这里插入图片描述
在这里插入图片描述

Python环境的安装市面上已经有大把的教程了,博主在此不再赘述,最好安装Python的 最新3.10版本 !

安装openai库

在CMD命令行中,输入如下代码安装 open ai库 :

pip install openai

PS:在安装openai库的过程中可能会产生如下报错:

在这里插入图片描述
在这里插入图片描述

该报错可能是由于如下问题导致:

  • 没有对open ai库给予信任
  • pip版本过高

我们可以通过在 pip install openai 后面加上软件源并对该存储库给予信任,或者是 降低我们的pip版本 ,CMD中的代码如下:

加上软件源对该存储库给予信任

pip install openai -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

降低pip版本到20.2

python -m pip install pip==20.2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

PS:如果上述解决方案还是不能解决安装报错问题,请联系博主

安装easygui库

在CMD命令行中,输入如下代码安装 open ai库 :

pip install easygui

PS:如果上述安装不能成功,那么可以加上对软件源的信任!如下所示:

pip install easygui -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

PS:如果上述解决方案还是不能解决安装报错问题,请联系博主

获取API_KEY

在这里插入图片描述
在这里插入图片描述

(一)首先,访问 Chatgpt官网 登录账号

PS:登录成功后,登录之后,点击右上角 “Personal” ,展开菜单,找到 “View API keys”

在这里插入图片描述
在这里插入图片描述

(二)进入页面后,点击 “Create new secret key” 按钮,来创建 API_KEY 。之后 复制你的key ,记住它!!!单个key只会显示一次!

PS:你可以创建多个key,但是多个key是共享总的金额。

在这里插入图片描述
在这里插入图片描述

Python代码讲解

下面将对代码进行逐段分析,觉得麻烦的小伙伴们可以直接跳过这一步到最后的 完整源码 ,获取完整源码噢!   我将全部代码分为了以下五个部分:

  • 第三方库的引入
  • 类Chat的定义
  • 花销和token计算函数
  • 主体运行函数实现
  • 项目运行

第三方库的引入

在最开头我们要引入我们本项目中要使用到的第三方库

  • openai库 :用于调用ChatGPT接口
  • easygui :用于控制对话次数
import openai
import easygui as g

类Chat的定义

在这段代码中我们定义了一个Chat类,用于实现打印我们的对话并且计算每次调用ChatGPT的花销( 钱和token ),在后面,我们要 将这个Chat类进行实例化!

PS:注意啦!这里要将 YOUR_API_KEY 替换为你自己的API_KEY, 两边的单引号不要去掉,请注意!

在这里插入图片描述
在这里插入图片描述
class Chat:
    def __init__(self,conversation_list=[]) -> None:
        # 初始化对话列表,可以加入一个key为system的字典,有助于形成更加个性化的回答
        # self.conversation_list = [{'role':'system','content':'你是一个非常友善的助手'}]
        self.conversation_list = []  # 初始化对话列表
        self.costs_list = [] # 初始化聊天开销列表
    # 打印对话
    def show_conversation(self,msg_list):
        for msg in msg_list[-2:]:
            if msg['role'] == 'user': # 如果是用户的话
                #print(f"\U0001f47b: {msg['content']}\n")
            else: # 如果是机器人的话
                message = msg['content']
                print(f"\U0001f47D: {message}\n")                
            print()
    # 调用chatgpt,并计算开销
    def ask(self,prompt):
        self.conversation_list.append({"role":"user","content":prompt})
        openai.api_key = 'YOUR_API_KEY'
        response = openai.ChatCompletion.create(model="gpt-3.5-turbo",messages=self.conversation_list)
        answer = response.choices[0].message['content']
        # 下面这一步是把chatGPT的回答也添加到对话列表中,这样下一次问问题的时候就能形成上下文了
        self.conversation_list.append({"role":"assistant","content":answer})
        self.show_conversation(self.conversation_list)
        人民币花费 = total_counts(response)
        self.costs_list.append(人民币花费)
        print()

花销和token计算函数

在这段代码中我们定义了一个total_counts函数,用于在多轮对话结束后计算所有对话一共消耗的 钱和token(字数) ,上面Chat实现的计算是每一次对话的花销,而这里定义的函数则是用于 将Chat类中计算的每一次花销最后进行了一个加总!

def total_counts(response):    
    #计算本次任务花了多少钱和多少tokens:
    tokens_nums = int(response['usage']['total_tokens']) #计算一下token的消耗
    price = 0.002/1000 #根据openai的美元报价算出的token美元单价
    人民币花费 = '{:.5f}'.format(price * tokens_nums * 7.5)
    合计内容 = f'本次对话共消耗了{tokens_nums}个token,花了{人民币花费}元(人民币)'
    print(合计内容)
    return float(人民币花费)

主体运行函数定义

这是我们项目的 主体运行函数 ,在开头我们要先进行对话次数的限制,记住不要输入太多,否则可能导致调用失败(怕不稳定);

PS:其次是调用次数过多,咱的钱包也顶不住呀!!

def main():
    talk = Chat()
    print()
    count = 0
    count_limit = eval(input("你想要对话的次数是多少呢?\n(请输入数字即可)"))		
    while count<count_limit: #上下文token数量是有极限的,理论上只能支持有限轮次的对话,况且,钱花光了也就不能用了。。。
        if count<1: 
            words = input("请问有什么可以帮助你的呢?\n(请输入您的需求或问题):")
        else:
            words = input("您还可以继续与我交流,请您继续说:\n(请输入您的需求或问题):")
        print()
        talk.ask(words)
        count += 1
    g.msgbox("对不起,您已达到使用次数的限额,欢迎您下次使用!")      
    print(f'本轮聊天合计花费{sum(talk.costs_list)}元人民币。')

项目运行

PS:在完成上述的定义之后,别忘了在最后加上下面代码,让你的项目运行起来哦!

if __name__ == "__main__":
    main()

效果演示

在这里插入图片描述
在这里插入图片描述

下面就是效果的展示啦!图片上的字比较小, 请大家放大来看!

PS:我将扮演一名从小没有妈妈的孤儿,让ChatGPT当我的妈妈!

(一)输入我们想要对话的次数,这里我填了5次,在键盘上打一个 5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)输入我们的问题

我是一名孤儿,我从小没有妈妈,你能以我妈妈的口吻来扮演一下嘛,拜托啦

 
推荐文章
安静的手套  ·  陕西省人民政府办公厅关于“十二五”科技统筹创新工程的实施意见_陕西省人民政府
8 月前
喝醉的感冒药  ·  激荡清风正气 凝聚党心民心——党的十八大以来深入推进党风廉政建设和反腐败斗争述评_机关党建
1 年前
睡不着的荒野  ·  安庆石化老年大学-女声合唱《山野的风》
1 年前
行走的楼房  ·  前男友拍视频威胁,网红“狗头萝莉”公开回应,寻求律师法律援助_网友
1 年前
善良的鞭炮  ·  比想象中要好开 体验上汽大通MAXUS EV90电尊王 - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号