宣布 LlamaCloud 全面上市(以及我们的 1900 万美元 A 轮融资)!
LlamaIndex

Jerry Liu 2023-09-12

LlamaIndex + Vectara

(Ofer Mendelevitch,Vectara 开发者关系主管,和 Logan Markewich,LlamaIndex 创始工程师合著)

引言

Vectara 是一个值得信赖的生成式 AI 平台。Vectara 平台提供了一套易于使用的 API,降低了开发 可信生成(即检索增强生成)应用程序以及管理在生产环境中大规模部署所需的 LLM 基础设施的复杂性。

今天,我们很高兴宣布 Vectara 通过一种新型索引,即 托管索引,与 LlamaIndex 集成。在这篇博文中,我们将深入探讨 ManagedIndex 如何工作,并展示如何将 Vectara 用作托管索引的示例。

Vectara 是什么?

Vectara 是一个端到端平台,为开发者提供强大的生成式 AI 能力,包括

数据处理。 Vectara 支持各种文件类型的摄取,包括 markdown、PDF、PPT、DOC、HTML 等等。摄取时,会自动从文件中提取文本,并将其分块成句子。然后为每个块计算向量嵌入,因此您无需为此调用任何额外的服务。

向量和文本存储。 Vectara 托管和管理向量存储(存储文档嵌入的地方)以及相关文本。开发者无需经历漫长且昂贵的向量数据库评估和选择过程。他们也不必担心在生产环境中设置和管理向量数据库、重新索引以及在应用程序超出简单原型规模时变得重要的许多其他 DevOps 考量。

查询流程。 发出查询时,计算该查询的嵌入向量并检索结果文本段(基于相似度匹配)完全由 Vectara 管理。Vectara 还开箱即用地提供了强大的混合搜索和重新排序实现,与最先进的嵌入模型一起,确保在检索步骤中返回最相关的文本段。

安全和隐私。 Vectara 的 API 在传输和静态时均完全加密,并支持客户管理密钥 (CMK)。我们绝不会在您的数据上进行训练,因此您可以确信您的数据不会发生隐私泄露。

图 1: Vectara 用于“可信生成”的 API 平台

好处在于所有这些复杂性完全由 Vectara 管理,大大减轻了开发者的负担,使他们不必专注于大型语言模型、嵌入模型、向量存储和 MLOps 这些不断发展的技能。

从 VectorStoreIndex 到 ManagedIndex

LlamaIndex 是一个用于构建 LLM 应用程序的数据框架。它提供了一组可组合的模块,供用户为其应用程序定义数据管道。这包括数据加载器、文本分割器、元数据提取器和向量存储集成。

用户常用的一个抽象是 VectorStoreIndex,它提供了与不同向量数据库的集成。

然而,这里的挑战在于用户仍然需要仔细定义如何加载和解析数据,以及选择要使用的嵌入模型和向量数据库。由于 Vectara 抽象了这种复杂性,Vectara 和 LlamaIndex 团队共同提出了一种新的抽象:ManagedIndex。

如图 2 所示,将数据摄取到 VectorStoreIndex 中时,数据会在本地处理,利用数据连接器和节点解析器等多个组件。

图 2: LlamaIndex 中 VectorStoreIndex 的典型文档处理流程

使用 Vectara(图 3),整个流程被一个单一的“索引”API 调用所取代,所有处理都在 Vectara 平台的后端完成。

图 3: 使用 VectaraIndex 进行预处理,将复杂的摄取流程简化为一步。

VectaraIndex 如何工作?

让我们来看一个使用 VectaraIndex 的简单问答示例,在本例中,我们将从 Paul Graham 的一篇论文中提问。

步骤 1:设置您的 Vectara 账户和索引

要开始使用,请按照我们的快速入门指南:注册一个免费的 Vectara 账户,创建一个语料库(索引),并生成您的 API 密钥。

然后将您的 Vectara customer_id、corpus_id 和 api_key 设置为环境变量,以便 VectaraIndex 可以轻松访问它们,例如

VECTARA_CUSTOMER_ID=<YOUR_CUSTOMER_ID>
VECTARA_CORPUS_ID=<YOUR_CORPUS_ID>
VECTARA_API_KEY="zwt_RbZfGT…"

步骤 2:使用 LlamaIndex 创建一个 VectaraIndex 实例

构建 Vectara Index 非常简单

from llama_index import SimpleDirectoryReader
from llama_index.indices import VectaraIndex
From pprint Import pprint

