我用python/C++调用ChatGPT自制了一个聊天机器人

news2024/11/14 0:41:26

目录

  • 1 ChatGPT完整版
  • 2 Python/C++调用ChatGPT
    • 2.1 获取API秘钥
    • 2.2 测试API功能
    • 2.3 设计简单UI
  • 3 聊天问答

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)有各种各样的看法

在这里插入图片描述
可以看到回答得还是挺有水准的,大家可以进行进一步的测试~


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatGPT都可以干什么呢?来一睹风采 (送账号)

文章目录1. 写代码2. 写文案3. 写剧本4. 写歌诗5. 写报告6. 查公式7. 写对联8. 写文章9. 做表格10. 做计划11. 等等1. 写代码 2. 写文案 3. 写剧本 4. 写歌诗 5. 写报告 这妥妥的翻译文,数据完全不对。 6. 查公式 傅里叶变换的时域性质有如下几点: 对…

JAVA集合专题4 —— Map

目录Map接口实现类的特点Map接口的常见方法Map六大遍历方式Map练习1code编程练习2code编程练习3思路codeMap接口实现类的特点 Map与Collection并列存在,是Map集合体系的顶级接口Map的有些子实现存储数据是有序的(LinkedHashMap),有些子实现存储数据是无…

【量化交易】 量化因子 动量类因子

量化因子 - 风险类因子计算 5日乖离率 BIAS5 (收盘价-收盘价的N日简单平均)/ 收盘价的N日简单平均*100,在此n取5 60日变动速率(Price Rate of Change) ROC60 ①AX今天的收盘价—20天前的收盘价 ②BX60天前的收盘价 ③…

React-Router

版本5安装:npmnpm install react-router-dom5 -Syarnyarn add react-router-dom5import ReactDOM from "react-dom/client";// react router适用于web和原生项目,我们在web项目中使用,所以需要引入的包是react-router-dom import {…

Idea 安装 Sonar 插件提升代码质量

目录 0. 环境说明 1. Sonar 简介 2. IDEA 配置 Sonar 0. 环境说明 Java 1.8IDEA 2022.3.1SonarLint 7.4.0 1. Sonar 简介 在多人协通的软件开发过程中,代码风格和代码质量对于软件的整体交付是十分关键的。这时我们可以利用 Sonar 插件,对代码进行扫描…

Spring MVC注解Controller源码流程解析--HandlerAdapter执行流程--上

Spring MVC注解Controller源码流程解析--HandlerAdapter执行流程--上引言RequestMappingHandlerAdapter方法参数解析器方法参数名解析器类型转换体系简单的使用演示数据绑定器工厂定制化修改DataBinder获取泛型参数ControllerAdvice与InitBinder注解控制器方法执行流程Controll…

C语言(可变参数:stdarg.h)

目录 一.使用可变参数 1.提供一个使用省略号的函数原型 2.在函数定义中创建一个va_list类型的变量 3.用宏把该变量初始化为一个参数列表 4.用宏访问参数列表 5.使用宏完成清理工作 二.va_copy 三.实例 一.使用可变参数 该头文件提供类似接受可变数量参数的宏&#xf…

【招聘】永善县正向社会工作服务中心招聘2名工作人员

永善县正向社会工作服务中心面向社会公开招聘2名工作人员 永善县正向社会工作服务中心是2019年9月在永善县民政局注册登记成立的民办非企业单位。业务范围主要为:面向社会提供各类专业社工服务,开展活动策划、个案援助等社会服务项目;承接个人…

基于WEB的小型公司人事管理系统设计

技术:Java、JSP等摘要:随着当代各类企业公司员工数量越来越多、分工越来越细化、各行各业之间的联系越发密切,对人事管理的要求也不断提高。实现企业人事管理计算机化,毫无疑问会让企业的人事管理变得更加高效化和智能化。企业要生…

c/c++开发,无可避免的函数参数实践

一、函数参数表 函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参,在一对圆括号中声明,形参与形参之间以逗号分隔。每一个函数都有一个相关联的返回类型。 int setval(int val) {//函数体 }; 这里,定义了一个名…

Vulkan教程(14): Graphics pipeline之Fixed functions(固定管线功能)

Vulkan官方英文原文:https://vulkan-tutorial.com/Drawing_a_triangle/Graphics_pipeline_basics/Fixed_functions对应的Vulkan技术规格说明书版本: Vulkan 1.3.2The older graphics APIs provided default state for most of the stages of the graphic…

个人如何获得免费的VMware Fusion Player?在macOS上虚拟化系统

不管是开发还是测试,有时候都需要虚拟机。比如虚拟化一台Linux,部署Web服务进行服务器仿真操作。亦或者,macOS上虚拟化Windows,进行Windows环境模拟。 VMware这家公司,大家应该都比较熟悉。旗下的VMware Workstation在…

LabVIEW NI网络设备在MAX中不显示或未识别

LabVIEW NI网络设备在MAX中不显示或未识别有一个NI设备通过网络连接到主机。发生以下情况之一:尝试在Measurement&AutomationExplorer(MAX)中配置设备。设备未显示在“远程系统”下。NIMAX中未检测到CompactRIO(cRIO&a…

2D图像处理:2D Shape_Base_Matching_缩放_旋转_ICP_显示ROI

文章目录 调试结果参考调试说明问题0:并行运行问题问题1:模板+Mask大小问题问题2:组合缩放和旋转问题3:可以直接将计算边缘的代码删除问题4:如何在原始图像上显示匹配到的ROI问题5:计算的原始旋转角度不需要判断,直接可以在ICP中使用问题6:绘制坐标轴问题7:绘制ROI调试…

图像优化篇

目录(1)矢量图(2)位图 2.1 分辨率2,图像格式格式选择建议:(1)矢量图 被定义为一个对象,包括颜色,大小,形状,以及屏幕位置等属性&…

Netty实现Http服务器案例

功能:Netty服务器在6668端口监听,浏览器发出请求"http://localhost:6668"服务器可以恢复消息给浏览器:“hello,我是服务器”,并对特定请求资源进行过滤目的:Netty可以做服务器端开发,…

家政服务小程序实战教程07-轮播图组件

小程序中首页一般显示轮播图的功能,点击轮播图会跳转到具体的一篇文章或者是产品,本篇我们就介绍一下轮播图功能的开发 01 设计数据源 我们轮播图组件需要两个字段,一个是展示的图片,一个是跳转页面传入的参数。打开数据源&…

JAVA集合专题5 ——ArrayDeque + BlockingQueue

目录ArrayDeque的特点BlockingQueue什么是BlockingQueue?什么叫阻塞队列?阻塞队列的应用场景是什么?BlockingQueue的阻塞方法是什么?BlockingQueue的四类方法codecode2ArrayDeque的特点 ArrayDeque是Deque接口子实现ArrayDeque数据结构可以表示为: 队列、双端队列、栈Arra…

【MFC】工具条(16)

创建工具条的基本步骤是: 1.创建工具条资源。 2.构建一个CToolBar对象。 3.调用CToolBar::Create函数创建工具条窗口。 4.调用CToolBar::LoadToolBar载入工具条资源。 使用工具条 打开资源视图,可视化创建或者修改工具条: 其中ID项一般与菜…

【计组】硬盘--《深入浅出计算机组成原理》(十二)

目录 一、机械硬盘 二、SSD硬盘 (一)SSD硬盘的读写原理 1、SLC、MLC、TLC 和 QLC 2、P/E 擦写问题 (二)SSD 读写的生命周期 (三)磨损均衡、TRIM 和写入放大效应 1、FTL 和磨损均衡 2、TRIM 指令的…