今天,我们宣布 Amazon MemoryDB 的向量搜索功能正式上线。这是一项新功能,允许用户存储、索引、检索和搜索向量,以便开发拥有内存性能和多可用区耐久性的实时机器学习ML和 生成式人工智能 应用。
借助此发布,Amazon MemoryDB 提供了在亚马逊网络服务AWS上热门向量数据库中最快的向量搜索性能以及最高回忆率。您不再需要在吞吐量、回忆率和延迟之间进行权衡,这些因素过去通常是相互制约的。
现在,您可以利用一个 MemoryDB 数据库来存储应用程序数据和数百万个向量,查询和更新响应时间可达个位数毫秒,同时实现最高的回忆水平。这简化了您的生成式人工智能应用架构,同时提供峰值性能,并降低许可成本、运营负担以及对数据洞察的交付时间。
使用 Amazon MemoryDB 的向量搜索,您可以利用现有的 MemoryDB API 实现生成式人工智能用例,如 增强型生成RAG、异常欺诈检测、文档检索和实时推荐引擎。您还可以使用人工智能和机器学习AI/ML服务如 Amazon Bedrock 和 Amazon SageMaker 生成向量嵌入,并将其存储到 MemoryDB 中。
1 实时语义搜索以增强生成RAG您可以利用向量搜索从大量数据中检索相关段落,以增强大型语言模型LLM。这通过将文档语料库分块并使用 Amazon Titan 多模态嵌入模型 生成每个块的向量嵌入实现,然后将这些向量嵌入加载到 Amazon MemoryDB 中。
使用 RAG 和 MemoryDB,您可以构建实时的生成式人工智能应用,以向量的方式表示物品,找到相似产品或内容,或者以密集向量的方式表示文本文档,搜索这些文档以捕捉语义含义。
2 低延迟持久语义缓存语义缓存是一种通过将基础模型FM的先前结果存储在内存中来降低计算成本的过程。您可以将先前推断的答案与问题的向量表示一起存储在 MemoryDB 中,并在不从 LLM 推断另一答案的情况下重用它们。

