向量搜索介绍和 LangChain 集成指南。
什么是 Amazon MemoryDB?
MemoryDB 与流行的开源数据存储 Redis OSS 兼容,使您能够使用他们已经熟悉的灵活友好的 Redis OSS 数据结构、API 和命令快速构建应用程序。通过 MemoryDB,您的所有数据都存储在内存中,这使您能够实现微秒级读取和个位数毫秒级写入延迟以及高吞吐量。MemoryDB 还使用多可用区事务日志将数据持久存储在多个可用区 (AZ) 中,以实现快速故障转移、数据库恢复和节点重启。MemoryDB 的向量搜索
MemoryDB 的向量搜索扩展了 MemoryDB 的功能。向量搜索可以与现有 MemoryDB 功能结合使用。不使用向量搜索的应用程序不受其存在的影响。向量搜索在所有 MemoryDB 可用的区域均可用。您可以使用现有的 MemoryDB 数据或 Redis OSS API 来构建机器学习和生成式人工智能用例,例如检索增强生成、异常检测、文档检索和实时推荐。- Redis 散列和
JSON中多个字段的索引 - 向量相似性搜索(使用
HNSW(ANN) 或FLAT(KNN)) - 向量范围搜索(例如,查找查询向量半径内的所有向量)
- 增量索引而不损失性能
设置
安装 Redis Python 客户端
Redis-py 是一个可用于连接 MemoryDB 的 Python 客户端
MemoryDB 连接
有效的 Redis Url 方案是redis://- 连接到 Redis 集群,未加密rediss://- 连接到 Redis 集群,带 TLS 加密
示例数据
首先我们将描述一些示例数据,以便演示 Redis 向量存储的各种属性。创建 MemoryDB 向量存储
InMemoryVectorStore 实例可以使用以下方法初始化InMemoryVectorStore.__init__- 直接初始化InMemoryVectorStore.from_documents- 从LangChain.docstore.Document对象列表初始化InMemoryVectorStore.from_texts- 从文本列表初始化(可选带元数据)InMemoryVectorStore.from_existing_index- 从现有 MemoryDB 索引初始化
查询
根据您的用例,有多种方法可以查询InMemoryVectorStore 实现
similarity_search:查找与给定向量最相似的向量。similarity_search_with_score:查找与给定向量最相似的向量并返回向量距离similarity_search_limit_score:查找与给定向量最相似的向量,并将结果数量限制为score_thresholdsimilarity_search_with_relevance_scores:查找与给定向量最相似的向量并返回向量相似度max_marginal_relevance_search:查找与给定向量最相似的向量,同时优化多样性
MemoryDB 作为检索器
在这里,我们将介绍将向量存储用作检索器的不同选项。 我们可以使用三种不同的搜索方法进行检索。默认情况下,它将使用语义相似性。similarity_distance_threshold 检索器,它允许用户指定向量距离
similarity_score_threshold 允许用户定义相似文档的最小分数
删除索引
要删除您的条目,您必须通过它们的键来寻址它们。以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。