手把手教学实现基于GPT建立在自己文档基础上的聊天机器人

与ChatGPT聊天既有趣又富有信息性——我过去一直在与它闲聊,探索一些新的学习想法。但这些更多是日常使用情况,新鲜感可能很快消退,特别是当你意识到它可能会产生幻觉时。

我们如何更有效地使用ChatGPT呢?随着OpenAI最近发布了GPT 3.5系列API,我们可以做的不仅仅是闲聊。其中一个非常有用的用例是QA(问题回答)——您可以用自然语言询问机器人有关您自己的文档/数据的问题,它可以快速从文档中检索信息并生成响应[1]。您可以将其用于客户支持、综合用户研究、个人知识管理等方面!

在本文中,我将探讨如何基于自己的数据构建自己的问答聊天机器人,包括为什么某些方法不可行以及使用 llama-index 和 GPT API 以高效方式构建文档问答聊天机器人的逐步指南。(如果您只想知道如何构建问答聊天机器人,可以直接跳转到“逐步构建文档问答聊天机器人”一节。)

探索不同的方法

当ChatGPT推出时,我立即想到了使用它作为助手,帮助我综合客户反馈或找到与我正在开发的功能相关的旧产品文档的想法。

我最初考虑的是使用自己的数据对GPT模型进行微调以实现这一目标。但微调需要花费相当大的资金,并需要一个具有示例的大型数据集。每次文档发生变化时微调也是不可能的。更为关键的是,微调只是让模型掌握了新的技能,而不能让模型“了解”文档中的所有信息。因此,对于(多个)文档问答,微调不是正确的方法。

我想到的第二种方法是通过在提示中提供上下文来进行提示工程。例如,我可以在实际问题之前附加原始文档内容。但是GPT模型的关注范围有限——它只能在提示中接收几千个单词(约4000个标记或3000个单词)。考虑到我们有成千上万的客户反馈邮件和数百份产品文档,让模型在提示中接收所有上下文是不可能的。如果您将长上下文传递到API,那么成本也很高,因为计费是基于您使用的标记数量。

I will ask you questions based on the following context:
— Start of Context —

YOUR DOCUMENT CONTENT

— End of Context—
My question is: “What features do users want to see in the app?”

(如果你想了解有关GPT的微调和提示工程的更多信息,可以阅读这篇文章:https://medium.com/design-bootcamp/3-ways-to-tailor-foundation-language-models-like-gpt-for-your-business-e68530a763bd)

因为提示的输入标记数有限,所以我想到了一个想法,先使用算法搜索文档并挑选相关摘录,然后只将这些相关上下文与我的问题一起传递给GPT模型。当我正在研究这个想法时,我遇到了一个名为gpt-index(现在更名为LlamaIndex)的库,它正好可以实现我的想法,并且使用起来非常简单。

在接下来的部分,我将给出一个使用LlamaIndex和GPT来构建自己数据的问答聊天机器人的逐步教程。

逐步构建文档问答聊天机器人

在这个部分,我们将使用 LlamaIndex 和 GPT(text-davinci-003)基于现有文档构建一个基于文档的问答聊天机器人,这样你就可以用自然语言提问并从聊天机器人得到答案。

先决条件

在我们开始教程之前,我们需要准备一些东西:

工作流程

工作流程很简单,只需要几个步骤:

  1. 使用 LlamaIndex 建立文档数据的索引
  2. 用自然语言查询索引
  3. LlamaIndex 将检索到的相关部分传递给 GPT
  4. 使用相关上下文问 GPT 并构建响应

LlamaIndex 的作用是将原始文档数据转换为向量化的索引,非常高效地进行查询。它将使用此索引根据查询和数据的相似性找到最相关的部分。然后,它将所检索到的内容插入到将要发送给 GPT 的提示中,以便 GPT 有上下文来回答您的问题。

设置

首先,我们需要安装库。在您的终端或 Google Colab Notebook中运行以下命令即可。这些命令将安装 LlamaIndex 和 OpenAI 两个库。

!pip install llama-index
!pip install openai

下一步,我们将在 Python 中导入库,并在一个新的 .py 文件中设置您的 OpenAI API 密钥。

# Import necessary packages
from llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReader
import os

os.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'

构建索引并保存

在安装所需的库并导入它们之后,我们需要构建文档的索引。

要加载文档,可以使用LlamaIndex提供的SimpleDirectoryReader方法,也可以从字符串中加载。

# Loading from a directory
documents = SimpleDirectoryReader('your_directory').load_data()

# Loading from strings, assuming you saved your data to strings text1, text2, ...
text_list = [text1, text2, ...]
documents = [Document(t) for t in text_list]

LlamaIndex提供了多种数据连接器,包括Notion、Asana、Google Drive、Obsidian等。您可以在https://llamahub.ai/找到可用的数据连接器。

在加载完文档后,我们可以使用以下命令简单构建索引:

# Construct a simple vector index
index = GPTSimpleVectorIndex(documents)

如果你想要保存这个index,以便将来使用,你可以使用以下的方法:

# Save your index to a index.json file
index.save_to_disk('index.json')
# Load the index from your saved index.json file
index = GPTSimpleVectorIndex.load_from_disk('index.json')

查询索引并获得响应

查询索引很简单

# Querying the index
response = index.query("What features do users want to see in the app?")
print(response)

完成!你将获得打印出来的答案。在幕后,LlamaIndex会接收你的提示,从索引中搜索相关的片段,并将你的提示和相关的片段传递给GPT。

高级用法的一些注意事项

上述步骤仅显示了使用LlamaIndex和GPT进行问答的简单入门用法。但是你可以做得比这更多。实际上,你可以配置LlamaIndex以使用不同的大型语言模型(LLM),为不同的任务使用不同类型的索引,使用新索引更新现有索引等。如果你感兴趣,可以阅读他们的文档https://gpt-index.readthedocs.io/en/latest/index.html。

在本文中,我们看到了如何使用LlamaIndex和GPT结合构建文档问答聊天机器人。虽然GPT(和其他LLM)本身就很强大,但是如果我们将其与其他工具、数据或流程结合起来,其功能可以得到很大增强。

您会用文档问答聊天机器人来做什么?

展开阅读全文

页面更新:2024-04-21

标签:机器人   文档   自然语言   上下文   手把手   索引   模型   问答   想法   提示   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top