← 返回博客
跳至主要内容

Verba:构建一个开源、模块化的 RAG 应用

·15 分钟阅读
Victoria Slocum
Edward Schmuhl

Hero image

你是否曾希望能够提出一个问题,并获得个性化、相关的答案,而无需翻阅大量的搜索结果? 这正是检索增强生成 (RAG) 能够为你做到的。RAG 应用会搜索相关来源并创建个性化答案,使用提供的资料来源而不是大型语言模型 (LLM) 训练的通用知识。

但尽管 RAG 很强大,创建一个功能完善的应用也可能让人望而却步。从选择适合用例的正确 AI 模型到组织你的数据以获得你需要的答案,有很多东西需要学习。虽然像 LangChainLlamaIndex 这样的工具可以更容易地设计原型,但还没有一个简单、开箱即用的开源 RAG 工具,任何人都可以无需任何技术专长就使用。

这就是我们创建 Verba,黄金 RAG 检索器的原因。我们希望让任何人都能轻松入门 RAG,而无需处理繁琐的设置或理解其背后的技术。有了 Verba,你可以立即开始使用自己的数据来获取个性化答案。然而,模块化的架构也允许对管道的每个部分进行自定义,如果你需要调整系统以进一步支持不同的用例的话。

我们已经有很多关于 Verba 的资源,包括

What is RAG? Animation

什么是检索增强生成 (RAG)?

检索增强生成 (RAG) 是一种高级方法,旨在通过使用大型语言模型 (LLM) 来帮助识别和总结答案,从而增强传统的搜索技术。与其手动梳理文档以查找答案,RAG 系统允许你检索相关来源并以自然、对话化的语言返回响应。

向量数据库(如 Weaviate)在 RAG 系统中很受欢迎,因为它们增强的搜索功能(如向量搜索或混合搜索)允许快速检索文档并轻松与 LLM 和其他 AI 工具集成。准确且快速的搜索能够将正确的信息包含在对查询的答案中,这使得数据搜索系统成为 RAG 应用中一个非常重要的组成部分。

但是,为什么不直接使用像 ChatGPT 这样的对话式 AI 代理来处理所有事情呢?

虽然像 ChatGPT 这样的 LLM 聊天系统在某些任务方面很出色,但存在一些已知的局限性,包括

  • 如果不知道答案,可能会给出虚假或捏造的信息。
  • 提供过时信息或不明确的响应。
  • 不清楚答案的来源,可能从不可信的来源获取信息。
  • 由于训练数据的范围广泛,可能无法理解用户查询的术语或含义。

这就是 RAG 可以更上一层楼的地方,特别是使用像 Verba 这样的应用。如果 Verba 没有回答查询所需的上下文,它会告诉你它无法在数据中找到相关的响应。你可以完全控制它知道的内容,并且还可以查看响应所依据的来源,从而了解答案的来源。

Hallucination demo

我们如何最好地与 AI 互动?

创建一个易于每个人使用的应用程序是一个挑战,尤其是在 UI(应用程序中用户与系统交互的部分)方面。 关键问题是,如何在无需理解后台发生的复杂过程的情况下,使 AI 技术易于访问?

由于 RAG 基于问答系统运行,因此使用聊天界面似乎是最自然的选择。用户熟悉发送消息并获得回复的结构。这就是像 ChatGPT 这样的工具如此受欢迎和用户友好的原因——它们坚持这种简单、对话化的方法。尽管聊天机器人有时因笨拙或无用而声名狼藉,但 LLM 的进步确实扭转了局面,使聊天机器人更加可靠和有用。

在聊天界面中提问

然后,我们需要引导用户完成他们的搜索过程,或者至少为他们提供工具来轻松导航。提供搜索查询或提示示例可以很好地向用户介绍该应用程序并帮助他们入门。这就是我们如何在 Verba 中加入自动完成功能,以帮助用户构建问题并为搜索体验增加熟悉的触感,就像在电子商务网站或 Google 上一样。 借助 Weaviate 快速的 关键词搜索功能,将此 自动完成功能集成到 Verba 中是一个简单的过程,使我们能够从一开始就提供自动完成功能。

Demo autocompletion

RAG 的一个突出特点是它能够直接指示它用于编译答案的来源。在 Verba 中,我们特意显示了有助于答案的具体片段(或块)并突出显示使用的确切段落。除此之外,用户还可以直接在 UI 中查看整个文档以获得更全面的了解,或者追溯到原始来源。

这意味着用户可以独立验证响应的可信度并根据需要收集更多相关信息。通过在 UI 中轻松访问来源信息,我们能够揭开问答过程的神秘面纱,让用户更深入地了解响应的生成方式,并确保透明的沟通和信息可靠性。

在 UI 中直接查看带有突出显示块的来源

为了与不具备技术背景的人们保持一致,创建一个易于访问的开源 RAG 应用程序,我们需要创建一个用户友好的体验来添加(摄取)数据到系统中。目标是避免要求用户运行复杂的摄取脚本。相反,Verba 具有一个简单的 Web 界面,用户可以直接上传数据,而无需任何脚本编写。

