当前位置:   article > 正文

基于知识库构建自己的ChatGPT(简明指南)_chatgpt 知识库

chatgpt 知识库

一份介绍如何快速使用OpenAI API 构建专属知识库 AI的指南

现代产品通常拥有来自不同来源的大量用户研究数据:用户研究采访、对话记录、客户电子邮件、调查、各种平台上的客户评论等。

理解所有这些数据是一项具有挑战性的任务。传统的方法是维护一个有序的数据库,配备各种相应的标签。

但如果我们可以拥有自己的个人 ChatGPT,它可以回答关于我们的用户研究数据的任何问题呢?

现在,只需要几行代码就可以实现这一点,即使没有技术背景也可以做到。接下来,我将逐步解释如何实现这一点。

1. OpenAI API

OpenAI提供了一个API来发送请求。我们需要这个API来将相关的上下文发送给模型,并保持信息的私密性。

在开始使用API之前,可以尝试通过GPT-3 Playground中的用户界面与GPT-3模型进行交互。

2. 定制知识库

我们想让ChatGPT使用我们的数据,而不仅仅是来自互联网的一般知识。我们该怎么做呢?

2.1 是否可以使用Fine-Tuning对模型进行微调?

在初步接触这个问题时,我认为可以使用我们的数据集对模型进行微调。结果发现微调是通过提供提示-响应示例来训练模型以特定方式回答问题。

微调可以有助于训练模型识别情感,例如,在训练数据中提供句子-情感值对,就像这个例子中:

  1. {"prompt":"我的新手机到了! ->", "completion":"积极"}
  2. {"prompt":"今天考试很差让人失望 ->", "completion":"消极"}

但在训练自己的ChatGPT情况下,我们没有类似的提示-响应。我们只是想要用来找到答案的数据。因此,在这种情况下微调无法起作用。

2.2 将上下文信息作为 Prompt 发送

我们都知道,如果我们需要让GPT模型知道内容上下文信息。我们可以通过在提示本身中提供上下文信息来实现这一点。举个例子:

上下文信息如下。
{内容}
基于上下文信息而不是原有知识,回答问题:{用户提问}

不过,有一个限制。我们不能在一个提示中发送所有的研究数据。因为OpenAI模型的请求/响应硬限制为 2049 个“Token”(GPT3.5)。这大约是对应8K英文字符,对应到中文就更少了。

我们需要找到一种方法,只发送有助于我们的AI助手回答问题的相关信息,而不是在请求中发送所有数据。

2.2.1 使用专有的库

使用GPT Index 的开源库(由 Jerry Liu 创建)可以轻松实现这一点。

具体操作如下:

1. 创建文本块的向量索引
2. 找到最相关的文本块
3. 使用最相关的文本块向 GPT-3 提出问题

该库会为我们处理所有复杂的工作,我们只需要编写几行代码。

2.2.2 开始动手实践

下面是伪代码,代码只有两个函数:第一个函数从我们的数据中构建索引,第二个函数向 GPT模型 发送请求。

  1. def construct_index:
  2. 1. 设置使用 LLM 的参数
  3. 2. 构建索引
  4. 3. 将索引保存到文件中
  5. def ask_ai:
  6. 1. 获取用户查询
  7. 2. 发送具有相关上下文的查询
  8. 3. 显示响应

a.构建索引

首先,我们需要构建一个索引。索引就像一个数据库,以使它们易于查找的方式存储文本片段。

为此,我们需要将所有数据收集到一个文件夹中。然后,我们要求 GPT Index 获取文件夹中的所有文件,并将每个文件拆分成小的、连续的片段。然后将这些片段以可搜索的格式存储。

下面代码以GPT3为例子

  1. def construct_index(directory_path):
  2. # 设置最大输入大小
  3. max_input_size = 4096
  4. # 设置输出标记数量
  5. num_outputs = 256
  6. # 设置最大块重叠
  7. max_chunk_overlap = 20
  8. # 设置块大小限制
  9. chunk_size_limit = 600
  10. # 定义LLM
  11. llm_predictor = LLMPredictor(llm=OpenAI(temperature=0, model_name="text-davinci-003", max_tokens=num_outputs))
  12. prompt_helper = PromptHelper(max_input_size, num_outputs, max_chunk_overlap, chunk_size_limit=chunk_size_limit)
  13. # 从目录中加载数据
  14. documents = SimpleDirectoryReader(directory_path).load_data()
  15. # 构建索引
  16. index = GPTSimpleVectorIndex(
  17. documents, llm_predictor=llm_predictor, prompt_helper=prompt_helper
  18. )
  19. # 保存索引
  20. index.save_to_disk('index.json')
  21. return index

当我们运行这个函数时,它会创建一个名为index.json的文件,其中包含我们的数据分成的小块,转换为易于搜索的格式。

请注意,运行此代码将消耗OpenAPI账户的信用额度(每1,000个token为$0.02,所有账户刚创建的时候时,都有18美元的免费信用额度)。

b. 询问问题

  1. GPT Index 会找到与问题最相关的索引部分
  2. 将它们与问题组合在一起,并发送到 GPT-3
  3. 输出响应
  1. def ask_ai():
  2. index = GPTSimpleVectorIndex.load_from_disk('index.json')
  3. while True:
  4. query = input("输入你想问的问题? ")
  5. response = index.query(query, response_mode="compact")
  6. display(Markdown(f"返回的响应: <b>{response.response}</b>"))

c.简单测试

  1. # 创建索引
  2. index = construct_index("知识库文件路径")
  3. # 询问问题
  4. question = "你的问题?"
  5. response = ask_ai(index, question)
  6. # 打印响应
  7. print(response)

3. 未来应用场景

上面我们简单展示了下,如何使用GPT-Index+OpenAPI模型快速搭建属于自己的ChatGPT,只需几行代码就可以实现。
想象一下我们只用几分钟的时间就能够构建一个用于搜索我们自己知识库的ChatGPT。同样的技术可以用于数十种不同的用例。

  • 医疗保健聊天机器人
    可以根据用户的健康历史和症状提供医疗建议
  • AI法律顾问
    上传相关法律文件,就能够浏览法律文件并提供有意义信息
  • 财务金融顾问
    给定企业财务报表,做金融股票推荐分析

以上只是这GPT技术探索的一小部分。随着大型语言模型的发展,现在比以往任何时候都更容易创建可以满足特定需求的自定义AI。
面对这次AI发展变革,每个普通人都无法置身之外,都需要去学习利用好这些技术,来探索发现其中的机会和发展。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/201373
推荐阅读
相关标签
  

闽ICP备14008679号