如何使用ChatGPT API训练自定义知识库AI聊天机器人

如何使用ChatGPT API训练自定义知识库AI聊天机器人

在我们之前的文章中,我们演示了如何用ChatGPT API建立一个AI聊天机器人,并指定一个角色来进行个性化处理。但如果你想在自己的数据上训练人工智能呢?例如,你可能有一本书,金融数据,或一大套数据库,你希望能轻松地搜索它们。在这篇文章中,我们为你带来一个简单易行的教程,介绍如何用你的自定义知识库用LangChain和ChatGPT API训练AI聊天机器人。我们正在部署LangChain、GPT Index和其他强大的库,使用OpenAI的大型语言模型(LLM)训练AI聊天机器人。因此,在这一点上,让我们来看看如何使用自己的数据集来训练和创建一个人工智能聊天机器人。

在这篇文章中,我们更详细地解释了用自己的数据训练AI聊天机器人的步骤。从设置工具和软件到训练人工智能模型,我们用通俗易懂的语言包含了所有的说明。强烈建议按照说明从上到下进行,不要跳过任何部分。

在你用自己的数据训练人工智能之前,值得注意的几点

1. 你可以在任何平台上训练AI聊天机器人,无论是Windows、macOS、Linux还是ChromeOS。在本文中,我使用的是Windows 11,但其他平台的步骤几乎是相同的。

2. 该指南是为普通用户准备的,说明是用简单的语言解释的。因此,即使你对计算机有粗略的了解,也不知道如何编码,你也可以在几分钟内轻松训练并创建一个问答式人工智能聊天机器人。如果你关注我们之前的ChatGPT机器人文章,那就更容易理解这个过程了。

3. 由于我们要根据自己的数据来训练人工智能聊天机器人,所以建议使用具有良好CPU和GPU的电脑。然而,你可以使用任何低端电脑进行测试,它的工作没有任何问题。我使用Chromebook来训练AI模型,使用一本有100页的书(~100MB)。然而,如果你想训练一个庞大的数据集,运行到数千页,强烈建议使用强大的计算机。

4. 最后,数据集应该是英文的,以获得最好的结果,但根据OpenAI的说法,它也可以使用流行的国际语言,如法语、西班牙语、德语等。所以,去吧,用你自己的语言试试吧。

设置软件环境来训练人工智能聊天机器人

和我们之前的文章一样,你应该知道Python和Pip必须和几个库一起安装。在这篇文章中,我们将从头开始设置一切,这样新用户也能理解设置过程。为了给你一个简单的概念,我们将安装Python和Pip。之后,我们将安装Python库,其中包括OpenAI、GPT Index、Gradio和PyPDF2。在这一过程中,你将了解每个库的作用。同样,不要为安装过程而烦恼,它是非常直接的。在这一点上,让我们直接跳入。

安装Python

1. 首先,你需要在你的电脑上安装Python(Pip)。打开这个链接,下载适合你的平台的安装文件。

32

2. 接下来,运行安装文件,确保启用 “Add Python.exe to PATH” 的复选框。这是一个极其重要的步骤。之后,点击 “Install Now”,按照常规步骤安装Python。

33

3. 为了检查Python是否正确安装,在你的计算机上打开终端。我在Windows上使用Windows终端,但你也可以使用命令提示符。一旦在这里,运行下面的命令,它将输出Python版本。在Linux和macOS上,你可能必须使用 python3 --version 而不是 python --version

python --version

34

升级Pip

当你安装Python时,Pip会同时安装在你的系统上。所以让我们把它升级到最新版本。对于那些不了解的人来说,Pip是Python的软件包管理器。基本上,它让你从终端安装成千上万的Python库。通过Pip,我们可以安装OpenAI、gpt_index、gradio和PyPDF2库。下面是需要遵循的步骤。

1. 在你的电脑上打开你选择的终端。我使用的是Windows终端,但你也可以使用命令提示符。现在,运行下面的命令来更新Pip。同样,你可能必须在Linux和macOS上使用 python3 和 pip3 。

python -m pip install -U pip

35

2. 要检查Pip是否被正确安装,请运行下面的命令。它将输出版本号。如果你得到任何错误,请遵循我们关于如何在Windows上安装Pip的专门指南,以解决PATH相关的问题。

