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

54 阅读2分钟

引言

Amazon DocumentDB(具有MongoDB兼容性)提供了在云端轻松设置、操作和扩展MongoDB兼容数据库的能力。本文将探索Amazon DocumentDB中的向量搜索功能,它结合了JSON文档数据库的灵活性和丰富的查询能力与向量搜索的强大功能。我们将展示如何使用近似最近邻算法(如“余弦”、“欧几里得”和“点积”)在DocumentDB中存储文档、创建索引并执行向量搜索。

主要内容

1. 部署DocumentDB集群

在使用DocumentDB之前,您需要先部署一个集群。有关更多的详细步骤,请参考开发者指南

2. 设置OpenAI环境

由于我们将使用OpenAI的嵌入服务,需要设置相关的环境变量。

import getpass
import os

# 设置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"

3. 加载文档并创建索引

使用文档加载器加载文档,并利用向量索引功能创建索引。

from langchain.vectorstores.documentdb import (
    DocumentDBSimilarityType,
    DocumentDBVectorSearch,
)
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)

# 配置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
)

4. 创建向量索引并进行查询

通过向量索引执行查询操作。

from pymongo import MongoClient

# 使用API代理服务提高访问稳定性
CONNECTION_STRING = getpass.getpass("DocumentDB Cluster URI:")
client = MongoClient(CONNECTION_STRING)
collection = client[DB_NAME][COLLECTION_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)

query = "What did the President say about Ketanji Brown Jackson"
docs = vectorstore.similarity_search(query)

print(docs[0].page_content)

常见问题和解决方案

问题1:网络访问不稳定

解决方案:对于某些地区,由于网络限制,建议使用API代理服务,以提高访问稳定性。

问题2:索引创建失败

解决方案:确保提供的文档格式正确,并且在创建索引时与指定的维度和算法兼容。

总结和进一步学习资源

Amazon DocumentDB的向量搜索功能为开发者提供了一种强大的方式来处理和查询海量数据。通过与OpenAI和langchain库的结合,我们可以轻松实现高级查询功能。

参考资料

  1. Amazon DocumentDB with MongoDB Compatibility
  2. Using Langchain with OpenAI

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

---END---