使用Amazon DocumentDB进行向量搜索:强大的云端数据库解决方案

73 阅读2分钟

引言

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的向量搜索功能,开发者可以在复杂查询中获得更高效的性能表现。有关更多信息,可参考以下资源:

参考资料

  1. Amazon DocumentDB 官方文档
  2. OpenAI API 文档

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

---END---