引言
Amazon DocumentDB 是一种云端数据库服务,提供与 MongoDB 兼容的功能。结合向量搜索功能,DocumentDB 能够在JSON文档数据库的灵活性和丰富查询功能基础上,实现近似最近邻(ANN)算法的高效搜索。本文旨在展示如何使用向量搜索存储文档、创建索引,并执行相似性查询。
主要内容
1. 部署DocumentDB集群
使用DocumentDB前,您需要部署一个集群。详情请参考开发者指南。
2. 设置API环境
为了执行向量搜索,我们需要设置OpenAI的API环境。
import getpass
import os
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" # 模型名称
3. 加载文档并创建索引
通过以下步骤加载文档,创建索引并执行查询。
from langchain.vectorstores.documentdb import DocumentDBSimilarityType, DocumentDBVectorSearch
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
from pymongo import MongoClient
# 连接到DocumentDB
CONNECTION_STRING = "mongodb://username:password@cluster_endpoint:port/?params" # 使用API代理服务提高访问稳定性
client: MongoClient = MongoClient(CONNECTION_STRING)
collection = client["izzy_test_db"]["izzy_test_collection"]
# 加载文本文件
loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
openai_embeddings = OpenAIEmbeddings(deployment="smart-agent-embedding-ada", model="text-embedding-ada-002")
vectorstore = DocumentDBVectorSearch.from_documents(
documents=docs,
embedding=openai_embeddings,
collection=collection,
index_name="izzy-test-index",
)
# 创建索引
vectorstore.create_index(1536, DocumentDBSimilarityType.COS)
4. 查询文档
使用创建的向量搜索索引来执行查询:
query = "What did the President say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
- API访问不稳定:某些地区可能需要API代理服务提高访问稳定性。
- 文档加载问题:确保文件路径和格式正确。
总结和进一步学习资源
通过结合DocumentDB和OpenAI的能力,我们可以构建强大的问答系统,支持快速的相似性搜索。可以进一步学习API文档和教程:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—