使用 ChatGPT 基于领域文档构建聊天机器人指南

简介: 随着 OpenAI 最近发布的 GPT 3.5 系列 API,我们可以做的不仅仅是聊天。QA(问答)是企业和个人使用的一个非常有效的场景用例——使用自然语言向机器人询问自己(企业)私有的文档/数据,它可以通过从文档中检索信息并生成响应来快速回答我们[1]. 我们可以将其用于客户支持、综合用户研究、个人知识管理等等!在本文中,将探讨如何根据自己的数据构建自己的问答聊天机器人,包括为什么某些方法不起作用,以及使用 llama-index 和 GPT API 高效构建文档问答聊天机器人指南。(如果你只想知道如何搭建问答聊天机器人,可以直接跳到“一步步搭建文档问答聊天机器人”部分)

与 ChatGPT 聊天既有趣又有益

过去一段时间我一直在用它闲聊并探索一些新的想法来学习。但这些都是更随意的用例,新奇感很快就会消失,尤其是当你意识到它会产生幻觉时。

我们如何以更高效的方式使用它?


随着 OpenAI 最近发布的 GPT 3.5 系列 API,我们可以做的不仅仅是聊天。QA(问答)是企业和个人使用的一个非常有效的场景用例——使用自然语言向机器人询问自己(企业)私有的文档/数据,它可以通过从文档中检索信息并生成响应来快速回答我们[1]. 我们可以将其用于客户支持、综合用户研究、个人知识管理等等!

在本文中,将探讨如何根据自己的数据构建自己的问答聊天机器人,包括为什么某些方法不起作用,以及使用 llama-index 和 GPT API 高效构建文档问答聊天机器人指南。

(如果你只想知道如何搭建问答聊天机器人,可以直接跳到“一步步搭建文档问答聊天机器人”部分)

探索不同的方法


我的日常工作是产品经理——阅读客户反馈和内部文件占据了我生活的很大一部分。当 ChatGPT 出来时,我立刻想到了用它作为助手来帮助我综合客户反馈或查找有关我正在开发的功能的相关旧产品文档的想法。

我首先想到的是用自己的数据微调 GPT 模型来达到目的。但是微调需要花费相当多的钱,并且需要一个带有示例的大数据集。也不可能每次文档发生变化时都进行微调。更关键的一点是,微调根本不能让模型“知道”文档中的所有信息,而是教会模型一种新技能。因此,对于(多)文档 QA,微调不是可行的方法。

我想到的第二种方法是通过在提示中提供上下文来进行提示工程。例如,我可以在实际问题之前附加原始文档内容,而不是直接提出问题。但是 GPT 模型的注意力跨度有限——它只能在提示中接受几千个单词(大约 4000 个标记或 3000 个单词)。如果我们有数千封客户反馈电子邮件和数百份产品文档,就不可能在提示中给出所有上下文。如果将长上下文传递给 API,成本也会很高,因为定价是基于使用的 token 数量。

我会根据以下上下文问您问题:
— 上下文开始 —
您的文档内容
— 上下文结束 —
我的问题是:“用户希望在应用程序中看到哪些功能?”

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

由于提示对输入标记的数量有限制,我想到了首先使用算法搜索文档并挑选出相关摘录,然后仅将这些相关上下文与我的问题一起传递给 GPT 模型。当我研究这个想法时,我遇到了一个名为 gpt-index(现在更名为 LlamaIndex)的库,它正是我想做的,而且使用起来很简单 [2]。

来自:https://www.flaticon.com/

在下一节中,我将提供有关使用 LlamaIndex 和 GPT 在私有数据上构建问答聊天机器人的分步教程。

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


在本节中,我们将基于现有文档使用 LlamaIndex 和 GPT (text-davinci-003) 构建一个问答聊天机器人,以便可以提出有关文档的问题并从聊天机器人那里获得答案,所有这些都使用自然语言。

先决条件


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

  • OpenAI API 密钥,可在https://platform.openai.com/account/api-keys找到。
  • 文件的数据库。LlamaIndex 支持许多不同的数据源,如 Notion、Google Docs、Asana 等。对于本教程,我们将只使用一个简单的文本文件进行演示。
  • 本地 Python 环境或在线 Google Colab 笔记本。

