新手向教学,分分钟搭建个人定制化的 ChatgptGPT 聊天机器人

news2024/11/25 22:40:02

对话机器人变得越来越流行,它为用户提供了与技术互动的方式。OpenAI 的“GPT”模型让开发者能够创建复杂的对话机器人。

在本教程中,我们将使用 Python 和 OpenAI API 在运行 Ubuntu 的 DigitalOcean Droplet 上构建并部署你自己的终端 ChatGPT 机器人。

在本教程结束时,你将拥有一个功能齐全的 GPT 机器人,可以直接从终端处理用户需求,提供实时互动的用户体验。无论你是经验丰富的开发者还是初学者,本教程都将帮助你掌握在项目中利用 ChatGPT 的能力,并构建你自己的定制 AI 机器人。

前提条件

在开始实现之前,确保你具备以下条件:

  • 一个至少有 4GB RAM 和 2 个 CPU 的云服务器,这里我们用的是 DigitalOcean 的 Droplet云主机(新手注册即可有 200 美金免费额度,服务器最低 4 美元/月),而且中国地区的企业客户还可以通过 DigitalOcean 中国区独家战略合作伙伴卓普云寻求技术支持。如果是 Ubuntu 服务器,请按照 Ubuntu 的初始服务器设置说明进行设置。
  • 在你的 Ubuntu Droplet 上安装 Python 3.7 或更高版本。按照安装 Python 的说明在你的 Droplet 上安装 Python。
  • 基本的 Python 编程知识。
  • 一个具有 ChatGPT API 访问权限的 OpenAI 账户。

第一步 - 设置环境

在这一步中,你将设置环境,以便在运行 Ubuntu 的 DigitalOcean Droplet 上构建并部署你的 ChatGPT 终端机器人。

创建 DigitalOcean Droplet

  1. 登录你的 DigitalOcean 账户。
  2. 进入 Droplets 部分。
  3. 点击“Create Droplet”。
  4. 选择 Ubuntu 操作系统(建议使用最新的 LTS 版本)。
  5. 根据你的需求选择合适的计划。
  6. 选择数据中心区域。
  7. 添加你的 SSH 密钥以确保安全访问。
  8. 点击“Create Droplet”。

连接到你的 Droplet

在本地计算机上打开终端,使用以下命令,替换 <your_droplet_ip> 为你的 Droplet 的 IP 地址:

ssh root@<your_droplet_ip>

设置 Python 环境

运行以下命令以确保系统是最新的:

sudo apt update
sudo apt upgrade

使用以下命令安装 Python 和 pip:

sudo apt install python3 python3-pip

使用以下命令安装 virtualenv 来创建隔离的 Python 环境:

sudo pip3 install virtualenv

进入你想要的目录并创建一个项目文件夹:

mkdir my_chatgpt_bot
cd my_chatgpt_bot

创建并激活虚拟环境:

virtualenv venv
source venv/bin/activate

安装所需的 Python 包

安装 openai 包及其他依赖项:

pip install openai

配置 OpenAI API 密钥

首先,获取你的 OpenAI API 密钥。

  1. 注册或登录你的 OpenAI 账户。
  2. 前往 API 部分获取你的 API 密钥。

现在设置环境变量:

打开 .bashrc.bash_profile 文件并添加:

export OPENAI_API_KEY='your-api-key-here'

重新加载环境变量:

source ~/.bashrc

确认你已经设置了环境变量,使用以下命令从终端确认:

echo $OPENAI_API_KEY

设置好环境后,你就可以开始开发你的 ChatGPT 机器人了。在下一步中,我们将编写机器人的代码,处理用户查询并与 OpenAI API 交互。

第二步 - 构建 ChatGPT 机器人

现在我们已经设置好了环境,让我们开始构建 ChatGPT 机器人。你将使用 gpt-turbo-3.5 模型。

这里你将使用三个关键库——openai、textract 和 glob 来实现这个项目。

OpenAI 是一家领先的人工智能研究组织,它开发了 ChatGPT API,允许我们与强大的 ChatGPT 模型交互。通过 OpenAI API,你可以发送提示并接收来自 ChatGPT 模型的响应,能够创建对话式聊天机器人。你可以在这里了解更多关于 OpenAI 及其产品的信息。

