使用 LlamaIndex 构建依托 LLM 的应用

本页面介绍了使用与 AlloyDB Omni 集成的 LlamaIndex 来构建依托 LLM 的应用的一些应用场景。我们提供了指向 GitHub 上笔记本的链接,以帮助您探索方法或开发应用。

LlamaIndex 是一种生成式 AI 编排框架,可让您将数据源与大语言模型 (LLM) 相关联并集成。您可以使用 LlamaIndex 构建应用,以使用自然语言查询来访问私有数据或特定领域的数据并从中查询信息。

LlamaIndex 充当自定义数据和 LLM 之间的桥梁,有助于开发具有检索增强生成 (RAG) 功能的知识助理应用。

LlamaIndex 非常适合以文档为中心的应用,因为它强调结构化文档管理,从而可简化索引编制和检索。此框架采用优化的查询机制,可提高信息访问的速度和相关性,并提供强大的元数据处理功能以实现细致的过滤。

如需详细了解 LlamaIndex 框架,请参阅 LlamaIndex 产品文档

LlamaIndex 组件

AlloyDB Omni 提供以下 LlamaIndex 接口:

  • 向量存储
  • 文档存储区
  • 索引存储区
  • 聊天存储区
  • 文档读取器

如需了解如何使用 LlamaIndex,请参阅 AlloyDB Omni 快速入门

向量存储

借助此 LlamaIndex 集成,您可以利用 AlloyDB Omni 的强大且可伸缩的特性来存储和管理 LlamaIndex 数据。通过将 LlamaIndex 的索引编制和查询功能与 AlloyDB Omni 的高性能和可靠性相结合,您可以构建更高效且可伸缩的依托 LLM 的应用。

LlamaIndex 会将文档(文档、文本和 PDF 文件)细分为称为“节点”的文档组件。VectorStore 只能包含所注入节点内容的嵌入向量和节点的文本。节点包含文本内容、向量嵌入和元数据。您可以对这些元数据字段应用过滤条件,以将节点检索限制为符合指定元数据条件的节点。

如需在 AlloyDB Omni 中使用向量存储区,请使用 AlloyDBVectorStore 类。如需了解详情,请参阅 LlamaIndex 向量存储区

使用 AlloyDBVectorStore 类存储向量嵌入

关于向量存储区的 AlloyDB Omni 笔记本介绍了如何执行以下操作:

  • 使用 AlloyDBEngine.from_connection_string() 创建 AlloyDBEngine 以连接到 AlloyDB Omni 实例。
  • 初始化用于存储向量嵌入的表。
  • 使用任意 Llama 索引嵌入模型创建嵌入类实例。
  • 初始化默认的 AlloyDBVectorStore 向量存储区。
  • 使用 VectorStoreIndex 创建向量存储区中的索引并对其进行查询。
  • 创建自定义向量存储区,以存储和过滤元数据。
  • 添加 ANN 索引以缩短搜索延迟时间。

文档和索引存储区

LlamaIndex 文档存储区集成可管理结构化文档存储和检索,针对 LlamaIndex 以文档为中心的功能进行了优化。文档存储区会在向量存储区中存储与向量相关的内容。

如需了解详情,请参阅 LlamaIndex 文档存储区产品文档。

索引存储区有助于管理索引,以实现快速查询和数据检索,例如摘要、关键字和树索引。LlamaIndex 中的 Index 是仅用于存储节点元数据的轻量级存储空间。更新节点元数据时,无需对完整节点或文档中的所有节点重新编制索引(读取嵌入生成)。

如需了解详情,请参阅 LlamaIndex 索引存储区

存储文档和索引

关于文档存储区的 AlloyDB Omni 笔记本介绍了如何使用 AlloyDB Omni,通过 AlloyDBDocumentStoreAlloyDBIndexStore 类存储文档和索引。您将了解如何实现完成以下任务:

  • 使用 AlloyDBEngine.from_connection_string() 创建 AlloyDBEngine 以连接到 AlloyDB Omni 实例。
  • 为 DocumentStore 和 IndexStore 创建表。
  • 初始化默认 AlloyDBDocumentStore
  • 设置 AlloyDBIndexStore
  • 将文档添加到 Docstore
  • 使用具有多个索引的文档存储区。
  • 加载现有索引。

聊天存储区

聊天存储区会为聊天式应用保留对话记录和上下文,从而实现个性化互动。聊天存储区提供一个中央存储库,用于存储和检索对话中的聊天消息,从而使 LLM 能够保留上下文,并根据正在进行的对话提供相关性更高的回答。

大语言模型默认是无状态的,这意味着它们不会保留之前的输入,除非每次都明确提供这些输入。通过使用聊天存储区,您可以保留对话的上下文,从而让模型能够随着时间的推移生成相关性和连贯性更高的回答。

LlamaIndex 中的内存模块可高效存储和检索对话情境,从而允许在聊天应用中进行更加个性化且情境感知能力更强的互动。您可以将 LlamaIndex 中的内存模块与 ChatStoreChatMemoryBuffer 集成。如需了解详情,请参阅 LlamaIndex 聊天存储区

存储聊天记录

关于聊天存储区的 AlloyDB Omni 笔记本介绍了如何使用 AlloyDB for PostgreSQL 通过 AlloyDBChatStore 类存储聊天记录。您将了解如何实现完成以下任务:

  • 使用 AlloyDBEngine.from_connection_string() 创建 AlloyDBEngine 以连接到 AlloyDB Omni 实例。
  • 初始化默认 AlloyDBChatStore
  • 创建 ChatMemoryBuffer 网址。
  • 创建 LLM 类实例。
  • 在没有存储上下文的情况下使用 AlloyDBChatStore
  • AlloyDBChatStore 与存储上下文搭配使用。
  • 创建和使用聊天引擎。

文档读取器

文档读取器可高效地从 AlloyDB Omni 检索数据并将其转换为与 LlamaIndex 兼容的格式以编制索引。文档读取器接口提供了一些方法,用于以 Documents 的形式来源加载数据。

文档是一个用于存储一段文本和关联元数据的类。您可以使用文档读取器加载要存储在文档存储区中或用于创建索引的文档。

如需了解详情,请参阅 LlamaIndex 文档读取器

以文档形式检索数据

关于文档读取器的 AlloyDB Omni 笔记本介绍了如何使用 AlloyDB Omni,通过 AlloyDBReader 类以文档形式检索数据。您将了解如何完成以下任务:

  • 使用 AlloyDBEngine.from_connection_string() 创建 AlloyDBEngine 以连接到 AlloyDB Omni 实例。
  • 创建 AlloyDBReader
  • 使用 table_name 参数加载文档。
  • 使用 SQL 查询加载文档。
  • 设置页面内容格式。
  • 加载文档。

后续步骤