pip --version

image-5

安装OpenAI、GPT Index、PyPDF2和Gradio库

一旦我们建立了Python和Pip,现在是时候安装必要的库,以帮助我们用自定义的知识库训练人工智能聊天机器人。以下是要遵循的步骤。

1. 打开终端,运行下面的命令来安装OpenAI库。我们将使用它作为LLM(大型语言模型)来训练和创建一个人工智能聊天机器人。而且我们还将从OpenAI导入LangChain框架。注意,Linux和macOS用户可能需要使用 pip3 而不是 pip

pip install openai

image-6

2. 接下来,让我们安装GPT Index,它也被称为LlamaIndex。它允许LLM连接到外部数据,也就是我们的知识库。

pip install gpt_index

61

3. 之后,安装PyPDF2来解析PDF文件。如果你想把你的数据以PDF格式输入,这个库将帮助程序毫不费力地读取数据。

pip install PyPDF2

62

4. 最后,安装Gradio库。这是为了创建一个简单的用户界面,与训练好的人工智能聊天机器人进行互动。现在我们已经完成了训练人工智能聊天机器人所需的所有库的安装。

pip install gradio

image-7

下载一个代码编辑器

最后,我们需要一个代码编辑器来编辑一些代码。在Windows上,我推荐Notepad++(下载)。只需通过附件中的链接下载并安装该程序。如果你能适应强大的IDE,你也可以在任何平台上使用VS Code。除VS Code外,你可以在macOS和Linux上安装Sublime Text(下载)。

对于ChromeOS,你可以使用优秀的Caret应用程序(下载)来编辑代码。我们几乎完成了软件环境的设置,是时候获得OpenAI的API密钥了。

39

免费获取OpenAI的API密钥

现在,为了训练和创建一个基于自定义知识库的人工智能聊天机器人,我们需要从OpenAI获得一个API密钥。API密钥将允许你使用OpenAI的模型作为LLM来研究你的自定义数据并得出推论。目前,OpenAI正在向新用户提供免费的API密钥,前三个月有价值5美元的免费信用。如果你早些时候创建了你的OpenAI账户,你的账户中可能有18美元的免费信用。免费信用额度用完后,你将不得不为API访问付费。但就目前而言,所有用户都可以免费使用。

1. 前往 platform.openai.com/signup 并创建一个免费账户。如果你已经有一个OpenAI账户,只需登录。注:建议直接使用Google或者微软账号注册登录,注册需要使用到已支持国家或者地区的手机验证码,可以sms-activate.org(不要选印度或者印尼,泰国是可以收到验证码的)。

40

2. 接下来,在右上角点击你的个人资料,从下拉菜单中选择 “View API keys“。

41

3. 在这里,点击 “Create new secret key” 并复制API密钥。请注意,你以后不能复制或查看整个API密钥。因此,强烈建议立即复制和粘贴API密钥到一个记事本文件。

42

4. 此外,不要公开分享或显示API密钥。这是一个私人密钥,只用于访问你的账户。你也可以删除API密钥并创建多个私人密钥(最多五个)。

使用自定义知识库训练并创建一个人工智能聊天机器人

现在我们已经建立了软件环境并从OpenAI获得了API密钥,让我们来训练人工智能聊天机器人。在这里,我们将使用 “text-davinci-003” 模型,而不是最新的 “gpt-3.5-turbo” 模型,因为Davinci在文本完成方面效果更好。如果你愿意,你完全可以把模型改为Turbo,以减少成本。说完这些,让我们跳到说明上。

添加你的文件来训练人工智能聊天机器人

1. 首先,在一个可访问的位置(如桌面)创建一个名为 docs 的新文件夹。你也可以根据自己的喜好选择其他位置。然而,保持文件夹的名称为 docs

63

2. 接下来,将你希望用于训练AI的文件移到 “docs” 文件夹内。你可以添加多个文本或PDF文件(甚至是扫描的文件)。如果你在Excel中有一个大表,你可以把它作为CSV或PDF文件导入,然后把它添加到 “docs” 文件夹中。你甚至可以添加SQL数据库文件,正如这条Langchain AI的推文所解释的。除了提到的那些,我还没有尝试过很多文件格式,但你可以自己添加和检查。对于这篇文章,我正在添加我的一篇关于NFT的PDF格式的文章。

