引言
Apache Cassandra是一种高可用、可扩展的NoSQL数据库,以其行导向的结构和分布式架构而闻名。而从5.0版本开始,Cassandra引入了强大的向量搜索功能,使其在处理文本嵌入和自然语言处理任务时更具竞争力。本文旨在帮助开发人员快速上手Cassandra的向量存储功能,并提供一个完整的示例来演示其应用。
主要内容
1. 安装与依赖
为了使用Cassandra的向量存储功能,需要安装以下Python包:
%pip install --upgrade --quiet langchain-community "cassio>=0.1.4"
此外,根据您的LangChain配置,您可能需要安装或升级其他依赖库,如datasets、openai、pypdf和tiktoken。
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}]")
常见问题和解决方案
- 连接失败:检查网络设置和认证信息,确保Cassandra的集群或Astra DB的连接参数正确。
- 性能优化:在批量操作中提升并发级别,以获得更好的性能。
总结和进一步学习资源
本文介绍了如何在Apache Cassandra中使用向量存储功能,包括连接设置、数据加载和搜索操作。通过这些示例,您可以在自己的项目中开始应用这些功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---