• 原文地址:A step-by-step guide to building a chatbot based on your own documents with GPT
  • 原文作者:Guodong (Troy) Zhao
  • 译文出自:翻译方案
  • 本文永久链接:github.com/itcodes/gol…
  • 译者:tong-h
  • 校对者:grejioh Quincy-Ye

与 ChatGPT 谈天是风趣且丰厚的,曩昔一段时间我一直在与它闲谈并探究新的主意。但这些都是比较随意的用例,别致感很快就减弱,尤其是当你意识到它能够发生幻觉的时分。

咱们怎么以更高效的方式运用它?随着 OpenAI 最近发布的 GPT 3.5 系列 API,咱们能做的事远不止是闲谈。对于企业和个人运用来说更高效的用例是 QA (问答)—— 你用自然语言向机器人问询你自己的文档/数据,它能够经过从文档中检索信息并生成回应以快速地答复你[1]。你能够用它来做客户支持,归纳用户研究,你的个人知识办理等等。

向机器人问询与文档有关的问题。由 Stable Diffusion 生成的图画。

在本文中,我将讨论怎么根据自己的数据创立问答机器人,包含为什么有些办法不收效,以及运用 llama-index 和 GPT API 高效地创立文档问答谈天机器人的逐渐引导。

(假如你只想知道怎么建立问答谈天机器人,你能够直接跳到“逐渐创立文档问答谈天机器人”部分)

探究不同的办法

我的日常作业是担任产品经理 —— 阅览用户反应以及内部文档占据了我生活的很大一部分。当 ChatGPT 出现的时分,我立刻就想到了将它当作帮手运用,来帮助我归纳用户反应,或许查找和我现在正在做的功用相关的旧产品文档。

我首要想到的是运用我自己的数据对 GPT 模型微调(fine-tuning)来实现目标。但微调的花费不少,并且需求一个有事例的大型数据集。相同,也不可能每逢文档发生改动时,都去做微调。更关键的是微调根本不能让模型“知道”文档中的所有信息,而是教给模型新技能。因此,对多文档问答来说,微调并不是一个可行的方式。

我想到的第二个办法是经过在提示中供给上下文来进行提示工程。比方,我能够在实在问题之前附加原始文档内容,而不是直接提问。可是 GPT 模型的注意广度是受限的,它只能承受提示中的几千个单词(大约 4000 个 token 或许 3000 个单词)。咱们有成千封用户反应邮件和数百份产品文档,所以把所有内容放在提示中是不可能的。往 API 传递长字符串的成本也是比较高的, 因为定价是根据运用的 token 数量。

我将根据下面的内容向你问询:—上下文的开端—你的文档内容—上下文的结束—我的问题是:“用户期望在 app 中看到什么特性?”

(假如你想要学习更多关于 GPT 的微调和提示工程,你能够阅览这篇文章:为个人业务量身定制的基础语言模型(如GPT)的3种办法)

因为提示对输入 token 数量有约束,所以我想出了一个主见,首要运用算法搜索文档并挑选相关的摘要,然后只将这些相关的内容以及我的问题传递给 GPT。当我研究这个主意的时分,我偶然发现一个叫 gpt-index 的库(现在更名为 LlamaIndex),这个库完全符合我的主意,并且运用简略[2]

从文件中提取相关部分,然后将其反应给提示。图标来自www.flaticon.com/

鄙人一节中,我将给出一个运用 LlamaIndex 和 GPT 来创立根据您自己的数据的问答谈天机器人的分步教程。

逐渐创立文档问答谈天机器人

在本节中,咱们将根据现有的文档用 LlamaIndex 和 GPT (text-davinci-003) 创立一个问答谈天机器人,这样你能够就你的文档提出问题,并从谈天机器人取得答案,全部都是运用自然语言。

前提条件

在开端之前,咱们需求准备一些东西:

  • 你的 OpenAI API Key,能够在 platform.openai.com/account/api… 中找到。
  • 你的文档的数据库。LlamaIndex 支持多种不同的数据来历,比方 Notion、Google Docs、Asana 等等 [3]。在本教程中,咱们只运用一个简略的 text 文件来做演示。
  • 一个本地 Python 环境或许在线 Google Colab notebook。

作业流程

这个作业流程简略易懂,只需求几个过程:

  1. 运用 LlamaIndex 创立文档数据的索引。
  2. 运用自然语言查询索引。
  3. LlamaIndex 将检索相关部分并传递给 GPT 提示。
  4. 结合相关上下文问询 GPT,并构建回复。

LlamaIndex 所做的是将原始的文档数据转化为矢量索引,这会使查询变得十分高效。LlamaIndex 将根据查询和数据的相似性来运用这个索引去找到最相关的部分。再将检索到的信息刺进到提示中发送给 GPT,这样 GPT 就有了答复问题的上下文。

设置

咱们需求先装置 LlamaIndex,只需求在终端或许 Google Colab notebook 中运转以下指令。这些指令会装置 LlamaIndex 和 OpenAI。

!pip install llama-index!pip install openai

下一步,咱们将在 python 中导入这些库,然后在一个新的 .py 文件中设置你的 OpenAI API key。

from llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReaderimport osos.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'

构建索引并保存

在装置以及导入了所需的库之后,咱们需求去构建文档的索引。

咱们能够运用 LllamaIndex 供给的 SimpleDirectoryReader 办法来加载文档,或许也能够从字符串中加载。

documents = SimpleDirectoryReader('your_directory').load_data()text_list = [text1, text2, ...]documents = [Document(t) for t in text_list]

LlamaIndex 也供给多种不同的数据连接器,包含 Notion,Asana,Google Drive,Obsidian 等等。你能够在 llamahub.ai/ 中找到可用的数据连接器。

在文档加载后,咱们能够用以下办法简略地构建索引

index = GPTSimpleVectorIndex(documents)

假如你想要保存索引以便后续加载运用,你能够运用以下办法

index.save_to_disk('index.json')index = GPTSimpleVectorIndex.load_from_disk('index.json')

查询索引并获取响应

查询索引是很简略的

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

一个回复事例。

然后就能够了!你就能得到答复了。在后台,LlamaIndex 会承受你的提示并在索引中搜索相关的语块,然后将你的提示以及相关的语块传递给 GPT。

一些关于高级运用的阐明

上面的过程只是展示了 LlamaIndex 和 GPT 十分简略的答复问题的入门用法。但你能够做更多。事实上,你能够装备 LlamaIndex 去运用不同的大型语言模型(LLM),运用不同类型的索引去做不同的任务,用一个新的索引来更新现有的索引等等。假如你感兴趣,能够阅览他们的文档 gpt-index.readthedocs.io/en/latest/i…。

结语

在这篇文章中,咱们看到了怎么将 GPT 与 LlamaIndex 结合起来,来建立一个文档问答谈天机器人。尽管 GPT(和其他 LLM)自身就很强壮,但假如咱们把它与其他东西、数据或流程结合起来,它的能力就能够大大放大。

你会用一个文档问答谈天机器人做什么?

  1. What Is Question Answering? — Hugging Face. 5 Dec. 2022
  2. Liu, Jerry. LlamaIndex. Nov. 2022. GitHub

假如发现译文存在过错或其他需求改进的地方,欢迎到 翻译方案 对译文进行修正并 PR,也可取得相应奖励积分。文章最初的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


翻译方案 是一个翻译优质互联网技术文章的社区,文章来历为 上的英文分享文章。内容掩盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等范畴,想要检查更多优质译文请持续关注 翻译方案、官方微博、知乎专栏。