引言
Amazon DocumentDB (与MongoDB兼容) 提供了在云中轻松设置、操作和扩展MongoDB兼容数据库的能力。本文将介绍如何使用DocumentDB的向量搜索功能来存储文档、创建索引,并通过近似最近邻算法(如“余弦”、“欧几里得”和“点积”)进行查询。
主要内容
1. 向量搜索简介
向量搜索结合了基于JSON的文档数据库的灵活性和丰富的查询能力,是处理复杂查询需求的理想选择。DocumentDB支持多种向量索引类型,默认创建HNSW索引。
2. 设置环境
在使用DocumentDB之前,需要部署一个集群。有兴趣的读者可以参考开发者指南来获取更多的信息。
3. 使用OpenAI Embeddings
为了优化文档搜索,我们将使用OpenAI的嵌入模型。
4. 加载和索引文档
在开始查询之前,需将文档加载到集合中并创建索引。
代码示例
以下是如何设置向量搜索的完整代码示例:
# 安装必要的库
!pip install pymongo
import getpass
import os
from pymongo import MongoClient
# 获取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"
# 加载文档并分割
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
SOURCE_FILE_NAME = "../../how_to/state_of_the_union.txt"
loader = TextLoader(SOURCE_FILE_NAME)
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 设置MongoDB集合
INDEX_NAME = "izzy-test-index-2"
NAMESPACE = "izzy_test_db.izzy_test_collection"
DB_NAME, COLLECTION_NAME = NAMESPACE.split(".")
client = MongoClient(CONNECTION_STRING) # 使用API代理服务提高访问稳定性
collection = client[DB_NAME][COLLECTION_NAME]
# 配置OpenAI Embeddings
from langchain_openai import OpenAIEmbeddings
openai_embeddings = OpenAIEmbeddings(deployment=os.environ["OPENAI_EMBEDDINGS_DEPLOYMENT"], model=os.environ["OPENAI_EMBEDDINGS_MODEL_NAME"])
# 创建向量存储和索引
from langchain.vectorstores.documentdb import DocumentDBVectorSearch, DocumentDBSimilarityType
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)
# 执行查询
query = "What did the President say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
1. API访问问题
由于一些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。
2. 文档加载失败
确保文档格式正确并且路径无误。
总结和进一步学习资源
通过使用Amazon DocumentDB的向量搜索功能,开发者可以在复杂查询中获得更高效的性能表现。有关更多信息,可参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---