工作流程


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

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

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

配置


我们需要先安装库。只需在我们的终端或 Google Colab 笔记本上运行以下命令。这些命令将同时安装 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'

构建索引并保存


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

要加载文档,我们可以使用 LllamaIndex 提供的 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)

如果你想保存索引并加载它以供将来使用,你可以使用以下方法

# 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

结语


在本文中,我们了解了如何结合使用 GPT 和 LlamaIndex 来构建文档问答聊天机器人。虽然 GPT(和其他 LLM)本身很强大,但如果我们将它与其他工具、数据或流程相结合,它的力量会大大增强。

你会使用文档问答聊天机器人做什么?欢迎留言交流,谢谢~

相关文章
|
6月前
|
安全 机器人 测试技术
ChatGPT机器人怎么用?10秒搞定
ChatGPT机器人怎么用?10秒搞定
ChatGPT机器人怎么用?10秒搞定
|
6月前
|
人工智能 自然语言处理 机器人
探索人工智能:使用Python构建一个简单的聊天机器人
探索人工智能:使用Python构建一个简单的聊天机器人
318 0
|
10天前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
1月前
|
人工智能 自然语言处理 机器人
用Python构建你的第一个聊天机器人
【10月更文挑战第7天】在这篇文章中,我们将一起探索如何利用Python编程语言和AI技术,一步步打造一个基础的聊天机器人。无论你是编程新手还是有一定经验的开发者,都能通过这个指南获得启发,并实现一个简单的对话系统。文章将引导你理解聊天机器人的工作原理,教你如何收集和处理用户输入,以及如何设计机器人的响应逻辑。通过动手实践,你不仅能够学习到编程技能,还能深入理解人工智能在语言处理方面的应用。
40 0
|
6月前
|
自然语言处理 机器人 Go
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
【飞书ChatGPT机器人】飞书接入ChatGPT,打造智能问答助手
364 0
|
3月前
|
前端开发 JavaScript 机器人
从零开始构建一个聊天机器人
【8月更文挑战第7天】构建聊天机器人是一个涉及多个步骤和技术的复杂过程。从前期准备到实际部署,每一步都需要仔细规划和执行。通过不断学习和实践,你可以逐步掌握构建聊天机器人的技巧和方法,为企业创造更大的价值。
|
3月前
|
Apache UED 数据安全/隐私保护
揭秘开发效率提升秘籍:如何通过Apache Wicket组件重用技巧大翻新用户体验
【8月更文挑战第31天】张先生在开发基于Apache Wicket的企业应用时,发现重复的UI组件增加了维护难度并影响加载速度。为优化体验,他提出并通过面板和组件重用策略解决了这一问题。例如,通过创建`ReusableLoginPanel`类封装登录逻辑,使得其他页面可以轻松复用此功能,从而减少代码冗余、提高开发效率及页面加载速度。这一策略还增强了应用的可维护性和扩展性,展示了良好组件设计的重要性。
57 0
|
3月前
|
人工智能 自然语言处理 机器人
掌握未来沟通的艺术:运用TensorFlow与自然语言处理(NLP)技术,从零开始构建你的专属智能对话机器人,让机器理解你的一言一行
【8月更文挑战第31天】本文详细介绍如何利用TensorFlow与自然语言处理技术开发对话机器人。从准备问答数据集开始,通过预处理、构建Seq2Seq模型、训练及预测等步骤,最终实现了一个简易的聊天机器人。示例代码涵盖数据加载、模型搭建及对话功能,适合希望在实际项目中应用AI技术的开发者参考。
48 0
|
4月前
|
机器学习/深度学习 人工智能 安全
运用F5构建机器人防御,轻松应对恶意Bot威胁
运用F5构建机器人防御,轻松应对恶意Bot威胁
47 0
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【AIGC】基于大语言模型构建多语种聊天机器人(基于Bloom大语言模型)
【5月更文挑战第8天】基于大语言模型Bloom构建多语种聊天机器人
162 1
下一篇
无影云桌面