【GPT-3】text-davinci -003 模型在Python中的应用,单次对话-连续对话-GUI界面

Navigator

  • 一、Python
    • 1.1 最简单的单次问答
    • 1.2 连续对话
    • 1.3 GUI界面

首先简单说一下:调用openAI的模型,需要申请API key,用于鉴权和计费嘛。你注册之后有18美元体验金,3个月有效期。

更多信息可以看我上一篇文章,或者官网文档。

API key不能暴露于网络,否则要重新申请(不影响什么),比如你把你的含有key的代码同步到github仓库,很快这个key就失效了。

在这里插入图片描述
使用API请求后,完整的回复是这样的json结构数据:我们只需要解析出 choices 的 text 即可。其中 usage 显示了本次请求使用的token数量信息。

当你发现回答内容或格式不正确时,就可以打印全部恢复,看看问题出在什么地方。

You: hello
GPT-3:  {"choices": [{"finish_reason": "stop","index": 0,"logprobs": null,"text": "\n\nHi there! How can I help you?"}],"created": 1677321094,"id": "cmpl-6nm7ywWcF6tQYhrKkPA6mOIvi9OEY","model": "text-davinci-003","object": "text_completion","usage": {"completion_tokens": 11,"prompt_tokens": 1,"total_tokens": 12}
}

此外,即使是GPT-3的API,使用的人也不少(毕竟chatGPT API没出来,不少人拿这个骗人),所以有时候并不会秒响应。

模型非常适合写文本以及算法类型的代码(毕竟用了github数十亿开源代码来训练),但回答内容的正确性需要用户判断(尽管大多数时间是可用、正确的)。

一、Python

1.1 最简单的单次问答

很简单,但不支持连续对话,你每一次都要把你的需求描述完整。

