引言
Amazon MemoryDB 是一款与 Redis OSS 兼容的内存数据库,提供卓越的读写性能和高吞吐量。通过将内存中的数据持久化到多个可用区,MemoryDB 确保了高可用性和快速恢复。本文将介绍如何在 MemoryDB 上使用向量搜索,并与 Langchain 集成,以支持机器学习和生成式 AI 应用。
主要内容
什么是 Amazon MemoryDB?
MemoryDB 是一个兼容 Redis OSS 的内存数据库,旨在以微秒级读取和毫秒级写入的速度提供高性能和高吞吐量。它使用多可用区的事务日志来保证数据的持久化和快速恢复。
向量搜索的功能
MemoryDB 扩展了其功能以支持向量搜索,能够在保持原有功能的同时,支持检索增强生成、异常检测、文档检索和实时推荐等 AI 应用。
关键功能包括:
- 支持多字段索引
- 向量相似性搜索(HNSW 或 FLAT 算法)
- 向量范围搜索
- 增量索引而不影响性能
设置向量搜索
安装 Redis Python 客户端
首先安装 Python 客户端,以连接到 MemoryDB:
%pip install --upgrade --quiet redis langchain-aws
借助 langchain_aws
库,我们可以轻松集成 MemoryDB:
from langchain_aws.embeddings import BedrockEmbeddings
embeddings = BedrockEmbeddings()
连接 MemoryDB
支持的 Redis URL 模式有:
redis://
- 未加密连接rediss://
- TLS 加密连接
示例数据
以下是将用于演示的示例数据:
metadata = [
{"user": "john", "age": 18, "job": "engineer", "credit_score": "high"},
{"user": "derrick", "age": 45, "job": "doctor", "credit_score": "low"},
# 更多数据...
]
texts = ["foo", "foo", "foo", "bar", "bar"]
index_name = "users"
创建 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代理服务提高访问稳定性
)
vds.index_name # 应输出 "users"
查询
支持多种查询方式:
results = vds.similarity_search("foo")
print(results[0].page_content)
还可以设置得分以返回相似度:
results = vds.similarity_search_with_score("foo", k=5)
for result in results:
print(f"Content: {result[0].page_content} --- Score: {result[1]}")
常见问题和解决方案
- 网络限制问题:在某些地区,可能需要设置 API 代理服务以提高访问稳定性。
- 性能问题:通过增量索引功能,MemoryDB 可以保持高性能。
- 数据持久化:确保在 Redis URL 中正确配置 TLS 以实现安全连接。
总结和进一步学习资源
Amazon MemoryDB 提供了强大的向量搜索功能,支持 Redis 的现有应用。通过简单的设置和与 Langchain 的集成,开发者可以快速构建复杂的 AI 应用。
进一步学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—