如果用户的查询与已定义的相似性评分相似,MemoryDB 将返回先前问题的答案。这一用例使您的生成式人工智能应用能够更快地响应,同时降低了向 FM 发起新请求的成本,提高了客户的用户体验。
3 实时异常欺诈检测您可以使用向量搜索进行异常欺诈检测,补充您的基于规则和批处理 ML 流程,通过存储用向量表示的交易数据,以及表示这些交易是否被识别为欺诈的元数据。
机器学习流程可以在新的交易与表示欺诈交易的向量高度相似时,检测到用户的欺诈交易。通过利用 MemoryDB 的向量搜索,您可以根据批量 ML 模型建模欺诈交易,然后将正常和欺诈交易加载到 MemoryDB 中,通过主成分分析PCA等统计分解技术生成其向量表示。
在前端应用程序中,当新交易流入时,您可以通过生成该交易的向量表示来执行与 MemoryDB 的向量搜索,如果该交易与过去检测到的欺诈交易高度相似,您可以在个位数毫秒内拒绝该交易,以降低欺诈风险。
以下是实现简单语义搜索应用程序的步骤:
免费国际加速器步骤 1:创建支持向量搜索的集群您可以在 MemoryDB 控制台 中创建一个 MemoryDB 集群,以启用向量搜索。在创建或更新集群时,选择“启用向量搜索”。向量搜索适用于 MemoryDB 版本 71 和单分片配置。
步骤 2:使用 Amazon Titan 嵌入模型创建向量嵌入您可以使用 Amazon Titan 文本嵌入 或其他嵌入模型创建向量嵌入,这些模型在 Amazon Bedrock 中可用。您可以加载 PDF 文件,将文本拆分为块,并通过与 AWS 服务集成的 LangChain 库 使用单个 API 获取向量数据。
pythonimport redisimport numpy as npfrom langchaindocumentloaders import PyPDFLoaderfrom langchaintextsplitter import RecursiveCharacterTextSplitterfrom langchainembeddings import BedrockEmbeddings
loader = PyPDFLoader(filepath=pdfpath)pages = loaderloadandsplit()textsplitter = RecursiveCharacterTextSplitter( separators=[nn n ] chunksize=1000 chunkoverlap=200)chunks = loaderloadandsplit(textsplitter)
client = RedisCluster( host=myclustermemorydbuseast1amazonawscom port=6379 ssl=True sslcertreqs=none decoderesponses=True)
embedding = BedrockEmbeddings( regionname=useast1 endpointurl=https//bedrockruntimeuseast1amazonawscom)
for id dd in enumerate(chunks) y = embeddingsembeddocuments([dd]) j = nparray(y dtype=npfloat32)tobytes() clienthset(foakDoc{id} mapping={embed j text chunks[id]})
一旦使用 Amazon Titan 文本嵌入模型生成向量嵌入,您可以连接到 MemoryDB 集群并使用 MemoryDB 的 HSET 命令保存这些嵌入。
步骤 3:创建向量索引要查询向量数据,请使用 [FTCREATE](https//docsawsamazoncom/memorydb/latest/devguide/vectorsearchcommandsftcreatehtml) 命令创建一个向量索引。向量索引也在 MemoryDB 键空间的子集上构建和维护。向量可以以 JSON 或 HASH 数据类型保存,所有对向量数据的修改会自动在向量索引的键空间中更新。
pythonfrom rediscommandssearchfield import TextField VectorField
index = clientft(idxtestIndex)createindex([ VectorField( embed FLAT { TYPE FLOAT32 DIM 1536 DISTANCEMETRIC COSINE } ) TextField(text)])
在 MemoryDB 中,您可以使用四种类型的字段:数字字段、标签字段、文本字段和向量字段。向量字段支持使用平面搜索FLAT和层次小世界导航HNSW算法的固定大小向量的 K 最近邻搜索KNN。该功能支持不同的距离度量,例如欧几里得、余弦和内积。我们将使用欧几里得距离,它是向量空间中两点之间角度距离的度量。欧几里得距离越小,向量之间越接近。
步骤 4:搜索向量空间您可以使用 FTSEARCH 和 FTAGGREGATE 命令查询您的向量数据。每个操作符使用索引中的一个字段来识别子集的键。您可以根据与 MemoryDB 中的向量字段与查询向量之间的某个预定义阈值RADIUS的距离查询并找到筛选结果。
pythonfrom rediscommandssearchquery import Query
query = ( Query(@vector[VECTORRANGE radius vec]=gt{YIELDDISTANCEAS score}) paging(0 3) sortby(vector score) returnfields(id score) dialect(2))
queryparams = { radius 08 vec nprandomrand(VECTORDIMENSIONS)astype(npfloat32)tobytes()}
results = clientft(index)search(query queryparams)docs
例如,当使用余弦相似度时,RADIUS 值范围从 0 到 1,越接近 1 的值意味着找到与搜索中心更相似的向量。
以下是找到所有距查询向量在 08 以内的向量的示例结果。
python[Document {id doca payload None score 0243115246296} Document {id docc payload None score 024981123209} Document {id docb payload None score 0251443207264}]
要了解更多信息,您可以查看与 MemoryDB 结合使用的 RAG 的 示例生成式人工智能应用。
在 reInvent 2023 上,我们发布了 MemoryDB 的向量搜索 预览版。根据客户反馈,现已提供以下新功能和改进:
新功能描述VECTORRANGE让 MemoryDB 作为低延迟持久语义缓存,实现成本优化和性能改善SCORE改进向量搜索时的相似性筛选共享内存避免在内存中重复向量,向量存储在 MemoryDB 键空间中,指向向量的指针存储在向量索引中高过滤率的性能改进为性能密集型生成式人工智能应用提供强大支持向量搜索已经在 MemoryDB 所有可用的区域中上线。要了解更多关于 Amazon MemoryDB 的向量搜索 的信息,请参阅 AWS 文档。
您可以在 MemoryDB 控制台 上尝试此功能,并通过 AWS rePost for Amazon MemoryDB 或通过您常规的 AWS 支持渠道发送反馈。
Channy
Channy 是 AWS 云的首席开发者倡导者。他热爱开放网络、社区驱动的学习和技术分享。