揭秘 LlamaIndex|如何持久化存储 LlamaIndex 向量索引?

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: LlamaIndex 作为一个专为构建 LLM 应用设计的新工具,它可以为用户抽象出上述框架中的内容。

大模型时代什么最火?

除了 ChatGPT 以外,诸如 LangChain、LlamaIndex 等构建大模型应用设计的工具热度也一直居高不下。回到 LlamaIndex,随着 AGI 时代的到来,越来越多的开发者开始思考如何有效利用大模型,不过,大家在构建 LLM 应用时普遍会面临三大挑战:

  • LLM 的使用成本高昂
  • LLM 无法及时提供最新信息
  • LLM 缺乏特定专业领域的知识

针对上述问题,业界主流的做法是采用两种主要框架:微调和缓存 + 注入。

微调主要是针对后两点挑战(缺乏正确信息)的解决方法,而缓存 + 注入则是为了解决使用成本高昂的问题。同时,缓存 + 注入的框架也被称为 CVP 架构(即 ChatGPT + Vector Database + Prompt-as-Code)。

在此情况下,LlamaIndex 应运而生。作为一个专为构建 LLM 应用设计的新工具,它可以为用户抽象出上述框架中的内容。

本文为【揭秘 LlamaIndex 系列】,我们将着重讲解如何在 LlamaIndex 中创建并存储向量索引及 2 种持久化存储向量索引的方法。

01. LlamaIndex 简介

LlamaIndex 可以看作管理用户数据和 LLM 之间交互的工具。LlamaIndex 接收输入数据并为其构建索引,随后使用该索引来回答与输入数据相关的问题。LlamaIndex 可以根据手头的任务构建许多类型的索引,例如:向量索引、树索引、列表索引或关键字索引。

每个索引都有其优点和适用场景。例如,列表索引适用于需要处理大量文档的场景;向量索引适用于语义搜索系统;树索引适用于处理稀疏信息的场景;关键字索引适用于查找特定关键字的场景。

在使用 LlamaIndex 时,我们可以存储并加载上述索引进行会话管理。通常情况下,可以本地存储索引上下文。如果想要使用持久化存储引擎来存储索引,以便在后续应用搭建过程中使用,可以参照下文的教程。

02. 创建并保存 LlamaIndex 向量索引