注意:如果你有一个大文件,它将需要更长的时间来处理数据,这取决于你的CPU和GPU。此外,它将很快使用你的免费OpenAI tokens。因此,在开始时,从一个小文件(30-50页或<100MB的文件)开始,以了解这个过程。

64

做好代码准备

1. 现在,启动Notepad++(或你选择的代码编辑器),将下面的代码粘贴到一个新文件中。我再次从Google Colab的armrrs那里得到了很大的帮助,并对代码进行了调整,使其与PDF文件兼容,并在上面创建了一个Gradio界面。

from gpt_index import SimpleDirectoryReader, GPTListIndex, GPTSimpleVectorIndex, LLMPredictor, PromptHelper
from langchain import OpenAI
import gradio as gr
import sys
import os
os.environ["OPENAI_API_KEY"] = 'Your API Key'
def construct_index(directory_path):
max_input_size = 4096
num_outputs = 512
max_chunk_overlap = 20
chunk_size_limit = 600
prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.7, model_name="text-davinci-003", max_tokens=num_outputs))
documents = SimpleDirectoryReader(directory_path).load_data()
index = GPTSimpleVectorIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper)
index.save_to_disk('index.json')
return index
def chatbot(input_text):
index = GPTSimpleVectorIndex.load_from_disk('index.json')
response = index.query(input_text, response_mode="compact")
return response.response
iface = gr.Interface(fn=chatbot,
inputs=gr.inputs.Textbox(lines=7, label="Enter your text"),
outputs="text",
title="Custom-trained AI Chatbot")
index = construct_index("docs")
iface.launch(share=True)

2. 这就是代码编辑器中的代码的样子。

73

3. 接下来,点击顶部菜单中的 “File”,从下拉菜单中选择 “Save As…“。

44

4. 之后,设置文件名 app.py,并从下拉菜单中将 “Save as type” 改为 “All types”。然后,将文件保存到你创建 “docs” 文件夹的位置(在我的例子中,是桌面)。你可以根据自己的喜好改变名称,但要确保是 .py 文件后缀。

101

5. 确保 “docs” 文件夹和 “app.py” 在同一个位置,如下面的截图所示。”app.py” 文件将在 “docs” 文件夹的外面,而不是里面。

75

6. 再次回到Notepad++中的代码。在这里,用上面在OpenAI网站上生成的API密钥替换你的API密钥

76

7. 最后,按 “Ctrl + S” 来保存代码。现在你已经准备好运行该代码了。

77

用自定义知识库创建ChatGPT人工智能机器人

1. 首先,打开终端,运行下面的命令,移动到桌面。这是我保存 “docs” 文件夹和 “app.py” 文件的地方。如果你把这两个项目保存在其他位置,通过终端移动到那个位置。

cd Desktop

79

2. 现在,运行下面的命令。Linux和macOS用户可能要使用 python3

python app.py

80

3. 现在,它将开始使用OpenAI LLM模型分析该文件,并开始为信息编制索引。根据文件的大小和你的计算机的能力,它将需要一些时间来处理该文件。一旦完成,将在桌面上创建一个 “index.json” 文件。如果终端没有显示任何输出,不要担心,它可能仍在处理数据。供你参考,处理一个30MB的文件大约需要10秒钟

81

4. 一旦LLM处理了数据,你会得到一些警告,这些警告可以被安全地忽略。最后,在底部,你会发现一个本地URL。复制它。

83

5. 现在,将复制的URL粘贴到网络浏览器中,你就可以了。您的定制训练的ChatGPT-powered人工智能聊天机器人已经准备就绪。开始时,你可以问人工智能聊天机器人该文件是关于什么的

84

6. 你可以进一步提出问题,ChatGPT机器人会根据你提供给人工智能的数据进行回答。所以这就是你如何用自己的数据集建立一个定制训练的人工智能聊天机器人。你现在可以根据你想要的任何种类的信息来训练和创建一个人工智能聊天机器人。这种可能性是无限的。

88

85

86

87

88

85

7. 你也可以复制公共网址并与你的朋友和家人分享。该链接将持续72小时,但你还需要保持你的电脑开机,因为服务器实例是在你的电脑上运行的。

