引言
在当今的数据驱动世界中,Couchbase作为一款分布式NoSQL数据库,以其无与伦比的性能、可扩展性和经济价值,被广泛应用于各种云、移动、AI和边缘计算应用中。本文将详细介绍如何在Couchbase中使用向量搜索(Vector Search),并展示实用的代码示例以帮助开发者更好地利用这项强大的功能。
主要内容
向量搜索简介
向量搜索是Couchbase全文搜索服务(Search Service)的一部分,能够通过语义相似性进行快速高效的文本检索。它在处理自然语言查询时非常有效,特别是在需要处理模糊匹配和语义相似的情况下。
设置环境
在开始使用向量搜索之前,首先需要安装langchain-couchbase包:
pip install -qU langchain-couchbase
获取凭据
然后,您需要在Couchbase官网创建一个新的连接,并保存您的数据库用户名和密码:
import getpass
COUCHBASE_CONNECTION_STRING = getpass.getpass(
"Enter the connection string for the Couchbase cluster: "
)
DB_USERNAME = getpass.getpass("Enter the username for the Couchbase cluster: ")
DB_PASSWORD = getpass.getpass("Enter the password for the Couchbase cluster: ")
初始化连接
创建连接对象后,我们将连接至Couchbase集群,并设置桶、范围和集合名称:
from datetime import timedelta
from couchbase.auth import PasswordAuthenticator
from couchbase.cluster import Cluster
from couchbase.options import ClusterOptions
auth = PasswordAuthenticator(DB_USERNAME, DB_PASSWORD)
options = ClusterOptions(auth)
cluster = Cluster(COUCHBASE_CONNECTION_STRING, options)
# 等待集群准备就绪
cluster.wait_until_ready(timedelta(seconds=5))
BUCKET_NAME = "langchain_bucket"
SCOPE_NAME = "_default"
COLLECTION_NAME = "default"
SEARCH_INDEX_NAME = "langchain-test-index"
关于如何创建支持向量字段的搜索索引的详细信息,请参考Couchbase文档.
创建向量存储对象
我们将通过集群信息和搜索索引名称创建向量存储对象。
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_couchbase.vectorstores import CouchbaseVectorStore
vector_store = CouchbaseVectorStore(
cluster=cluster,
bucket_name=BUCKET_NAME,
scope_name=SCOPE_NAME,
collection_name=COLLECTION_NAME,
embedding=embeddings,
index_name=SEARCH_INDEX_NAME,
)
使用API代理服务提高访问稳定性
管理向量存储
创建向量存储后,我们可以通过添加和删除项目与之进行交互。
添加项目至向量存储
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(page_content="I had chocolate chip pancakes.", metadata={"source": "tweet"}),
Document(page_content="The weather forecast for tomorrow.", metadata={"source": "news"}),
# 更多文档...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
删除项目
vector_store.delete(ids=[uuids[-1]])
查询向量存储
results = vector_store.similarity_search(
"LangChain provides abstractions to make working with LLMs easy",
k=2,
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
混合查询
Couchbase允许通过向量搜索结果与非向量字段(如metadata对象)组合进行混合搜索。
query = "What did I eat for breakfast today?"
results = vector_store.similarity_search(query, fields=["metadata.source"])
print(results[0])
常见问题和解决方案
问:在创建CouchbaseVectorStore对象之前是否需要先创建搜索索引? 答:是的,您需要先创建搜索索引。
问:为什么我在搜索结果中看不到所有指定的字段? 答:请确保指定字段已存储在搜索索引中,并在高级设置中启用“存储动态字段”。
总结和进一步学习资源
通过本文的介绍,大家已经掌握了如何在Couchbase中进行向量搜索,并了解了一些常见问题及其解决方案。希望本文能帮助大家更好地使用Couchbase的强大功能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---