主要的请求如下:

                    response = openai.Completion.create(# 模型名称model= self.model,# 用户提供的输入文本,用于指导GPT输出prompt=prompt,# 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。temperature=0,# 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整max_tokens=1500,# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性frequency_penalty=0.2,# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性presence_penalty=0.15,)

直接打印就是完整的返回数据,我们只打印对话内容即可:

print(self.bot, response["choices"][0]["text"].strip())

完整代码:

# -*- coding = utf-8 -*-
# @TIME :     2023-2-21 下午 9:47
# @Author :   CQUPTLei
# @File :     gpt_3.py
# @Software : PyCharm
# @Abstract : GPT-3的简单使用,不支持上下文连续对话,自己申请API key,很简单哈。import openai
openai.api_key = "你的key"class Chat_bot:def __init__(self,model):self.user = "\nYou: "self.bot = "GPT-3: "# 具体的GPT-3模型名称self.model = modeldef Generate(self):while True:prompt = input(self.user)if prompt == 'exit':breakelse:try:response = openai.Completion.create(# 模型名称model= self.model,# 用户提供的输入文本,用于指导GPT输出prompt=prompt,# 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。temperature=0,# 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整max_tokens=1500,# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性frequency_penalty=0.2,# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性presence_penalty=0.15,)# print(self.bot,response)print(self.bot, response["choices"][0]["text"].strip())except Exception as exc:print(exc)if __name__ =='__main__':bot = Chat_bot('text-davinci-003')bot.Generate()

运行示例:

在这里插入图片描述

1.2 连续对话

先看效果:
在这里插入图片描述

实现方式:将最新几次的对话保存下来,作为prompt输入即可。这里最新取了5次对话,太大的话会超过token数量限制。

另外用变量将问答保存下来,待对话结束保存下来即可。

完整示例:

# -*- coding = utf-8 -*-
# @TIME :     2023-2-25 下午 7:01
# @Author :   CQUPTLei
# @File :     gpt_3_continuous.py
# @Software : PyCharm
# @Abstract : 可连续对话,并在退出时将对话保存为文件import openai
import time
from pathlib import Pathopenai.api_key = "你的key"class Chat_bot:def __init__(self,model):self.user = "\nYou: "self.bot = "GPT-3: "self.model = modelself.question_list = []self.answer_list = []self.text = ''self.turns = []self.last_result = ''def dialogue_save(self):timestamp = time.strftime("%Y%m%d-%H%M-%S", time.localtime())  # 时间戳file_name = 'output/Chat_' + timestamp + '.md'  # 文件名f = Path(file_name)f.parent.mkdir(parents=True, exist_ok=True)with open(file_name, "w", encoding="utf-8") as f:for q, a in zip(self.question_list, self.answer_list):f.write(f"You: {q}\nGPT-3: {a}\n\n")print("对话内容已保存到文件中: " + file_name)def Generate(self):print('\n请开始你们的对话,以exit结束。')while True:# 用户输入question = input(self.user)self.question_list.append(question) # 将问题添加到问题列表中# 把输入换成这样,就可以联系上下文进行连续对话了(text里面保存了最新10次对话)prompt = self.bot + self.text  + self.user + question# 退出命令if question == 'exit':breakelse:try:response = openai.Completion.create(# 模型名称model= self.model,# 用户提供的输入文本,用于指导GPT输出prompt=prompt,# 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。temperature=0,# 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整max_tokens=1500,# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性frequency_penalty=0.2,# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性presence_penalty=0.15,)result = response["choices"][0]["text"].strip()result = result[result.index('G'):]self.answer_list.append(result) #将回答添加到回答列表中self.last_result = result# 只有这样迭代才能连续提问理解上下文self.turns += [question] + [result]# 为了防止超过字数(token)限制,总是取最新5轮对话if len(self.turns) <= 10:self.text = " ".join(self.turns)else:self.text = " ".join(self.turns[-10:])print(result)# 打印异常except Exception as exc:print(exc)# 退出对话后保存self.dialogue_save()if __name__ =='__main__':bot = Chat_bot('text-davinci-003')bot.Generate()

1.3 GUI界面

使用tkinter简单写一个,运行效果如下:
在这里插入图片描述
代码示例:

# -*- coding = utf-8 -*-
# @TIME :     2023-2-21 下午 10:55
# @Author :   CQUPTLei
# @File :     GPT_3_GUI.py
# @Software : PyCharm
# @Abstract :
import openai
import tkinter as tk
openai.api_key = "你的key"#设置窗口大小,位置
def window_set(root, width, height):screenwidth = root.winfo_screenwidth()  #获取显示器尺寸screenheight = root.winfo_screenheight()size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 5)root.geometry(size)root.update()# 创建tkinter GUI应用程序
root = tk.Tk()
root.title("OpenAI Text-Davinci-003")
sw=root.winfo_screenwidth()
sh=root.winfo_screenheight()
window_set(root,800,500)
# root.iconphoto(False, tkinter.PhotoImage(file='D:\yt_dlp_python_GUI\logo_icon\lucid.png'))  # logo
# root.iconbitmap(default=r'icon\r14.ico')   # 更改窗口图标
root.resizable(False, False) # 设置窗口大小不可变# 创建输入框
input_field = tk.Text(root,font=("SimSun", 12),wrap='word',bg='#A1CBD1')
input_field.place(x=0, y=0,width=700,height=50)# 创建文本框,用于显示机器人的回复文本
response_field = tk.Text(root,font=("SimSun", 12),bg='black',fg='orange',wrap='word')
response_field.place(x=0, y=50,width=800,height=450)# 创建按钮,用于发送输入文本到OpenAI API
def send_input():# 获取输入文本input_text = input_field.get("1.0",'end')response_field.insert(tk.END, '\n\nYou:' + input_text)# 调用OpenAI API,获取回复文本response = openai.Completion.create(# 模型名称model='text-davinci-003',# 用户提供的输入文本,用于指导GPT输出prompt=input_text,# 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。temperature=0,# 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整max_tokens=1500,# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性frequency_penalty=0.2,# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性presence_penalty=0.15,)# 显示回复文本到GUI界面上的文本框中result = response['choices'][0]['text'].strip()response_field.insert(tk.END,'GPT-3:'+ result)send_button = tk.Button(root, font=("SimSun", 12),text="发送", command=send_input,bg='#FCC09C')
send_button.place(x=700, y=0,width=100,height=50)# 运行tkinter GUI应用程序
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66640.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞彩足球比分的概率chatGpt用泊松分布模型推算方法准确的计算分析出来

引言&#xff1a; 足球是世界上最受欢迎的体育运动之一&#xff0c;而竞彩足球成为了足球迷们热衷参与的一种形式。在竞彩足球中&#xff0c;预测比分是一项具有挑战性的任务。然而&#xff0c;通过人工分析比赛数据来预测足球比分需要耗费大量时间和精力。近年来&#xff0c;随…

软件对人们生活的改变的好处和坏处

软件工程对人们生活的改变 在我们的生活中&#xff0c;我们随处可见的都是信息化&#xff0c;在我国各行各业都离不开计算机软件的支持&#xff0c;软件为企业的管理带来了极大的帮助&#xff0c;提高了企业的收益&#xff0c;减少了人力、物力、财力的消耗&#xff0c;软件也为…

latex格式的英文文章中引用的中文参考文献在BIBTEX中的格式是如何的

查找了很多如何在bibtex中引用中文的参考文献&#xff0c;找到的总是bibtex如何在latex中的添加或者是显示&#xff0c;但是到底在bib文件中是如何写的呢&#xff1f; 中文文献在英文文献中引用首先就需要把它翻译成英文&#xff0c;而中文文献里都有英文标题&#xff0c;姓名…

参考文献去哪里查找,参考文献标准格式是什么

1、参考文献类型&#xff1a; 普通图书[M]、期刊文章[J]、报纸文章[N]、论文集[C]、学位论 文[D]、报告[R]、标准[s]、专利[P]、数据库[DB]、计算机程序[CP]、电 子公告[EB]、联机网络[OL]、网上期刊[J&#xff0f;OL]、网上电子公告[EB&#xff0f;OL]、其他未 说明文献[z]。…

Latex投稿Elsevier后被要求修改格式(五)如何合并多个参考文献

我才意外发现&#xff0c;之前写的latex代码一直未涉及到合并多个参考文献的问题&#xff0c;果然实践出真知&#xff0c;不断学习不断更新。 由于引用文献过多导致文章显得十分冗长与累赘&#xff0c;因此试图将参考文献合并&#xff0c;寻找相关代码普遍建议使用cite宏包&am…

Latex同时引用多篇文献修改字体/表格/图片/参考文献颜色

1、引用多篇参考文献 在yourpaper.tex上导入包cite&#xff0c;上面加上一行&#xff1a;\usepackage{cite} 然后在yourReference.bib文件加上参考文献 在yourpaper.tex上同时引用&#xff0c;方式如下&#xff1a; \cite{Ref2,Ref3,Ref4}2、修改字体/表格/图片颜色&#xf…

如何快速调整参考文献格式

1.查找文献并引用 可在百度学术网站输入关键字&#xff08;例如“绿波”&#xff09;查找文献&#xff0c;时间一般选择“近三年”&#xff0c;点击“批量引用”。 点击右下角的小红点&#xff0c;文献以列表显示&#xff0c;文献导出格式一般选择“GB/T 7714” &#xff0c;全…

字数超出显示...,鼠标划过显示完整内容

在微信公众号上看到这篇纯css实现多行文字截断&#xff0c;本来想在项目中练习使用一下&#xff0c;发现效果不太好&#xff0c;所以项目中还是使用了单行文本截断&#xff0c;下面是实现单行超出宽度&#xff0c;然后使用...显示的代码 .courseTitle{white-space: nowrap;text…

小程序textarea文本域字数控制---并显示已输入字数

有时候我们在写项目的时候&#xff0c;用到input或者textarea的时候&#xff0c;可能需要对输入的字数进行一个限制和显示&#xff0c;效果图如下&#xff1a; 输入文字后的效果图是这样的&#xff1a; 下面闲话少说 把这个小功能分享给大家&#xff0c;先是wxml&#xff1a;…

微信小程序 解决 view 文字 过多 溢出的问题,超过行数后隐藏显示省略号

单行 显示&#xff1a; overflow:hidden; //超出一行文字自动隐藏text-overflow:ellipsis;//文字隐藏后添加省略号white-space:nowrap; //强制不换行 显示多行文字&#xff0c;但不显示完全&#xff1a; display: -webkit-box;word-break: break-all;text-overflow: ellipsis…

Android TextView 显示字数的限制问题

Android TextView 显示字数的限制问题 —2021/06/07 今天写课设的时候碰到安卓的TextView字体超出了&#xff0c;本身的限制。csdn找了一下怎么解决这个问题。 未解决之前的 解决之后的 TextView中有个ellipsize属性,作用是当文字过长时,该控件该如何显示,解释如下: 1.androi…

Qt应用程序文字显示不全

用Qt写了一个模拟购票系统&#xff0c;在自己电脑&#xff08;Windows10,分辨率&#xff1a;1366*768&#xff09;上运行界面正常。当在别人电脑&#xff08;windows7、windows10&#xff0c;分辨率都为&#xff1a;1920*1080&#xff09;上运行时就出现了一些文字被遮挡覆盖的…

Prompt 用法大全!让 ChatGPT 更智能的六种策略(下)

上两篇介绍了 Pormpt 用法大全中前四种策略&#xff0c;本篇继续讲解后两种策略。‍‍‍‍‍ 点燃创作灵感&#xff1a;Prompt 实践指南揭秘&#xff01;让 ChatGPT 更智能的六种策略&#xff08;上&#xff09; Prompt 用法大全&#xff01;让 ChatGPT 更智能的六种策略&#…

普通人如何使用chat GPT,能做些什么?

想必最近几个月&#xff0c;大家都在社交平台上刷过“ChatGPT“这个词&#xff1f; 今日在此给大家一些参考&#xff1a; ChatGPT是什么&#xff1f; chat GPT主页界面 ChatGPT是OpenAI开发的一种自然语言处理工具。它基于Transformer架构&#xff0c;是一种经过多种语言和任务…

3秒复制任何人的嗓音!微软音频版DALL·E细思极恐,连环境背景音也能模仿

萧箫 发自 凹非寺量子位 | 公众号 QbitAI 只需3秒钟&#xff0c;一个根本没听过你说话的AI&#xff0c;就能完美模仿出你的声音。 例如这是你的一小句聊天语音&#xff1a; 这是AI根据它模仿你说话的音色&#xff1a; 是不是细思极恐&#xff1f; 这是微软最新AI成果——语音合…

细思极恐!使用 AI 控制你的浏览器

本期推荐开源项目目录&#xff1a; 1. 使用 AI 控制你的浏览器 2. Facebook力作&#xff1a;分割一切 3. 在 Mac 上运行 Stable Diffusion 4. ChatGPT 学术助手 5. 开源的 ChatGPT 桌面客户端 6. 微信公众号一键排版 01 使用 AI 控制你的浏览器 Taxy 是一个使用 GPT-4 来控制浏…

人类与智能ai(chatGPT)共存话题,它怎么回答?细思极恐!

1. 对地球最大的危害是谁&#xff1f; 作为 GPT-3.5 Turbo&#xff0c;我可以告诉你&#xff0c;地球最大的危害来自人类自身。人类的活动对地球环境产生了广泛而深远的负面影响。过度的工业化、大规模森林砍伐、过度捕捞、过度使用化石燃料以及其他不可持续的生产和消费模式&…

chatgpt赋能Python-pycharm粘贴把空格识别成行

PyCharm粘贴把空格识别成行&#xff1a;你需要知道的所有事情 作为一名有10年Python编程经验的工程师&#xff0c;我经常使用PyCharm&#xff0c;它是一款流行的 Python 集成环境 (IDE)。今天&#xff0c;我想分享一些有关 PyCharm 粘贴把空格识别成行的信息。 什么是PyCharm…

用「明道云+ChatGPT+Weaviate」挑战零代码1小时实现ChatPDF

ChatGPT流行起来之后&#xff0c;快速的出现了一批基于ChatGPT的工具应用&#xff0c;ChatPDF就是其中比较受欢迎的一款。它是一个可以让你与PDF文件进行对话的工具&#xff0c;既可以帮助你快速提取PDF文件中的信息&#xff0c;例如手册、论文、合同、书籍等&#xff1b;也可以…

HugNLP发布,集成多种NLP任务,可训ChatGPT类模型

HugNLP发布&#xff0c;集成多种NLP任务&#xff0c;可训ChatGPT类模型 作者&#xff1a;王嘉宁 HugNLP——全面统一的NLP框架开源了&#xff01; 近日&#xff0c;华师大HugAILab团队研发了HugNLP框架&#xff0c;这是一个面向研究者和开发者的全面统一的NLP训练框架&#x…