技术背景介绍
Amazon MemoryDB 是兼容 Redis OSS 的内存数据库服务,提供了微秒级的读取延迟和高吞吐量。它能够将数据跨多个可用区(AZ)持久化存储,以实现快速的故障转移和数据库恢复等功能。MemoryDB 扩展了其功能,支持向量搜索,这对于构建机器学习和生成式 AI 应用非常有用。
核心原理解析
MemoryDB 使用向量搜索技术来处理诸如生成增强检索、异常检测、文档检索以及实时推荐等 AI 用例。它支持多字段索引和向量相似度搜索(通过 HNSW 或 FLAT 算法实现),并允许增量索引而不影响性能。
代码实现演示
下面的代码演示如何通过 Langchain 将 MemoryDB 用作向量存储,并在其中执行向量搜索。
环境设置
首先安装所需的 Python 包:
%pip install --upgrade --quiet redis langchain-aws
MemoryDB 连接
使用 redis-py
客户端连接到 MemoryDB:
from langchain_aws.embeddings import BedrockEmbeddings
# 初始化嵌入
embeddings = BedrockEmbeddings()
# 创建向量存储实例
from langchain_aws.vectorstores.inmemorydb import InMemoryVectorStore
# 设置 Redis 连接 URL 和初始化向量存储
vds = InMemoryVectorStore.from_texts(
embeddings,
redis_url="rediss://cluster_endpoint:6379/ssl=True ssl_cert_reqs=none",
)
样本数据
定义样本数据以进行存储演示:
metadata = [
{"user": "john", "age": 18, "job": "engineer", "credit_score": "high"},
{"user": "derrick", "age": 45, "job": "doctor", "credit_score": "low"},
{"user": "nancy", "age": 94, "job": "doctor", "credit_score": "high"},
{"user": "tyler", "age": 100, "job": "engineer", "credit_score": "high"},
{"user": "joe", "age": 35, "job": "dentist", "credit_score": "medium"},
]
texts = ["foo", "foo", "foo", "bar", "bar"]
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]}")
应用场景分析
MemoryDB 的向量搜索功能可以广泛应用于各种 AI 场景,如文本检索、用户推荐系统等。其性能优势使其非常适合高频数据访问场景。
实践建议
- 充分利用 MemoryDB 的内存存储特性,以降低数据访问延迟。
- 根据具体场景选择合适的向量搜索算法(如 HNSW 或 FLAT)。
- 考虑使用 TLS 加密连接以确保数据传输安全。
如果遇到问题欢迎在评论区交流。
—END—