亚马逊AWS官方博客
Amazon DynamoDB 现已支持任意规模的实时向量搜索
今天,我们宣布在 Amazon DynamoDB 中正式发布向量搜索功能。现在,您可以将向量嵌入与操作数据一起存储在 DynamoDB 中,并直接对这些数据运行相似性搜索,无需将其复制到单独的向量存储中。
DynamoDB 支持原生向量搜索,具有个位数毫秒级延迟和 99% 以上的召回率,并且专为任意规模设计,即使面对数万亿个向量也能游刃有余。无需预置、修补或管理服务器,也不需要安装、维护或操作软件。该服务没有版本概念,没有维护窗口,可实现零停机时间维护。
向量索引没有存储限制,并会随着数据增长而水平扩展。现在,您可以使用 DynamoDB 及其原生向量搜索来构建需要语义检索的应用程序,例如代理内存、检索增强生成、推荐引擎、个性化体验、异常检测等。
如果您的应用程序已在用 DynamoDB,以往添加向量搜索需要将数据复制到专用的向量数据库中,同时还要维护两个服务之间的同步管道。这会增加运营开销、数据迁移成本、许可成本,以及大规模保持可预测低延迟的挑战。借助 DynamoDB 内建的向量搜索功能,您的向量和操作数据共享相同的无服务器基础设施和相同的按请求付费定价模式。
DynamoDB 中的向量搜索引入了新的索引类型,您可以在存储向量嵌入的属性上创建该索引。您可使用自选的模型(例如 Amazon Bedrock Titan Text Embeddings、Cohere Embed 或 OpenAI 文本嵌入模型)生成嵌入,然后通过标准的 PutItem 调用将它们作为浮点数列表存储在表中。然后,您在该属性上创建向量索引,并指定维度数量、距离函数,以及任何希望在查询时用作筛选条件以缩小搜索结果范围的非向量属性。SearchVectors API 接受查询向量、要返回的结果数量(最多 100 个)以及可选的筛选条件。它会按相似度排序返回结果。
当您的操作数据已存在于 DynamoDB 中,并且您希望在不预置单独数据库或管理同步管道的情况下添加相似性搜索时,请使用 DynamoDB 中的向量搜索。DynamoDB 是完全无服务器的,因此向量搜索会自动扩展,无需管理任何基础设施。它支持最多 4096 维度、欧氏距离、余弦距离和点积距离函数,以及内联筛选。
DynamoDB 向量搜索入门
本演练展示了如何使用 DynamoDB 控制台向现有 DynamoDB 表添加向量搜索。场景中包含一个在线体育用品商店及其产品目录表。每个项目都包含标准操作属性,例如 productId、category、description、marketplace、name 和 price。目标是添加语义搜索,使购物者能够使用自然语言查询而非精确关键词匹配来查找产品。
1.准备 DynamoDB 表
为了启用语义搜索,我首先为表中已有的产品描述生成向量嵌入。嵌入是由机器学习模型生成的文本数值表示,能够捕捉内容的含义。具有相似描述的两个项目在向量空间中的嵌入会彼此接近,这正是相似性搜索得以实现的基础。

我可以使用 Amazon Bedrock Titan Text Embeddings 或其他嵌入模型生成嵌入,然后使用 AWS 管理控制台、AWS 命令行界面(AWS CLI)、AWS SDK、AWS CloudFormation 或其他基础设施即代码(IaC)工具将其添加到表中。
对于像 ProductCatalog 这样的现有表,我通过 UpdateItem 调用,将嵌入作为名为 descriptionEmbedding 的新属性添加到每个项目中。DynamoDB 使用其现有的列表数据类型存储向量嵌入。列表中的每个元素都是一个数值,表示嵌入向量的单个浮点值。这意味着我无需新增数据类型或更改架构即可开始将向量与现有的操作属性一起存储。
2.创建向量索引
在 DynamoDB 控制台中,打开 ProductCatalog 表并选择索引选项卡。我选择创建向量索引。在创建向量索引页面上,我按如下方式填写索引详细信息。我输入 ProductDescriptionIndex 作为索引名称,输入 descriptionEmbedding 作为向量属性。

我输入与我的嵌入模型输出匹配的维度数量,并选择余弦作为距离函数。余弦距离衡量向量之间的角度而非大小,这使得它对于比较文本嵌入的语义相似性非常有效。DynamoDB 中的向量搜索还支持欧氏和点积距离函数。
- 欧氏距离:当向量的大小有意义时使用,如按购买次数等数值对项目聚类。
- 点积:当方向和大小都重要时使用,如在将兴趣匹配度和频次一起加权的推荐系统中。通常,为使准确性最佳,请选择与训练您的嵌入模型时所用函数相匹配的距离函数。
我输入 marketplace 作为分区键。向量索引分区键控制 DynamoDB 如何在各个分区之间分布向量,使索引能够在保持可预测延迟的同时进行横向扩展。每次搜索都限定在单个分区键值范围内,因此服务于多个市场区域的产品目录可以在一个市场区域的库存内进行搜索,而无需扫描整个索引。分区键是可选的,但对于具有高查询吞吐量的大型数据集,建议使用。
我展开内联筛选属性并添加类别作为筛选属性。这有助于我在查询时将搜索结果缩小到特定的产品类别。筛选条件仅支持精确匹配值;不支持 BETWEEN 或 BEGINS_WITH 等范围条件。我将属性投影保留为全部,以便所有表属性都与搜索结果一起返回。选择创建向量索引,然后等待索引状态变为活动。
3.运行向量搜索
我使用与产品描述相同的嵌入模型,从自然语言搜索词(例如“lightweight running shoes for summer”)生成查询向量。在 DynamoDB 控制台中,我在左侧导航窗格中选择浏览项目,然后选择 ProductCatalog 表。
选择搜索切换到向量搜索模式。我从选择向量索引下拉列表中选择 ProductDescriptionIndex,将查询向量粘贴到搜索向量字段中,并将结果数量(前 K 名)设置为 5。我输入 US 作为分区键值,将搜索范围限定为美国市场区域。 我展开内联筛选属性并将类别设置为鞋类,将搜索范围缩小到仅鞋类产品。现在,选择运行。

DynamoDB 会返回鞋类类别中语义最相似的五个产品,按相似度得分排序,并在同一响应中附带名称和价格等标准操作属性。相似度得分的含义取决于为索引选择的距离函数。对于余弦距离和欧氏距离函数,较低的相似度得分值表示较高的相似度,得分为 0 表示向量完全相同。对于点积距离函数,较高的相似度得分值表示较高的相似度。
要以编程方式与向量搜索交互(包括调用 API 和搜索文档),请尝试结合您偏好的人工智能编码工具使用 AWS MCP 服务器和插件。 要了解更多信息,请访问 Amazon DynamoDB 开发人员指南。
立即开始
Amazon DynamoDB 的向量搜索已在所有商业 AWS 区域正式推出,包括 AWS GovCloud(美国)区域。有关区域可用性和未来路线图,请访问按区域列出的 AWS 功能。有关定价的详细信息,请访问 Amazon DynamoDB 定价页面。
立即开始探索 DynamoDB 中的向量搜索,并将反馈发送至 AWS re:Post for Amazon DynamoDB 或通过您常用的 AWS Support 联系人提交。