第二个库 textract 是一个 Python 库包,提供从各种文件格式中提取文本的功能。它支持广泛的文件格式,包括但不限于:

  • 文本格式:TXT、CSV、JSON、XML、HTML、Markdown 和 LaTeX。
  • 文档格式:DOC、DOCX、XLS、XLSX、PPT、PPTX、ODT 和 ODS。
  • 电子书格式:EPUB、MOBI、AZW 和 FB2。
  • 嵌入文本的图像格式:JPG、PNG、BMP、GIF、TIFF 和 PDF(包括可搜索和扫描的 PDF)。
  • 编程源代码文件:Python、C、C++、Java、JavaScript、PHP、Ruby 等。

glob 是 Python 中的一个内置模块,它提供了一种方便的方法来使用模式匹配搜索文件和目录。它允许你找到符合指定模式的文件,例如所有具有特定扩展名或命名模式的文件。你还将使用终端机器人基于我们在本地系统内的 /data 目录中提供的数据来提供答案。

接下来,让我们安装 textract Python 库,因为它并不是预装的:

pip install textract

现在创建一个名为 mygptbot.py 的新文件,并复制粘贴以下代码:

vi mygptbot.py

mygptbot.py

import os
import glob
import openai
import textract

class Chatbot:
    def __init__(self):
        self.openai_api_key = os.getenv("OPENAI_API_KEY")
        self.chat_history = []

    def append_to_chat_history(self, message):
        self.chat_history.append(message)

    def read_personal_file(self, file_path):
        try:
            text = textract.process(file_path).decode("utf-8")
            return text
        except Exception as e:
            print(f"Error reading file {file_path}: {e}")
            return ""

    def collect_user_data(self):
        data_directory = "./data"
        data_files = glob.glob(os.path.join(data_directory, "*.*"))

        user_data = ""
        for file in data_files:
            file_extension = os.path.splitext(file)[1].lower()
            if file_extension in (".pdf", ".docx", ".xlsx", ".xls"):
                user_data += self.read_personal_file(file)
            else:
                with open(file, "r", encoding="utf-8") as f:
                    user_data += f.read() + "\n"
        return user_data

    def create_chat_response(self, message):
        self.append_to_chat_history(message)

        user_data = self.collect_user_data()
        messages = [
            {"role": "system", "content": "You are the most helpful assistant."},
            {"role": "user", "content": message},
            {"role": "assistant", "content": message},
        ]

        if user_data:
            messages.append({"role": "user", "content": user_data})

        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=messages,
            temperature=0.7,
            max_tokens=256,
            top_p=0.9,
            n=2,
            stop=None,
            frequency_penalty=0.9,
            presence_penalty=0.9
        )

        self.append_to_chat_history(response.choices[0].message.content.strip())
        return response.choices[0].message.content.strip()

    def start_chatting(self):
        while True:
            user_input = input("User: ")
            if user_input.lower() == "exit":
                print("Chatbot: Goodbye boss, have a wonderful day ahead!")
                break
            bot_response = self.create_chat_response(user_input)
            print("Chatbot:", bot_response)

chatbot = Chatbot()
chatbot.start_chatting()

首先,模型的参数简要说明如下:

  • 温度 (Temperature):控制响应的随机性。较高的值(例如 1.0)使输出更具多样性,而较低的值(例如 0.2)使输出更加集中和确定。
  • 最大令牌 (Max Tokens):限制模型生成响应的长度。
  • Top P:指定选择下一个令牌的累积概率阈值。较高的值(例如 0.9)会使响应更加集中。
  • N:此变量决定了模型生成的不同响应的数量,有助于探索不同的可能性。
  • 停止 (Stop):允许我们指定一个停止短语,以指示响应结束。
  • 频率惩罚 (Frequency Penalty):控制模型重复相同响应的可能性。
  • 存在惩罚 (Presence Penalty):控制模型在对话中使用未提及过的词汇的可能性。

其次,以上定义的函数作用如下:

  • append_to_chat_history(message):这个函数将用户的消息追加到存储在 chat_history 列表中的聊天记录中。
  • read_personal_file(file_path):这个函数使用 textract 库从个人文件中提取文本,并尝试使用 UTF-8 编码对提取的文本进行解码。如果在提取过程中出现任何错误,将显示错误信息。
  • collect_user_data():这个函数收集存储在当前工作目录中的 “/data” 目录中的用户数据。它遍历该目录中的文件,判断它们的文件类型,并使用适当的方法提取文本。它返回合并后的用户数据字符串。函数 glob.glob(os.path.join(data_directory, ".*")) 用于检索与指定模式匹配的文件路径列表。在这种情况下,.* 会找到所有扩展名的文件。
  • create_chat_response(message):这个函数使用 OpenAI 的 ChatCompletion API 构建聊天响应。它将用户消息和收集到的用户数据(如果有)添加到消息列表中。然后使用提供的消息进行 API 调用,并将响应存储在 response 变量中。函数随后将响应追加到聊天记录中并返回该响应。
  • start_chatting():这个函数启动与用户的交互式聊天会话。它提示用户输入,使用 create_chat_response() 生成机器人的响应,并打印该响应。对话会一直持续,直到用户输入 “exit” 以退出为止。

