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

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

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

前提条件

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

第一步 - 设置环境

在这一步中,你将设置环境,以便在运行 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 云服务

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