「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)
Posted ThundersArk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)相关的知识,希望对你有一定的参考价值。
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。
💅文章概要: 各位小伙伴们你们好呀。它来啦!它来啦!它带着众望走来啦!在上一期「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码)中,我们学会了在本地如何使用Python代码调用ChatGPT的API接口。不过上一期的代码只能实现单轮调用,也就是说——不能实现多轮对话,ChatGPT无法理解我们的上下文。这期教程,就让我们一起来实现多轮对话吧!拿起键盘跟我练,一路火光带闪电!
🤟每日一言: 你可以遗憾,但是你绝对不能后悔。遗憾证明你努力过了,只是力有不逮。而后悔,只能说明你当时没努力过。
目录
前言
各位小伙伴们你们好呀。它来啦!它来啦!它带着众望走来啦!在上一期「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")
pass
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
(二)输入我们的问题
我是一名孤儿,我从小没有妈妈,你能以我妈妈的口吻来扮演一下嘛,拜托啦
(三)继续和它对话
妈妈,我在学校受委屈啦,同学们都嘲笑我的耳朵很大
(四)继续和它对话
妈妈,你真好,我感觉好多了
(五)继续和它对话
妈妈,这周末你可以陪我去游乐园玩吗,我从来没有去过游乐园
(六)继续和它对话
谢谢妈妈!我爱你! 我要永远和妈妈在一起!
到这里,五次对话已经全部结束了,弹出结束提示框
,可以看到这个效果还是非常好的,有那么一瞬间我都被感动到了!各位小伙伴们感兴趣可以自己试试噢!
完整源码
完整源码我放到了我的公众号里面,扫描文末二维码
或者搜索公众号ThundersArk
,在后台回复chat
即可获取完整源码!
PS:再说一遍,就是四个字母——
chat
!chat
!chat
!全部都是小写!
写在最后的话
本文花费大量时间介绍了Python调用ChatGPT接口实现多轮对话
,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!
✨ 原 创 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \\textcolorblue原创不易,还希望各位大佬支持一下 原创不易,还希望各位大佬支持一下
👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \\textcolor9c81c1点赞,你的认可是我创作的动力! 点赞,你的认可是我创作的动力!
⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \\textcolored7976收藏,你的青睐是我努力的方向! 收藏,你的青睐是我努力的方向!
✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \\textcolor98c091评论,你的意见是我进步的财富! 评论,你的意见是我进步的财富!
我用python/C++调用ChatGPT自制了一个聊天机器人
目录
1 ChatGPT完整版
2015年,OpenAI
由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得·蒂尔等硅谷科技大亨创立,公司核心宗旨在于实现安全的通用人工智能(AGI),使其有益于人类。
2022年12 月 1 日,OpenAI
的联合创始人山姆·奥特曼在推特上公布ChatGPT
并邀请人们免费试用
ChatGPT
可以与人类进行谈话般的交互,可以回答追问,连续性的问题,承认其回答中的错误,指出人类提问时的不正确前提,拒绝回答不适当的问题,其性能大大超乎人们对弱人工智能的想象。
在AI写代码、修Bug,甚至还想统治人类?快速体验ChatGPT中,我给出了体验完整版ChatGPT
的教程,本文就基于ChatGPT API
做一个小应用
2 Python/C++调用ChatGPT
Python/C++如何调用ChatGPT
呢,这个问题直接问ChatGPT
就好
以Python为例,接下来按照ChatGPT
自己说的步骤执行
2.1 获取API秘钥
进入OpenAI API点击Creat new secret key
接着会获得一个秘钥,第一时间复制它
2.2 测试API功能
首先安装openai
,建议在虚拟环境中进行,以免破坏工作环境,虚拟环境的配置请看Anaconda安装与Python虚拟环境配置保姆级图文教程(附速查字典)
pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple
接着进行接口测试
import openai
# Initialize the OpenAI API client
openai.api_key = "YOUR_API_KEY"
# Define your prompt
prompt = "Hello, how are you today?"
# Generate a response from ChatGPT
response = openai.Completion.create(
engine="text-davinci-002",
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5,
)
# Print the response
print(response["choices"][0]["text"])
可以收到ChatGPT
的回话说明测试通过
I'm doing well, thank you for asking. How about you?
2.3 设计简单UI
做一个简单的UI界面
import openai
import os, sys
from tkinter import *
from tkinter.font import Font
from tkinter.ttk import *
class AppUI(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master.title('My ChatGPT vx:yhd13950307060')
self.master.geometry('900x500')
self.createWidgets()
def createWidgets(self):
self.top = self.winfo_toplevel()
self.style = Style()
self.style.configure('Tftitle.TLabelframe', font=('黑体', 12))
self.style.configure('Tftitle.TLabelframe.Label', font=('黑体', 12))
self.ftitle = LabelFrame(self.top, text='', style='Tftitle.TLabelframe')
self.ftitle.place(relx=0.008, rely=0.017, relwidth=0.982, relheight=0.998)
self.stext = Text(self.ftitle, font=('黑体', 12), wrap=NONE, )
self.stext.place(relx=0.017, rely=0.036, relwidth=0.957, relheight=0.412)
# 垂直滚动条
self.VScroll1 = Scrollbar(self.stext, orient='vertical')
self.VScroll1.pack(side=RIGHT, fill=Y)
self.VScroll1.config(command=self.stext.yview)
self.stext.config(yscrollcommand=self.VScroll1.set)
# 水平滚动条
self.stextxscroll = Scrollbar(self.stext, orient=HORIZONTAL)
self.stextxscroll.pack(side=BOTTOM, fill=X)
self.stextxscroll.config(command=self.stext.xview)
self.stext.config(xscrollcommand=self.stextxscroll.set)
self.totext = Text(self.ftitle, font=('黑体', 12), wrap=NONE)
self.totext.place(relx=0.017, rely=0.552, relwidth=0.957, relheight=0.412)
self.VScroll2 = Scrollbar(self.totext, orient='vertical')
self.VScroll2.pack(side=RIGHT, fill=Y)
# 将滚动条与文本框关联
self.VScroll2.config(command=self.totext.yview)
self.totext.config(yscrollcommand=self.VScroll2.set)
# 水平滚动条
self.totextxscroll = Scrollbar(self.totext, orient=HORIZONTAL)
self.totextxscroll.pack(side=BOTTOM, fill=X)
self.totextxscroll.config(command=self.totext.xview)
self.totext.config(xscrollcommand=self.totextxscroll.set)
menubar = Menu(self.top, tearoff=False) # 创建一个菜单
self.style.configure('Tcleartext.TButton', font=('黑体', 12))
self.cleartext = Button(self.ftitle, text='清空', command=self.cleartext_Cmd, style='Tcleartext.TButton')
self.cleartext.place(relx=0.239, rely=0.463, relwidth=0.086, relheight=0.073)
self.style.configure('Taddyh.TButton', font=('黑体', 12))
self.addyh = Button(self.ftitle, text='查询', command=self.addyh_Cmd,
style='Taddyh.TButton')
self.addyh.place(relx=0.512, rely=0.463, relwidth=0.2, relheight=0.073)
class App(AppUI):
def __init__(self, master=None):
AppUI.__init__(self, master)
def cleartext_Cmd(self, event=None):
self.stext.delete(1.0, "end")
self.totext.delete(1.0, "end")
def addyh_Cmd(self, event=None):
cookiestext = self.stext.get(1.0, "end")
response = openai.Completion.create(
engine="text-davinci-002",
prompt=cookiestext,
max_tokens=1024,
n=1,
temperature=0.5,
)
answer = (response["choices"][0]["text"]).split(".")
for i in answer:
self.totext.insert(1.0, i)
self.totext.update()
if __name__ == "__main__":
top = Tk()
App(top).mainloop()
3 聊天问答
运行程序,开始问答
Q1
:世界上最好的编程语言是什么?
A1
:不同的编程语言适合不同的任务,世界上没有最好的编程语言
Q2
:如何看待人工智能?
A2
:在形成观点之前,需要考虑人工智能的利弊。一些人认为人工智能是增强人类能力的一种方式,而另一些人则认为它是对人类的潜在威胁。这个问题没有简单的答案,因为对人工智能(AI)有各种各样的看法
可以看到回答得还是挺有水准的,大家可以进行进一步的测试~
🔥 更多精彩专栏:
以上是关于「ChatGPT」Python调用API实现令人惊艳的多轮对话(最新版 | 附源码)的主要内容,如果未能解决你的问题,请参考以下文章
我用python/C++调用ChatGPT自制了一个聊天机器人
我用python/C++调用ChatGPT自制了一个聊天机器人
我用python/C++调用ChatGPT自制了一个聊天机器人