最终,while True 循环会不断提示用户输入。要退出聊天机器人,输入 "exit" 即可。

第三步 - 在你的终端运行 GPT 机器人

你需要打开 Droplet 的控制台,然后执行 Python 文件。在 Droplet 的控制台中运行以下命令:

python chatGPTbot.py

运行 ChatGPT 机器人

这就是你如何轻松与 ChatGPT 机器人进行交互,使用它进行多任务处理、提问等更多操作的方式。

现在你的个人 ChatGPT 机器人已经准备好与您对话了。通过输入消息与它互动,机器人将根据输入进行回应。当你完成后,输入 "exit" 以结束对话。

结论

通过这篇教程,你已经学习了如何使用 Python 在 Ubuntu 机器上创建并部署一个强大的 ChatGPT 机器人。提供的代码允许你的机器人考虑并使用来自各种文件格式的用户数据,从而提供更加个性化的用户体验。你可以将它集成到其他平台,或者构建基于 Web 的聊天机器人。

如果你需要了解 DigitalOcean 的云服务产品可以访问 DigitalOcean 英文官网,或访问 DigitalOcean 中国区独家战略合作伙伴卓普云的官网。如果你希望训练自己的 AI 模型,欢迎了解 DigitalOcean 的 H100 GPU 云服务。

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

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

相关文章

基于SpringBoot+Vue+MySQL的校园食堂订餐

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的飞速发展和互联网的普及&#xff0c;传统校园食堂的运作模式已难以满足现代学生日益增长的便捷性、个性化需求。学生们希望能够在忙碌的学习生活中&#xff0c;通过更加高效、便捷的方式完成就餐选择&#xff0c;…

【算法篇】数组类(笔记)

目录 一、二分查找 1. 方法一 2. 方法二 二、移除元素 1. 暴力破解 2. 双指针法 三、有序数组的平方 双指针法 四、长度最小的子数组 1. 暴力破解 2. 滑动窗口 五、螺旋矩阵 II 一、二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09;https://leet…

深入理解Java虚拟机:Jvm总结-虚拟机字节码执行引擎

第八章 虚拟机字节码执行引擎 8.1 意义 不受物理条件制约地定制指令集与执行引擎的结构体系&#xff0c;能够执行那些不被硬件直接支持的指令集格式。输入的是字节码二进制流&#xff0c;处理过程是字节码解析执行的等效过程&#xff0c;输出的是执行结果 8.2 运行时栈帧结构…

jupyter出错ImportError: cannot import name ‘np_utils‘ from ‘keras.utils‘ ,怎么解决?

文章前言 此篇文章主要是记录一下我遇到的问题以及我是如何解决的&#xff0c;希望下次遇到类似问题可以很快解决。此外&#xff0c;也希望能帮助到大家。 遇到的问题 出错&#xff1a;ImportError: cannot import name np_utils from keras.utils &#xff0c;如图&#xf…

Metasploit Pro 4.22.3-2024081901 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.3-2024081901 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, release Aug 19, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/metasploit-pro-4/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页…

SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃

近日&#xff0c;有黑客利用 SonicWall SonicOS 防火墙设备中的一个关键安全漏洞入侵受害者的网络。 这个不当访问控制漏洞被追踪为 CVE-2024-40766&#xff0c;影响到第 5 代、第 6 代和第 7 代防火墙。SonicWall于8月22日对其进行了修补&#xff0c;并警告称其只影响防火墙的…

代码随想录27期|Python|Day51|​动态规划|​115.不同的子序列|​583. 两个字符串的删除操作​|72. 编辑距离

115. 不同的子序列 本题是在原来匹配子序列的基础上增加了统计所匹配的子序列个数&#xff0c;也就是dp数组的定义和更新公式和原来的有所区别。 1、dp数组的定义 dp[i][j]表示以i-1和j-1为末尾的字符串中&#xff0c;给定字符串s包含目标字符串t的个数。注意这里不是长度。…

vs2019成功连接数据库mysql

②在vs2019中创建新项目&#xff0c;注意x64 ③ 右击项目打开属性 ④添加include路径 ⑤添加lib路径 点击确定后点击应用 ⑥ 点击全部确定 ⑦ ⑧启动mysql 进入数据库&#xff1a; 在数据库中创建student的表 ⑨在va2019中输入下面代码测试 注意&#xff1a;密码换成自己…

