0

0

Langchain中集成Amazon DocumentDB作为向量存储的指南

心靈之曲

心靈之曲

发布时间:2025-11-03 11:18:33

|

680人浏览过

|

来源于php中文网

原创

Langchain中集成Amazon DocumentDB作为向量存储的指南

本文旨在解决在langchain中使用amazon documentdb作为向量存储时遇到的常见问题。尽管documentdb与mongodb兼容,但其向量搜索api有所不同,导致直接使用mongodb atlas集成会失败。文章将详细介绍langchain针对documentdb提供的专用集成方案,并提供示例代码,指导用户正确配置和使用documentdb作为高效的向量存储。

随着大型语言模型(LLMs)和生成式AI应用的兴起,向量数据库已成为存储和检索非结构化数据(如文本嵌入)的关键组件。Langchain作为一个强大的LLM应用开发框架,提供了与多种向量存储的集成能力。Amazon DocumentDB,作为一款与MongoDB兼容的文档数据库服务,近期也推出了向量搜索功能,这为开发者提供了更多选择。然而,在使用Langchain集成DocumentDB作为向量存储时,开发者可能会遇到一些特定的挑战。

理解Amazon DocumentDB与MongoDB的向量搜索差异

许多开发者在尝试将Amazon DocumentDB与Langchain集成时,可能会自然而然地想到复用Langchain中针对MongoDB Atlas的向量存储集成(例如MongoDBAtlasVectorSearch)。这主要是因为DocumentDB宣称与MongoDB兼容。然而,实际操作中,这种尝试往往会导致错误,例如ValueError: 'Database' object is not callable。

问题的核心在于,尽管Amazon DocumentDB在核心数据模型和API上与MongoDB高度兼容,但其向量搜索功能的底层实现和查询API与MongoDB Atlas的向量搜索存在显著差异。这意味着,为MongoDB Atlas设计的Langchain集成模块并不能完全适用于DocumentDB的向量搜索功能。试图强制使用会导致API调用不匹配,进而引发运行时错误。

Langchain对DocumentDB的专用集成

为了解决这一兼容性问题,Langchain已经推出了针对Amazon DocumentDB的专用向量存储集成。这一集成模块充分考虑了DocumentDB向量搜索API的特点,为开发者提供了原生且高效的连接与操作方式。通过使用这个专用的集成,开发者可以避免上述的兼容性问题,并充分利用DocumentDB的向量搜索能力。

如何在Langchain中正确使用DocumentDB作为向量存储

以下是使用Langchain的DocumentDBVectorSearch模块集成Amazon DocumentDB的详细步骤和示例代码。

1. 前置条件

在开始之前,请确保您已满足以下条件:

  • 一个已启用向量搜索功能的Amazon DocumentDB集群。
  • Python环境,并安装了必要的库:langchain-community、pymongo、boto3(如果使用Bedrock embeddings)以及您的嵌入模型库。
  • 已配置AWS凭证,以便访问DocumentDB和Bedrock服务。

2. 安装必要的库

pip install langchain-community pymongo boto3

3. 导入模块并建立连接

首先,您需要从langchain_community.vectorstores.docdb导入DocumentDBVectorSearch类,并设置DocumentDB的连接参数。连接字符串通常包含用户名、密码、集群地址以及认证源。

Veggie AI
Veggie AI

Veggie AI 是一款利用AI技术生成可控视频的在线工具

下载
import os
from pymongo import MongoClient
from langchain_community.vectorstores.docdb import DocumentDBVectorSearch
from langchain_community.embeddings import BedrockEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain_core.documents import Document

# DocumentDB 连接信息
# 推荐使用环境变量或安全配置管理这些敏感信息
DOCDB_CONNECTION_STRING = os.environ.get("DOCDB_CONNECTION_STRING")
DOCDB_DB_NAME = "your_database_name"
DOCDB_COLLECTION_NAME = "your_collection_name"
DOCDB_INDEX_NAME = "vector_index" # 确保在DocumentDB中已创建此向量索引

if not DOCDB_CONNECTION_STRING:
    raise ValueError("DOCDB_CONNECTION_STRING 环境变量未设置。")