以下教程直接使用了 LlamaIndex 仓库中示例文件夹(https://github.com/jerryjliu/llama_index/tree/main/examples/paul_graham_essay)的数据。请先在本地克隆仓库,并在 paul_graham_essay文件夹中创建 notebook,或从该文件夹直接下载数据,在本地使用代码。

- 使用本地向量数据库

本教程中,我们使用开源向量数据库 Milvus 的 Milvus Lite 版本。使用 Milvus Lite 版本,可以直接在 notebook 中运行代码,无需任何额外的工作。

1. 安装所需软件和环境。不过用户需要 OpenAI API key 才可以使用 GPT 模型,如果需要将 OpenAI API key 存储在.env文件中,请务必安装python-dotenv库。

pip install Milvus llama-index python-dotenv

2. 导入

llama_index中导入GPTVectorStoreIndexStorageContext以及vector_stores模块中的 MilvusVectorStore

  • 从 Milvus 中导入default_server
  • 导入了osload_dotenv以加载 API key
from llama_index import GPTVectorStoreIndex, StorageContext
from llama_index.vector_stores import MilvusVectorStore
from milvus import default_server
from dotenv import load_dotenv
import os
load_dotenv()
open_api_key = os.getenv("OPENAI_API_KEY")

3. 启动向量数据库

  • 调用 default_server上的 start()命令来启动本地 Milvus Lite 实例。
  • 使用 MilvusVectorStore连接向量存储,并传入主机和端口参数。
default_server.start()
vector_store = MilvusVectorStore(
   host = "127.0.0.1",
   port = default_server.listen_port
)

4.配置存储上下文,以便 LlamaIndex 了解在哪里存储索引。然后使用 GPTVectorStoreIndex创建索引,并传入创建索引的文档和存储上下文。随后我们就可以像平常一样查询索引。

本例中,我们通过 "What did the author do growing up?(作者成长过程中做了哪些事?)"这个问题进行查询。查询时,系统会为这个问题创建向量索引,从而抽象出“作者”、“成长”等词汇的语义。

storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = GPTVectorStoreIndex.from_documents(
   documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")

查询后,得到的响应如下:

“Growing up, the author wrote short stories, programmed on an IBM 1401, and nagged his father to buy him a TRS-80 microcomputer. …”(成长过程中,作者写了短篇小说、在一台 IBM 1401 计算机上编程,并劝说他父亲为其购买一台 TRS-80 微型计算机。……)

- 使用云端向量数据库

需要注意的是,如果遇到海量数据,我们推荐使用云端向量数据库来存储 LlamaIndex 向量索引。

以下教程中使用了 Zilliz Cloud向量数据库。Zilliz Cloud 提供全托管的 Milvus 服务。使用 Zilliz Cloud 前,请先注册账号,并创建 1 个 Collection。

与 Milvus 不同,使用 Zilliz Cloud 时需要提供 HOST、PORT、USER和PASSWORD。你可以在 Zilliz Cloud 界面中查看上述主机、端口、用户名和密码信息。

✅ 以下为正确代码示例:

vector_store = MilvusVectorStore(
   host = HOST
   port = PORT,
   user = USER,
   password = PASSWORD,
   use_secure = True,
   overwrite = True
)

❌ 以下为错误代码示例:

vector_store = MilvusVectorStore(
   host = "127.0.0.1",
   port = default_server.listen_port
)

本文最初发表于 Toward AI,已获得转载许可。

如果在使用 Milvus 或 Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
6月前
|
存储 数据挖掘 机器人
使用LOTR合并检索提高RAG性能
RAG结合了两个关键元素:检索和生成。它首先使用语义搜索等高级技术来浏览大量数据,包括文本、图像、音频和视频。RAG的本质在于它能够检索相关信息,然后作为下一阶段的基础。生成组件利用大型语言模型的能力,解释这些数据块,制作连贯的、类似人类的响应。与传统的生成模型相比,这个过程确保RAG系统可以提供更细致和准确的输出。
194 2
|
3月前
|
存储 机器学习/深度学习 自然语言处理
LangChain与向量数据库:高效的信息检索方案
【8月更文第4天】随着自然语言处理技术的发展,特别是深度学习的进步,我们能够更加高效地处理大量的文本数据。LangChain 作为一种强大的工具链,旨在简化和加速构建复杂的自然语言处理应用程序。结合向量数据库,LangChain 可以实现高效且精准的信息检索功能。本文将探讨这一组合的工作原理,并通过一个具体的实现案例来展示其在实际应用中的效果。
436 2
|
12天前
|
机器学习/深度学习 自然语言处理 数据管理
GraphRAG核心组件解析:图结构与检索增强生成
【10月更文挑战第28天】在当今数据科学领域,自然语言处理(NLP)和图数据管理技术的发展日新月异。GraphRAG(Graph Retrieval-Augmented Generation)作为一种结合了图结构和检索增强生成的创新方法,已经在多个应用场景中展现出巨大的潜力。作为一名数据科学家,我对GraphRAG的核心组件进行了深入研究,并在此分享我的理解和实践经验。
35 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
NVIDIA Ampere架构引入了结构化稀疏功能,显著加速了深度学习模型的推理过程。通过2:4的稀疏模式,即每4个相邻权重中有至少2个为0,实现了高效的内存访问和模型推理加速,同时保持了模型精度。腾讯机器学习平台部门利用这一特性,通过渐进式训练方法,实现了模型在搜索引擎中的高效部署与应用,如相关性预测、查询性能预测等场景,不仅提升了处理速度,还在某些情况下超过了原有模型的精度。此外,NVIDIA还提供了TensorRT和cuSPARSELt库,进一步增强了稀疏模型的推理效率。
19 0
 NVIDIA Ampere 架构的结构化稀疏功能及其在搜索引擎中的应用
|
6月前
|
监控 数据处理 索引
整合LlamaIndex与LangChain构建高级的查询处理系统
该文阐述了如何结合LlamaIndex和LangChain构建一个扩展性和定制性强的代理RAG应用。LlamaIndex擅长智能搜索,LangChain提供跨平台兼容性。代理RAG允许大型语言模型访问多个查询引擎,增强决策能力和多样化回答。文章通过示例代码展示了如何设置LLM、嵌入模型、LlamaIndex索引及查询引擎,并将它们转换为LangChain兼容的工具,实现高效、精准的问题解答。通过多代理协作,系统能处理复杂查询,提高答案质量和相关性。
255 0
|
1月前
|
机器学习/深度学习 存储 自然语言处理
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
LangChain-22 Text Embedding 续接21节 文本切分后 对文本进行embedding向量化处理 后续可保存到向量数据库后进行检索 从而扩展大模型的能力
37 0
|
3月前
|
机器学习/深度学习
langchain 入门指南 - 文本分片及向量化
langchain 入门指南 - 文本分片及向量化
87 0
|
6月前
|
自然语言处理 搜索推荐 算法
【一文读懂】基于Havenask向量检索+大模型,构建可靠的智能问答服务
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内的几乎整个阿里的搜索业务。本文针对性介绍了Havenask作为一款高性能的召回搜索引擎,应用在向量检索和LLM智能问答场景的解决方案和核心优势。通过Havenask向量检索+大模型可以构建可靠的垂直领域的智能问答方案,同时快速在业务场景中进行实践及应用。
111112 64
|
6月前
|
存储 数据库 索引
faiss 三种基础索引方式
faiss 三种基础索引方式
307 1
|
6月前
|
存储 机器学习/深度学习 搜索推荐
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
160 3