这是在拥有合理默认值和允许完全可定制的应用程序之间取得平衡的领域之一。虽然许多用户更喜欢不深入研究参数调整的复杂性并希望获得开箱即用的解决方案,但许多用例需要一定程度的可定制性,并且拥有易于调整的默认选项是 Verba 的一个重要设计策略。这种平衡确保应用程序对每个人来说都是可访问和可管理的,无论其技术专长如何,从而使整体体验更具包容性。

直接将文档上传到 Web 界面

在 Verba 中,用户还可以在界面内的专用空间中轻松管理他们摄取后的数据。他们可以查看所有上传的内容并删除不再相关的任何文档。这种全面的数据管理功能,通常被称为 CRUD(创建、读取、更新、删除)功能,对于问答系统来说非常重要,用户需要确保他们拥有更新的正确上下文来提供正确的响应。通过一个简单的页面,其中包含所有数据修改控件,用户可以随时控制自己的数据。

Documents page

我们知道用户在使用应用程序时快速检查一切是否正常运行有多么重要。诸如“应用程序现在是否正常工作?”,“我可以使用哪些功能?”,“我们是否正在使用最新版本?”之类的问题通常是最常问的,有时在构建界面时会被忽视。这就是我们创建特殊状态页的原因。

此页面是一个一站式站点,你可以查看应用程序是否已启动并运行,查看哪些功能已启用,以及获取有关任何新版本或设置的更新。这一切都是为了使事情清晰和简单,以便应用程序可以在没有猜测的情况下工作。

Status page

创建模块化的 RAG 架构

更深入地了解 Verba 的幕后设计,我们的目标是使其既完全可定制且适应性强,又易于开箱即用。 鉴于 RAG 和 AI 的新进展几乎每天都在发生,为我们设计 Verba 以使其能够发展并轻松整合新的发现和不同的用例非常重要。 这就是我们为什么将 RAG 流程分解为几个独立的模块化步骤。 这种方法简化了保持系统最新状态、添加新功能(例如与其他 AI 库的集成)以及允许用户根据自身需求进行定制。 我们的目标是为用户提供一种功能强大的工具,它不仅现在有用,而且随着技术的不断发展,将继续保持其价值。

Verba 的架构围绕五个关键步骤设计,每个步骤都可以定制和控制以适应不同的需求

  1. ReaderManager:读取器接收字符串列表,可以是路径、URL 或文本列表。 它们输出 Verba 文档列表。
  2. ChunkerManager:分块器接收文档列表,并将每个单独的文档文本分解成更小的片段。 它将它们保存在文档对象中并返回修改后的文档列表。
  3. EmbeddingManager:嵌入器接收文档列表,并将它们嵌入到 Weaviate 中。 它们也用于从 Weaviate 检索片段和文档。
  4. RetrieveManager:检索器与嵌入器通信以检索片段并应用自定义逻辑。 它们返回片段列表。
  5. GenerationManager:生成器使用片段列表和查询来生成答案。 它返回一个字符串作为答案。

Architecture overview

读取器管理器:数据摄取

让我们分解一下,从数据摄取过程开始。 这一步是关于处理各种类型的数据,从纯文本文件和 PDF 到 Excel 表格等等。 这里的目标是将这些不同的格式转换为统一的结构,以便进行进一步处理。 这个阶段专注于数据工程,通常是构建此类系统的最耗时的部分。 使用像 Verba 这样的应用程序的优势之一在于,管理数据管道的繁重工作已经完成。

对于每种类型的数据,我们都会创建一个特定的 读取器组件。 这可能是一个用于读取纯文本文件、PDF、Excel 文件等的组件。 用户可以根据自身需求添加新的读取器,确保 Verba 可以处理各种数据格式。 然后,这些读取器由一个中央管理结构组织和控制,该结构会监督它们的运行。

这种模块化方法扩展到 Verba 的其他组件或步骤。 每个步骤都涉及由中央机构管理的专用组件,该机构监督控制和选项。 这种结构确保 Verba 保持适应性和效率,能够随着用户需求和数据处理和检索领域的最新进展而发展。

分块器管理器:分解数据

在将数据格式化为一致的格式后,下一步是使用 分块组件 将其分解成更小的块。

为什么不直接使用整个文档?

当人们寻求 RAG 的帮助时,他们通常是在寻找特定的知识片段,而不是整个文档。 通过将整个文档添加到其中,我们也在增加 LLM 需要筛选的单词或标记的数量。 标记越多,单个请求中的主题范围越广,LLM 找到准确结果就越困难。 通过将文档分成较小的部分或块,Weaviate 帮助我们专注于相关的段落。 这不仅减少了总标记数,还提高了这些段落正是我们所寻找内容的几率。

Overlapping chunks

数据分块的方法越来越多,每种策略都带来了一些独特的东西。 在 Verba 中,您可以添加一个新的分块器组件,以适应您首选的分块技术。 让我们花点时间讨论一个常用的默认选项:重叠分块器。 其原理非常简单——我们将文档分成略微重叠的部分。 这种重叠使块在向量空间中更接近,这不仅增强了搜索过程,还确保我们不会在每个块的边缘丢失关键的相关信息。