# 初始化MongoDB客户端
client = MongoClient(DOCDB_CONNECTION_STRING)
db = client[DOCDB_DB_NAME]
collection = db[DOCDB_COLLECTION_NAME]

# 初始化嵌入模型
# 这里以Amazon Bedrock Embeddings为例
bedrock_embeddings = BedrockEmbeddings(
    model_id="amazon.titan-embed-text-v1",
    region_name="us-east-1" # 根据您的AWS区域调整
)

注意事项:

  • DOCDB_CONNECTION_STRING应包含完整的连接信息,包括认证参数。
  • DOCDB_INDEX_NAME是您在DocumentDB中为向量搜索功能创建的索引名称。请务必确保该索引已存在并配置正确。

4. 准备文档并生成嵌入

接下来,您需要准备要存储的文本数据,并使用选定的嵌入模型将其转换为向量。

# 示例文档
raw_documents = [
    "Langchain是一个用于开发LLM应用的框架。",
    "Amazon DocumentDB提供了MongoDB兼容的数据库服务,现在支持向量搜索。",
    "向量搜索是检索非结构化数据的重要技术。",
    "Bedrock Embeddings是Amazon提供的文本嵌入服务。"
]

# 文档分割器(如果需要处理长文档)
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = []
for i, text in enumerate(raw_documents):
    # 将原始文本包装成Langchain的Document对象
    # 也可以使用text_splitter.create_documents([text])来处理更长的文本
    docs.append(Document(page_content=text, metadata={"source": f"doc_{i}"}))

# 如果文档是字符串列表,也可以直接传入
# docs = text_splitter.create_documents(raw_documents)

5. 将文档上传至DocumentDB

使用DocumentDBVectorSearch.from_documents方法可以将文档及其嵌入直接上传到DocumentDB。这个方法会自动处理嵌入的生成和文档的存储。

print("开始上传文档到DocumentDB...")
vector_store = DocumentDBVectorSearch.from_documents(
    documents=docs,
    embedding=bedrock_embeddings,
    collection=collection, # 传入pymongo的collection对象
    index_name=DOCDB_INDEX_NAME,
)
print("文档上传成功!")

6. 执行向量相似度搜索

一旦文档被存储,您就可以使用similarity_search或as_retriever方法进行向量相似度搜索。

# 执行相似度搜索
query = "什么是Langchain和向量搜索?"
print(f"\n执行相似度搜索,查询: '{query}'")
results = vector_store.similarity_search(query, k=2)

print("\n搜索结果:")
for i, doc in enumerate(results):
    print(f"--- 结果 {i+1} ---")
    print(f"内容: {doc.page_content}")
    print(f"元数据: {doc.metadata}")

# 也可以将其用作检索器
retriever = vector_store.as_retriever(search_kwargs={"k": 1})
retrieved_docs = retriever.invoke(query)
print(f"\n使用检索器获取结果 (k=1):")
for i, doc in enumerate(retrieved_docs):
    print(f"--- 检索结果 {i+1} ---")
    print(f"内容: {doc.page_content}")
    print(f"元数据: {doc.metadata}")

总结与注意事项

  • 专用集成是关键: 始终使用Langchain为Amazon DocumentDB提供的专用向量存储集成(DocumentDBVectorSearch),而不是尝试复用MongoDB Atlas的集成。
  • 向量索引: 确保您的DocumentDB集群已启用向量搜索功能,并且您已在相应的集合上创建了向量索引。index_name参数必须与您在DocumentDB中创建的索引名称一致。
  • 连接字符串: 妥善管理您的DocumentDB连接字符串和凭证,避免硬编码
  • 嵌入模型: Langchain的DocumentDB集成支持多种嵌入模型,您可以根据需求选择,例如Bedrock Embeddings、OpenAI Embeddings等。
  • 性能优化: 对于大规模数据集,考虑DocumentDB集群的扩展性、索引策略以及嵌入模型的选择,以优化搜索性能。

通过遵循本教程,开发者可以有效避免在Langchain中集成Amazon DocumentDB作为向量存储时可能遇到的常见陷阱,并成功构建基于DocumentDB向量搜索能力的LLM应用。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

769

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

639

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1305

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 8.5万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号