大数据Flink(一百一十六):Flink SQL的时间属性

文章目录 Flink SQL的时间属性 一、Flink 三种时间属性简介 二、Flink 三种时间属性的应用场景 三、​​​​​​​SQL 指定时间属性的两种方式 四、​​​​​​​​​​​​​​SQL 处理时间DDL定义 五、​​​​​​​​​​​​​​SQL 事件时间DDL定义 Flink SQL的时…

Nature子刊|C4平台助力单细胞多组学分析,揭秘睾丸生殖细胞瘤的分子特征

在精准医疗的大潮中&#xff0c;单细胞多组学技术正成为研究肿瘤微环境的强有力工具。最近&#xff0c;一项发表在《Nature Communications》的重磅研究&#xff0c;就利用了包括DNBelab C Series在内的平台设备&#xff0c;对睾丸生殖细胞瘤&#xff08;Seminoma&#xff09;进…

矩阵分析 学习笔记3 多项式矩阵 jordan标准型

就是说这个矩阵里面的各个元素都是多项式&#xff0c;多项式的主角是类目大&#xff08;自变量&#xff09;。 多项式矩阵的秩是啥呢&#xff1f; 0多项式就是完全0的那种&#xff0c;就一个0&#xff0c;类目大都没有了。 多项式矩阵的秩和带一个类目大进去变成普通矩阵的秩不…

最大间距问题

LeetCode164 最大间距 基数排序 #include <iostream> #include <vector> using namespace std;class Solution { public:int maximumGap(vector<int>& nums) {int nnums.size();if(n<2) return 0;int exp1;int Maxnums[0];vector<int> buf(n)…

WD mybook10T硬盘exfat变0字节恢复方法

WD的mybook系列应该全部是3.5寸台式机机械硬盘然后加了盒子做成了移动存储&#xff0c;单盘容量已经极高了&#xff0c;此类盘出厂的文件系统一般为exfat&#xff08;可能是厂商为了方便mac客户使用&#xff09;。下边这个案例就是我们经常遇到的exfat变0字节。 故障存储:WD m…

用网卡的ap模式抓嵌入式设备的网络包

嵌入式设备不像pc上&#xff0c;有一些专门的工具比如wareshark来抓包&#xff0c;嵌入式设备中&#xff0c;有的可能集成了tcpdump&#xff0c;可以用来进行简单的抓包&#xff0c;但是不方便分析&#xff0c;况且有的嵌入式设备不一定就集成了tcpdump工具。 关于tcpdump工具…

[001-03-007].第07节:Redis中的事务

我的后端学习大纲 我的Redis学习大纲 1、Redis事务是什么&#xff1a; 1.可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c; 按顺序地串行化执行而不会被其他命令插入&#xff0c;不许加塞2.一个队列中&#xff0c;一次性、…

AI+RPA机器人 实现自动调用 kimi 的 AI 对话功能(内附使用教程)

前言 今天尝试写一个用RPA自动调用kimi的AI对话功能。 把这个写好之后&#xff0c;就是后面其他一切AI相关的基础&#xff0c;比如自动用AI写文章啊&#xff0c;比如搭建一个微信AI机器人啊等等&#xff0c; 都能用到今天实现的AI对话功能。 话不多说&#xff0c;直接看思路…

在 Windows 中使用系统文件检查器

DiSM.exe /Online /Cleanup-image /Restorehealth

项目管理方法,方法和框架–初学者指南

项目管理方法&#xff0c;方法和框架–初学者指南 项目可以通过各种方式成功结束。但是&#xff0c;最好&#xff0c;最受欢迎的项目管理方法&#xff0c;方法和框架总是在变化。新概念无时无刻不在出现。所有成功的项目都包含一整套方法&#xff0c;工具和技术。实际上&#x…

基于SpringBoot+Vue+MySQL的考研互助交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot、Vue.js和MySQL的考研互助交流平台。该平台旨在为广大考研学子提供一个集资源共享、学习交流、经验分享、心理辅导等功能于一体的综合性在线社区。通过SpringBoot构建高效稳定的后端服务&am…

Whistle 客户端抓包工具

Whistle 客户端 安装或更新 官网&#xff1a; 关于whistle GitBook (wproxy.org)https://wproxy.org/whistle/ Whistle 客户端目前只支持 Mac 和 Windows 系统&#xff0c;如果需要在 Linux、 Docker、服务端等其它环境使用&#xff0c;可以用命令行版本&#xff1a;GitHub…