嵌入管理器:向量化数据

在将文档分解成更小的块之后,这些块随后使用 嵌入组件 上传到 Weaviate。 用户可以从各种嵌入模型中选择来处理他们的数据。 无论是 OpenAICohereHuggingFace、Ollama 或任何其他提供商,Verba 和 Weaviate 都会立即支持它们。 这种灵活性让用户可以选择最适合其特定用例的需求或偏好的模型。

Embedding manager

文档的标题和分块内容都转换为 向量嵌入。 这个过程不仅仅是改变格式; 而是捕捉深层含义、语义上下文以及这些块之间的关系。 通过向量化文档,系统可以快速准确地根据编码在这些嵌入中的上下文和关系来确定最相关的信息。

检索管理器:查找上下文

在准备和组织数据之后,架构的最后两个步骤侧重于我们如何从数据存储中检索信息。 检索器组件 使用一种称为 混合搜索 的高级搜索技术检索相关上下文。 这种方法结合了两者之间的最佳方案:传统的关键字搜索和向量搜索。 当查询请求某些特定内容时,例如“健康的巧克力蛋糕”时,它不仅会查找与“巧克力”和“蛋糕”这两个词的精确匹配,还会理解查询背后的含义。 它可以找到“低糖”的食谱,匹配“健康”的语义概念。

Retrieval Diagram

Weaviate 非常通用,提供各种搜索方法,包括传统的 关键字搜索向量搜索混合搜索,甚至 生成搜索。 这种多样性允许用户根据不同的用例定制搜索过程。 我们在 Verba 中使用的 Weaviate 的一个突出功能称为 autocut。 这个智能工具会根据查询的相关性自动确定从 Weaviate 数据库返回的结果数量。 如果结果之间的相似度显著下降,autocut 将会修剪列表,确保 LLM 获得生成准确答案所需的正确信息量。

Autocut animation

生成管理器:编写答案

在 RAG 管道的最后一步中,在 生成组件 中生成对用户查询的答案。 在这里,系统会获取查询和从 Weaviate 检索到的相关上下文,并将其传递给大型语言模型以生成响应。 在此阶段,用户可以选择他们喜欢的 LLM 提供商以及提供商提供的任何特定设置或选项。

一旦答案准备好,它就会发送到聊天界面以显示给用户。 但我们并没有止步于此。 除了答案之外,我们还显示用于生成答案的信息片段(块),以及它们的相关性分数。 这是为了提供透明度,向用户展示最终答案以及它的确切来源。

我们详细了解了 Verba 的架构,该架构旨在保持灵活性,同时保持良好的默认解决方案。 这种适应性实际上是由 Weaviate 自身的设计实现的。 除了提供跨搜索技术的定制选项外,Weaviate 还具有多种部署选项,包括在 本地通过 Docker、跨各种云平台、市场,甚至通过 Weaviate Cloud (WCD) 运行。

开始使用 Verba

开始使用 Verba 非常简单; 您可以使用简单的 pip install goldenverba 命令进行安装。 默认情况下,Verba 在本地运行 Weaviate,这意味着您无需任何复杂的数据库设置或通常的麻烦即可启动并运行。 Verba 也被设计为可以无缝适用于喜欢或需要托管实例的用户,这意味着您只需进行一些配置调整即可切换到集群。

构建 Verba 的指导原则很明确:使设置过程简单,确保应用程序易于理解和使用,并允许用户根据其特定用例扩展基本功能。 通过设计模块化、开源的 RAG 架构和具有所有控件的网络 UI,我们旨在创建一个用户友好的体验,让任何人都可以访问高级检索增强生成技术,并开始使用 AI 原生技术。

Verba on GitHub

Verba 的未来

Verba 在 GitHub 上已经获得超过 1800 个星标,这真正达到了一个里程碑,证明了开源协作的力量。 将 Verba 开源是一个深思熟虑的选择,旨在扩大对不同 RAG 技术的访问,并展示 Weaviate 的能力。 然而,旅程并没有结束。 虽然 Verba 已经取得了显著进展,但路线图上充满了增强功能和来自团队和社区的大量好想法。

我们正在研究将 Weaviate 的 多租户能力,它支持隔离的数据环境,集成到 Verba 中,以实现多用户设置。 这将允许更侧重于企业级的解决方案,以实现安全性和数据隔离,特别是随着 Ollama 等本地 LLM 的添加,用于嵌入和生成。

我们非常感谢团队和社区对 Verba 的所有支持和热情,并迫不及待地想看看未来会带来哪些改进!

Happy happy cat

准备开始构建了吗?

请查看 快速入门教程,或使用 Weaviate Cloud (WCD) 的免费试用版构建令人惊叹的应用程序。

不想错过另一篇博文?

注册我们的双周时事通讯以保持更新!


提交后,我同意 服务条款 隐私政策.