利用Amazon DocumentDB和向量搜索实现高效问答系统

引言

Amazon DocumentDB 是一种云端数据库服务,提供与 MongoDB 兼容的功能。结合向量搜索功能,DocumentDB 能够在JSON文档数据库的灵活性和丰富查询功能基础上,实现近似最近邻(ANN)算法的高效搜索。本文旨在展示如何使用向量搜索存储文档、创建索引,并执行相似性查询。

主要内容

1. 部署DocumentDB集群

使用DocumentDB前,您需要部署一个集群。详情请参考开发者指南

2. 设置API环境

为了执行向量搜索,我们需要设置OpenAI的API环境。

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

# 连接到DocumentDB
CONNECTION_STRING = "mongodb://username:password@cluster_endpoint:port/?params"  # 使用API代理服务提高访问稳定性
client: MongoClient = MongoClient(CONNECTION_STRING)
collection = client["izzy_test_db"]["izzy_test_collection"]

# 加载文本文件
loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

openai_embeddings = OpenAIEmbeddings(deployment="smart-agent-embedding-ada", model="text-embedding-ada-002")

vectorstore = DocumentDBVectorSearch.from_documents(
    documents=docs,
    embedding=openai_embeddings,
    collection=collection,
    index_name="izzy-test-index",
)

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

4. 查询文档

使用创建的向量搜索索引来执行查询:

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

print(docs[0].page_content)

常见问题和解决方案

  • API访问不稳定:某些地区可能需要API代理服务提高访问稳定性。
  • 文档加载问题:确保文件路径和格式正确。

总结和进一步学习资源

通过结合DocumentDB和OpenAI的能力,我们可以构建强大的问答系统,支持快速的相似性搜索。可以进一步学习API文档和教程:

参考资料

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值