documents = SimpleDirectoryReader("paul_graham").load_data()
index = VectaraIndex.from_documents(documents)

这里我们使用 LlamaIndex 的 SimpleDirectoryReader 将 Paul Graham 的论文加载到一个文档中。然后使用 from_documents() 构造函数生成 VectaraIndex 实例。

与使用 LlamaIndex 工具(如数据连接器、解析器和嵌入模型)处理输入数据的常规流程不同,使用 VectaraIndex 时,文档通过 索引 API 直接发送到 Vectara。然后,Vectara 平台处理、分块、编码并将文本和嵌入存储到 Vectara 语料库中,使其立即可用于查询。

步骤 3:查询

数据完全摄取后,您可以利用 LlamaIndex 内置的丰富查询结构。例如,我们使用该索引来检索前 k 个最相关的节点

retriever = index.as_retriever(similarity_top_k=7)
# docs should contain the 7 most relevant documents for the query
docs = retriever.retrieve(“What is the IBM 1401?”)
pprint(docs[0].node.text)

(“我的故事糟透了。它们几乎没有任何情节,只有感情强烈的角色,我以为这能让它们深刻。我尝试写的第一个程序是在我们的学区用于当时的‘数据处理’的 IBM 1401 上。那是在九年级,所以我十三四岁。学区的 1401 恰好在我们的初中地下室,我和我的朋友 Rich Draves 得到了使用它的许可。”)

这里我们打印出根据查询“IBM 1401 是什么?”找到的最匹配节点。这又会调用 Vectara 的 搜索 API,返回前 k 个匹配的文档段。

这些被转换为 NodeWithScore 对象,因此可以像往常一样与 LlamaIndex 的其余查询工具一起使用。例如,我们可以使用 LlamaIndex 的 query_engine() 将检索到的匹配文档段(节点)转换为对我们问题的全面回答

# Get an answer to the query based on the content of the essay
response = index.as_query_engine().query("What can the 1401 do?")
print(response)

1401 用于“数据处理”,可以将程序加载到内存中并运行。它有一个读卡器、打印机、CPU、磁盘驱动器,并使用早期版本的 Fortran 作为编程语言。程序的唯一输入形式是存储在穿孔卡片上的数据。

为什么将 VectaraIndex 与 LlamaIndex 一起使用?

通过向 LlamaIndex 添加“托管索引”和 VectaraIndex 的概念,用户可以继续利用 LlamaIndex 库提供的工具和功能,同时与像 Vectara 这样的生成式 AI 平台集成。

检索器和查询引擎只是冰山一角。使用 Vectara 的托管索引,开发者可以完全访问路由器、高级查询引擎、数据代理、聊天引擎等高级工具!能够使用 Vectara 检索上下文使开发者能够使用 LlamaIndex 组件构建这些复杂的应用程序。

例如,在以下代码中,我们使用 LlamaIndex 中的聊天引擎,利用我们的 VectaraIndex 快速创建一个聊天交互

chat = index.as_chat_engine(chat_mode='context')
res = chat.chat("When did the author learn Lisp?")
print(res.response)

“作者在大学里学习了 Lisp。”

追问会保留聊天历史作为上下文,正如您所料

chat.chat("and was it helpful for projects?").response

“是的,学习 Lisp 对作者的项目很有帮助。他们在 Viaweb 和 Y Combinator 中都使用了 Lisp,这表明它在他们的工作中很有用。”

chat.chat("what was a distinctive characteristic of that programming language?").response

“Lisp 的一个显著特点是其核心是一个通过自身编写解释器来定义的语言。它最初被设计为一种形式化的计算模型和图灵机的替代品。Lisp 的这种自指性质使其区别于其他编程语言。”

有关如何使用聊天引擎的更多信息,请查看文档;有关 LlamaIndex 其他查询功能的更多信息,请查看完整的文档

总结

LlamaIndex 使得从任何文档或数据源填充 VectaraIndex 变得非常容易,同时利用 Vectara 服务管理文档处理、分块、嵌入,并使所有这些数据可在查询时使用 LlamaIndex 库进行高级检索。

VectaraIndex 基于新的 LlamaIndex 托管索引抽象,它更好地支持像 Vectara 这样的生成式 AI 平台,并使其他提供端到端平台的供应商也能加入。

要开始使用 Vectara 和 LlamaIndex,您可以按照 Vectara 快速入门指南设置您的账户,并使用您自己的数据运行上面的示例。