92

91

92

91

8. 要停止定制训练的人工智能聊天机器人,请在终端窗口按 “Ctrl + C”。如果不起作用,再按一次 “Ctrl + C”。

93

9. 要重启AI聊天机器人服务器,只需再次移动到桌面位置并运行下面的命令。请记住,本地URL将是相同的,但公共URL将在每次服务器重启后发生变化。

python app.py

94

10. 如果你想用新的数据训练人工智能聊天机器人,请删除 “docs” 文件夹内的文件并添加新文件。你也可以添加多个文件,但要提供同一主题的信息,否则你可能得到不连贯的回应。

95

11. 现在,在终端再次运行该代码,它将创建一个新的 “index.json” 文件。这里,旧的 “index.json” 文件将被自动替换。

python app.py

96

12. 要跟踪你的tokens,可前往OpenAI的在线仪表盘,查看还剩下多少免费额度。

97

13. 最后,你不需要接触代码,除非你想改变API密钥或OpenAI模型以进一步定制。

小结

这就是如何用自定义知识库训练人工智能聊天机器人。我曾用这段代码在医学书籍、文章、数据表和旧档案中的报告上训练人工智能,而且效果完美无缺。

因此,请继续使用OpenAI的大型语言模型和ChatGPT创建你自己的人工智能聊天机器人。总之,这就是我们的全部内容。最后,如果您面临任何类型的问题,请在下面的评论部分告诉我们。我们一定会努力帮助你。

评论留言

