前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >揭秘 LlamaIndex|如何持久化存储 LlamaIndex 向量索引?

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

作者头像
Zilliz RDS
发布2023-08-25 09:01:59
1.2K0
发布2023-08-25 09:01:59
举报
文章被收录于专栏:Reinvent Data Science
大模型时代什么最火?

除了 ChatGPT 以外,诸如 LangChain、LlamaIndex 等构建大模型应用设计的工具热度也一直居高不下。为此,我们推出了【解码 LangChain系列教程帮助大家轻松上手,接下来便是 【揭秘LlamaIndex】 系列,大家可以按需跳转阅读。

回到 LlamaIndex,随着 AGI 时代的到来,越来越多的开发者开始思考如何有效利用大模型,不过,大家在构建 LLM 应用时普遍会面临三大挑战

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

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

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

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

本文为【揭秘 LlamaIndex 系列】,此前我们已经邀请 LlamaIndex 的联合创始人详解【如何使用私有数据提升 LLM 的能力】,也细致介绍过 LlamaIndex 的各式索引,以及如何查询 LlamaIndex 向量存储索引的简略教程。本次,我们将着重讲解如何在 LlamaIndex 中创建并存储向量索引及 2 种持久化存储向量索引的方法。

01.

LlamaIndex 简介

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

每个索引都有其优点和适用场景。例如,列表索引适用于需要处理大量文档的场景;向量索引适用于语义搜索系统;树索引适用于处理稀疏信息的场景;关键字索引适用于查找特定关键字的场景。(详细介绍可阅读《破解提升 LLMs 性能的黑匣子—— 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库。

代码语言:javascript
复制
pip install Milvus llama-index python-dotenv

2. 导入

  • llama_index中导入GPTVectorStoreIndexStorageContext以及vector_stores模块中的 MilvusVectorStore
  • Milvus中导入default_server
  • 导入了osload_dotenv以加载 API key
代码语言:javascript
复制
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 连接向量存储,并传入主机和端口参数。
代码语言:javascript
复制
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?(作者成长过程中做了哪些事?)"这个问题进行查询。查询时,系统会为这个问题创建向量索引,从而抽象出“作者”、“成长”等词汇的语义。

代码语言:javascript
复制
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 时需要提供 HOSTPORTUSERPASSWORD。你可以在 Zilliz Cloud 界面中查看上述主机、端口、用户名和密码信息。

以下为正确代码示例:

代码语言:javascript
复制
vector_store = MilvusVectorStore(
   host = HOST
   port = PORT,
   user = USER,
   password = PASSWORD,
   use_secure = True,
   overwrite = True
)

以下为错误代码示例

代码语言:javascript
复制
vector_store = MilvusVectorStore(
   host = "127.0.0.1",
   port = default_server.listen_port
)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档