探索Apache Cassandra中的向量存储功能:从基础到应用

63 阅读2分钟

引言

Apache Cassandra是一种高可用、可扩展的NoSQL数据库,以其行导向的结构和分布式架构而闻名。而从5.0版本开始,Cassandra引入了强大的向量搜索功能,使其在处理文本嵌入和自然语言处理任务时更具竞争力。本文旨在帮助开发人员快速上手Cassandra的向量存储功能,并提供一个完整的示例来演示其应用。

主要内容

1. 安装与依赖

为了使用Cassandra的向量存储功能,需要安装以下Python包:

%pip install --upgrade --quiet langchain-community "cassio>=0.1.4"

此外,根据您的LangChain配置,您可能需要安装或升级其他依赖库,如datasetsopenaipypdftiktoken

2. 初始化与连接

根据您使用的环境,连接Cassandra集群或Astra DB的方式有所不同。

连接Cassandra集群

from cassandra.cluster import Cluster
import cassio

cluster = Cluster(["127.0.0.1"])
session = cluster.connect()
CASSANDRA_KEYSPACE = input("CASSANDRA_KEYSPACE = ")
cassio.init(session=session, keyspace=CASSANDRA_KEYSPACE)

通过CQL连接Astra DB

import cassio

ASTRA_DB_ID = input("ASTRA_DB_ID = ")
ASTRA_DB_APPLICATION_TOKEN = getpass("ASTRA_DB_APPLICATION_TOKEN = ")
desired_keyspace = input("ASTRA_DB_KEYSPACE (optional, can be left empty) = ")

if desired_keyspace:
    ASTRA_DB_KEYSPACE = desired_keyspace
else:
    ASTRA_DB_KEYSPACE = None

cassio.init(
    database_id=ASTRA_DB_ID,
    token=ASTRA_DB_APPLICATION_TOKEN,
    keyspace=ASTRA_DB_KEYSPACE
)

3. 创建和使用向量存储

创建向量存储

from langchain_community.vectorstores import Cassandra
from langchain_openai import OpenAIEmbeddings

embe = OpenAIEmbeddings()

vstore = Cassandra(
    embedding=embe,
    table_name="cassandra_vector_demo",
    # session和keyspace可以在此处设置
)

加载数据集并插入文档

from datasets import load_dataset
from langchain_core.documents import Document

philo_dataset = load_dataset("datastax/philosopher-quotes")["train"]

docs = []
for entry in philo_dataset:
    metadata = {"author": entry["author"]}
    doc = Document(page_content=entry["quote"], metadata=metadata)
    docs.append(doc)

inserted_ids = vstore.add_documents(docs)
print(f"Inserted {len(inserted_ids)} documents.")

运行搜索和删除文档

# 相似性搜索
results = vstore.similarity_search("Our life is what we make of it", k=3)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")

常见问题和解决方案

  1. 连接失败:检查网络设置和认证信息,确保Cassandra的集群或Astra DB的连接参数正确。
  2. 性能优化:在批量操作中提升并发级别,以获得更好的性能。

总结和进一步学习资源

本文介绍了如何在Apache Cassandra中使用向量存储功能,包括连接设置、数据加载和搜索操作。通过这些示例,您可以在自己的项目中开始应用这些功能。

参考资料

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

---END---