使用Weaviate和LlamaIndex构建向量存储索引指南

在本文中,我们将介绍如何将Weaviate与LlamaIndex结合使用,构建和查询向量存储索引。此方法可以帮助我们有效地管理和查询大量文档数据。本文还将提供一个实际的Demo代码,展示如何一步步实现上述功能。

创建Weaviate客户端

首先,我们需要安装所需的包:

%pip install llama-index-vector-stores-weaviate
!pip install llama-index

然后,创建一个Weaviate客户端:

import os
import openai

# 设置环境变量
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY_HERE"
openai.api_key = os.environ["OPENAI_API_KEY"]

import logging
import sys

logging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

import weaviate

# 连接到云端Weaviate
resource_owner_config = weaviate.AuthClientPassword(
    username="<username>",
    password="<password>",
)
client = weaviate.Client(
    "https://llama-test-ezjahb4m.weaviate.network",
    auth_client_secret=resource_owner_config,
)

# 本地连接可以使用如下代码
# client = weaviate.Client("http://localhost:8080")

加载文档,建立向量存储索引

下载数据并加载文档:

!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'

构建向量存储索引:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.vector_stores.weaviate import WeaviateVectorStore
from IPython.display import Markdown, display

# 加载文档
documents = SimpleDirectoryReader("./data/paul_graham").load_data()

# 初始化存储上下文
from llama_index.core import StorageContext

vector_store = WeaviateVectorStore(weaviate_client=client, index_name="LlamaIndex")
storage_context = StorageContext.from_defaults(vector_store=vector_store)

# 创建向量存储索引
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)

查询索引

# 设置日志级别为DEBUG以获得详细输出
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
display(Markdown(f"<b>{response}</b>"))

# 输出结果

加载已创建的索引

resource_owner_config = weaviate.AuthClientPassword(
    username="<username>",
    password="<password>",
)
client = weaviate.Client(
    "https://llama-test-ezjahb4m.weaviate.network",
    auth_client_secret=resource_owner_config,
)

vector_store = WeaviateVectorStore(
    weaviate_client=client, index_name="LlamaIndex"
)

# 从向量存储中加载索引
loaded_index = VectorStoreIndex.from_vector_store(vector_store)

# 设置日志级别为DEBUG以获得详细输出
query_engine = loaded_index.as_query_engine()
response = query_engine.query("What happened at interleaf?")
display(Markdown(f"<b>{response}</b>"))

元数据过滤查询

from llama_index.core import Document

# 插入一个示例文档
doc = Document.example()
print(doc.metadata)
print("-----")
print(doc.text[:100])

loaded_index.insert(doc)

from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters

# 创建元数据过滤器
filters = MetadataFilters(
    filters=[ExactMatchFilter(key="filename", value="README.md")]
)
query_engine = loaded_index.as_query_engine(filters=filters)
response = query_engine.query("What is the name of the file?")
display(Markdown(f"<b>{response}</b>"))

可能遇到的错误

  1. 网络连接问题:在连接到Weaviate服务器时,可能会遇到网络连接问题。请检查网络连接和服务器地址。
  2. API密钥问题:如果出现API密钥无效的情况,请确保环境变量已正确设置,并且API密钥有效。
  3. 数据格式问题:加载文档时,确保文档格式正确,否则可能会导致解析错误。

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

参考资料:

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值