探索Amazon DocumentDB中的向量搜索:从基础到应用

115 阅读2分钟

探索Amazon DocumentDB中的向量搜索:从基础到应用

在当今的数据驱动世界中,如何高效地存储和查询复杂数据是开发者必须面对的挑战。Amazon DocumentDB,不仅兼容MongoDB,还引入了强大的向量搜索功能,这为数据操作带来了新的可能性。本篇文章将详细探索如何在Amazon DocumentDB中设置和使用向量搜索。

引言

Amazon DocumentDB是一个兼容MongoDB的数据库服务,提供了便捷的设置、运行和扩展MongoDB数据库的能力。其向量搜索功能结合了JSON文档数据库的灵活性与向量搜索的强大能力。本文旨在为您提供关于如何在DocumentDB中存储文档、创建索引并使用近似邻居算法(例如“余弦”、“欧几里得”和“点积”)进行向量搜索的实用指南。

主要内容

部署集群

在使用Amazon DocumentDB之前,您需首先部署一个集群。有关更多信息,请参考开发者指南。

配置OpenAI Embeddings

为了使用OpenAI的嵌入模型,我们需要配置环境变量:

import os
import getpass

# 配置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" # 模型名

文档加载与索引创建

使用TextLoader加载文档,并使用CharacterTextSplitter进行文本拆分。

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)

生成并存储向量

通过DocumentDB的向量存储实现文档的向量化和索引创建。

from pymongo import MongoClient
from langchain.vectorstores.documentdb import DocumentDBVectorSearch, DocumentDBSimilarityType
from langchain_openai import OpenAIEmbeddings

CONNECTION_STRING = "YOUR_CONNECTION_STRING"  # 使用API代理服务提高访问稳定性
client = MongoClient(CONNECTION_STRING)
collection = client["izzy_test_db"]["izzy_test_collection"]

openai_embeddings = OpenAIEmbeddings(deployment="smart-agent-embedding-ada", model="text-embedding-ada-002")
vectorstore = DocumentDBVectorSearch.from_documents(docs, openai_embeddings, collection, index_name="izzy-test-index-2")
vectorstore.create_index(dimensions=1536, similarity_algorithm=DocumentDBSimilarityType.COS)

代码示例

# 执行相似性搜索
query = "What did the president say about Ketanji Brown Jackson"
results = vectorstore.similarity_search(query)

for doc in results:
    print(doc.page_content)

常见问题和解决方案

  1. 网络访问问题:在某些地区,访问国际 API 服务可能受限,建议使用 API 代理服务,以保证高效稳定的访问。
  2. 索引创建失败:确保已正确配置数据库连接和索引参数,检查日志了解错误详情。

总结和进一步学习资源

通过本文,您了解了如何利用Amazon DocumentDB进行向量搜索的基本步骤。继续深挖,您可以参考以下资源以获取更深入的了解:

参考资料

  1. Amazon DocumentDB 官方文档
  2. OpenAI 官方文档
  3. Langchain 文档

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

---END---