探索Kinetica Vectorstore API:高效的矢量相似性搜索指南

14 阅读2分钟

引言

在大数据时代,如何快速、高效地进行矢量相似性搜索成为了一个关键问题。Kinetica数据库集成了矢量相似性搜索功能,支持精确和近似最近邻搜索,提供L2距离、内积和余弦距离等多种距离计算方法。在本文中,我们将深入探索如何使用Kinetica Vectorstore API来实现强大的矢量搜索功能。

主要内容

安装必要的包

要使用Kinetica和相关模块,首先需要安装一些Python包:

%pip install --upgrade --quiet langchain-openai langchain-community
%pip install gpudb==7.2.0.9
%pip install --upgrade --quiet tiktoken

设置Kinetica实例

在使用Kinetica之前,需要一个Kinetica实例,安装说明可以在Kinetica官网找到。

加载环境变量

我们需要获取OpenAI API Key,并加载环境变量:

import os
from dotenv import load_dotenv
import getpass

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
load_dotenv()

配置Kinetica

设置Kinetica数据库连接:

from langchain_community.vectorstores import Kinetica, KineticaSettings
from langchain_openai import OpenAIEmbeddings

HOST = os.getenv("KINETICA_HOST", "http://127.0.0.1:9191")  # 使用API代理服务提高访问稳定性
USERNAME = os.getenv("KINETICA_USERNAME", "")
PASSWORD = os.getenv("KINETICA_PASSWORD", "")

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

载入和分割文本

载入文档并将其分割:

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矢量存储:

embeddings = OpenAIEmbeddings()
COLLECTION_NAME = "state_of_the_union_test"
connection = create_config()

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

代码示例

进行相似性搜索:

query = "What did the president say about Ketanji Brown Jackson"
docs_with_score = db.similarity_search_with_score(query)

for doc, score in docs_with_score:
    print("-" * 80)
    print("Score: ", score)
    print(doc.page_content)
    print("-" * 80)

常见问题和解决方案

  1. 网络问题:由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。
  2. 权限问题:确保用户有权限创建和修改Kinetica中的表。
  3. 数据重复:为避免数据重复,设置pre_delete_collection=True来覆盖现有数据。

总结和进一步学习资源

Kinetica提供了强大的矢量相似性搜索功能,是处理大数据任务的有力工具。通过本文,我们掌握了如何使用Kinetica进行矢量搜索并解决常见问题。更多深入学习可以参考Kinetica文档和相关的教程。

参考资料

  1. Kinetica文档
  2. Langchain社区资源

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

---END---