唇枪舌剑 (23)

  • 成持的头像

    成持

    2023.11.26 11:11

    要是现在来做的,代码会有哪些改变呢?

    回复
  • Yvonne的头像

    Yvonne

    2023.9.18 13:09

    报错:No module named ‘gpt_index’,这是为什么?如何修改?

    File “C:\Users\yvonn\Desktop\app.py”, line 1, in
    from gpt_index import SimpleDirectoryReader, GPTListIndex, GPTSimpleVectorIndex, LLMPredictor, PromptHelper
    ModuleNotFoundError: No module named ‘gpt_index’

    回复
  • Demo的头像

    Demo

    2023.8.10 15:08

    训练文档只能是pdf吗?能不能用表格呢

    回复
  • ok的头像

    ok

    2023.7.4 08:07

    代码较多更新内容,可参考
    https://gpt-index.readthedocs.io/en/latest/guides/primer/usage_pattern.html#optional-save-the-index-for-future-use

    1、引用对象报错,如“GPTSimpleVectorIndex”更新为“GPTVectorStoreIndex”
    2、浮点数报错,修改prompt_helper 为 prompt_helper = PromptHelper(max_input_size, num_outputs, chunk_overlap_ratio=0.1, chunk_size_limit=chunk_size_limit)
    3、没有save to disk用法,
    将index.save_to_disk(‘index.json’)
    更新为:index.storage_context.persist(persist_dir=””)

    回复
  • gavin的头像

    gavin

    2023.5.24 00:05

    源码,报错。ImportError: cannot import name ‘BaseLanguageModel’ from ‘langchain.schema’ (C:\Users\62438\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain\schema.py)

    回复
  • Vivid Gong的头像

    Vivid Gong

    2023.5.21 13:05

    总是报错怎么解决
    C:\Users\gwwbn\Desktop>python app.py
    File “C:\Users\gwwbn\Desktop\app.py”, line 28
    index = GPTSimpleVectorIndex.load_from_disk(‘index.json’)
    ^
    IndentationError: expected an indented block after function definition on line 27

    回复
  • SNOW的头像

    SNOW

    2023.5.12 16:05

    我使用大小為298KB的PDF檔運行了三次之後,openai的5美金費用就超量了…..
    請問是什麼原因導致的…?

    回复
    • WBOLT_COM

      2023.5.12 16:05

      请问您的PDF文档一共多少字数呢?而且有没有存在多次上传同一文档。
      或者可能是因为字数和多次上传的缘由。这个我就不太清楚了。

  • Pillow的头像

    Pillow

    2023.5.6 17:05

    python版本3.8 下载gpt_index之后 运行app.py文件 一直说没有这个包名

    回复
    • Vivid Gong的头像

      Vivid Gong

      2023.5.21 16:05

      同样的问题,版本Python 3.11.3

    • Vivid Gong的头像

      Vivid Gong

      2023.5.22 00:05

      我的版本是Python 3.11.3,也提示同样的问题

    • Gavin的头像

      Gavin

      2023.5.24 00:05

      同样的问题

    • Yvonne的头像

      Yvonne

      2023.9.18 14:09

      同样的问题

  • nnce的头像

    nnce

    2023.4.27 11:04

    这个用户界面很窄也不能放大或者拖动,回答显示不全

    回复
    • WBOLT_COM

      2023.4.27 12:04

      都说是自定义训练,当然无法跟在线的ChatGPT相比了。
      至于界面太小,这个可以自己动手改。
      总之,人工智能模型这玩意,费显卡费钱。

  • LIU的头像

    LIU

    2023.4.23 12:04

    请问为什么我的回答不完整?

    回复
  • zwz的头像

    zwz

    2023.4.12 23:04

    这个错误怎么解决
    TypeError: BaseGPTIndex.__init__() got an unexpected keyword argument ‘llm_predictor’

    回复
  • zwz的头像

    zwz

    2023.4.12 23:04

    运行后提示,要怎么处理
    D:\AI>python app.py
    File “D:\AI\app.py”, line 10
    max_input_size = 4096
    ^
    IndentationError: expected an indented block after function definition on line 9

    回复
    • liuyz的头像

      liuyz

      2023.4.16 10:04

      同样的问题

    • Luc的头像

      Luc

      2023.5.13 19:05

      同样的问题

    • Edgar的头像

      Edgar

      2024.4.11 22:04

      在Python中遇到的 IndentationError 通常表示代码的缩进不符合预期。Python使用缩进来定义代码块的结构,比如函数体、循环体和条件语句块等。错误提示说明在第7行之后的代码块(例如一个函数定义)期望有缩进,但在第8行并没有找到正确的缩进。
      示例如下:
      from gpt_index import SimpleDirectoryReader, GPTListIndex, GPTSimpleVectorIndex, LLMPredictor, PromptHelper
      from langchain import OpenAI
      import gradio as gr
      import sys
      import os

      os.environ[“OPENAI_API_KEY”] = ‘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’

      def construct_index(directory_path):
      max_input_size = 4096
      num_outputs = 512
      max_chunk_overlap = 20
      chunk_size_limit = 600
      prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
      llm_predictor = LLMPredictor(llm=OpenAI(temperature=0.7, model_name=”text-davinci-003″, max_tokens=num_outputs))
      documents = SimpleDirectoryReader(directory_path).load_data()
      index = GPTSimpleVectorIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper)
      index.save_to_disk(‘index.json’)
      return index

      def chatbot(input_text):
      index = GPTSimpleVectorIndex.load_from_disk(‘index.json’)
      response = index.query(input_text, response_mode=”compact”)
      return response.response

      iface = gr.Interface(fn=chatbot,
      inputs=gr.inputs.Textbox(lines=7, label=”Enter your text”),
      outputs=”text”,
      title=”Custom-trained AI Chatbot”)

      index = construct_index(“docs”)
      iface.launch(share=True)

  • wsy的头像

    wsy

    2023.4.11 12:04

    用复制的源码,运行py文件后出现以下报错,请问是什么原因
    Traceback (most recent call last):
    File “C:\Users\92173\Desktop\app.py”, line 28, in
    index = construct_index(“docs”)
    ^^^^^^^^^^^^^^^^^^^^^^^
    File “C:\Users\92173\Desktop\app.py”, line 17, in construct_index
    index = GPTSimpleVectorIndex(documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File “C:\Users\92173\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\vector_store\vector_indices.py”, line 69, in __init__
    super().__init__(
    File “C:\Users\92173\AppData\Local\Programs\Python\Python311\Lib\site-packages\gpt_index\indices\vector_store\base.py”, line 54, in __init__
    super().__init__(
    TypeError: BaseGPTIndex.__init__() got an unexpected keyword argument ‘llm_predictor’

    回复
    • WBOLT_COM

      2023.4.11 16:04

      将index = GPTSimpleVectorIndex(
      documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper
      )

      换成:
      index = GPTSimpleVectorIndex.from_documents(documents)

      试试看。