使用 LlamaIndex 构建依托 LLM 的应用

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

LlamaIndex 是一个生成式 AI 编排框架,可让您将数据源与大语言模型 (LLM) 连接和集成。您可以使用 LlamaIndex 构建应用,以便使用自然语言查询访问和查询私密数据或特定于领域的数据中的信息。

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

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

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

LlamaIndex 组件

AlloyDB Omni 提供以下 LlamaIndex 接口:

  • 向量存储
  • 文档存储区
  • 索引存储区
  • Chat 商店
  • Document Reader

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

向量存储

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

LlamaIndex 会将文档(文档、文本和 PDF 文件)拆解为称为节点的文档组件。VectorStore 只能包含提取的节点内容的嵌入向量和节点的文本。节点包含文本内容、向量嵌入和元数据。您可以对这些元数据字段应用过滤条件,以将节点检索限制为仅检索与指定元数据条件匹配的节点。

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

使用 AlloyDBVectorStore 类存储向量嵌入

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

  • 创建 AlloyDBEngine 以使用 AlloyDBEngine.from_connection_string() 连接到 AlloyDB Omni 实例。
  • 初始化一个表来存储向量嵌入。
  • 使用任何 Llama Index 嵌入模型创建嵌入类实例。
  • 初始化默认的 AlloyDBVectorStore 矢量存储区。
  • 使用 VectorStoreIndex 从向量存储区创建和查询索引。
  • 创建自定义矢量存储区以存储和过滤元数据。
  • 添加 ANN 索引以缩短搜索延迟时间。

文档和索引存储区

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

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

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

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

存储文档和索引

文档存储区专用 AlloyDB Omni 笔记本介绍了如何使用 AlloyDB Omni 使用 AlloyDBDocumentStoreAlloyDBIndexStore 类存储文档和索引。您将学习如何执行以下操作:

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

Chat 商店

Chat 存储区可为基于聊天的应用维护对话记录和上下文,从而实现个性化互动。Chat 存储区提供了一个中央仓库,用于存储和检索对话中的聊天消息,让 LLM 能够维护上下文,并根据正在进行的对话提供更相关的回答。

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

LlamaIndex 中的内存模块支持高效地存储和检索对话情境,从而在聊天应用中实现更个性化且感知情境的互动。您可以将 LlamaIndex 中的内存模块与 ChatStoreChatMemoryBuffer 集成。如需了解详情,请参阅 LlamaIndex Chat 存储区

存储聊天记录

适用于 Chat 存储空间的 AlloyDB Omni 记事会向您展示如何使用 AlloyDBChatStore 类通过 AlloyDB for PostgreSQL 存储聊天记录。您将学习如何执行以下操作:

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

Document Reader

Document Reader 可高效地检索 AlloyDB Omni 中的数据,并将其转换为与 LlamaIndex 兼容的格式以进行索引编制。Document Reader 接口提供了将数据从来源加载为 Documents 的方法。

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

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

以文档形式检索数据

适用于 Document Reader 的 AlloyDB Omni 笔记本向您展示了如何使用 AlloyDB Omni 使用 AlloyDBReader 类将数据检索为文档。您将学习如何执行以下操作:

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

后续步骤