亚马逊AWS官方博客

Amazon S3 Vectors 现已正式推出,规模更大,性能更强

今天,我很高兴地宣布,Amazon S3 Vectors 正式推出,其扩展性和生产级性能均显著提升。S3 Vectors 是首个原生支持存储和查询向量数据的云对象存储。与专业的向量数据库解决方案相比,它可以帮助您将存储和查询向量的总成本降低多达 90%。

自从我们在 7 月发布 S3 Vectors 预览版以来,大家如此迅速地采用这项存储和查询向量数据的新功能,我很惊喜。在短短四个多月内,大家就创建了超过 25 万个向量索引,摄取了超过 400 亿个向量,执行了超过 10 亿次查询(截至 11 月 28 日)。

现在,您可以在单个索引中存储和搜索多达 20 亿个向量,相当于每个向量存储桶最多可存储 20 万亿个向量,比预览版中每个索引 5000 万个向量的容量提升了 40 倍。这意味着您可以将整个向量数据集整合到一个索引中,无需再将数据分片到多个较小的索引中,也无需实施复杂的查询联合逻辑。

查询性能已优化。不常用的查询仍可在 1 秒内返回结果,而常用查询的延迟现在约为 100 毫秒或更低,因此非常适合对话式人工智能和多代理工作流程等交互式应用。此外,每次查询最多可检索 100 条搜索结果(之前为 30 条),从而为检索增强生成(RAG)应用提供更全面的上下文信息。

写入性能也得到了显著提升,在将单向量更新流式传输到索引时,每秒最多可支持 1000 次 PUT 事务,从而显著提高小批量数据的写入吞吐量。这种更高的吞吐量支持那些必须可立即搜索新数据的工作负载,帮助您快速摄取小型数据集或处理多个并发数据源同时写入同一索引的情况。

完全无服务器架构消除了基础设施开销,这意味着无需设置基础设施或预置资源。您只需为存储和查询向量时使用的资源付费。这种面向人工智能的存储方案可让您快速访问任意数量的向量数据,从而支持您完整的人工智能开发生命周期,从初始实验和原型设计到大规模生产部署。S3 Vectors 现在能够为人工智能代理、推理、语义搜索和 RAG 应用等生产工作负载提供所需的规模和性能。

预览版中推出的两项关键集成现已正式发布。您可以使用 S3 Vectors 作为 Amazon Bedrock 知识库的向量存储引擎。尤其值得一提的是,您可以利用它构建具有生产级规模和性能的 RAG 应用程序。此外,S3 Vectors 与 Amazon OpenSearch 的集成现已正式推出,因此您可以将 S3 Vectors 用作向量存储层,同时使用 OpenSearch 实现搜索和分析功能。

S3 Vectors 预览期间仅限 5 个 AWS 区域,但现在有所扩展,您可以在 14 个 AWS 区域中使用 S3 Vectors 了。

下面我们来看看它的工作原理
在本文中,我将演示如何通过 AWS 管理控制台和 CLI 使用 S3 Vectors。

首先,我创建一个 S3 Vectors 存储桶和一个索引。

echo "正在创建 S3 Vector 存储桶..."
aws s3vectors create-vector-bucket \
    --vector-bucket-name "$BUCKET_NAME"

echo "正在创建向量索引..."
aws s3vectors create-index \
    --vector-bucket-name "$BUCKET_NAME" \
    --index-name "$INDEX_NAME" \
    --data-type "float32" \
    --dimension "$DIMENSIONS" \
    --distance-metric "$DISTANCE_METRIC" \
    --metadata-configuration "nonFilterableMetadataKeys=AMAZON_BEDROCK_TEXT,AMAZON_BEDROCK_METADATA"

维度度量必须与用于计算向量的模型维度相匹配。距离度量指示算法计算向量之间的距离。S3 Vectors 支持余弦距离欧氏距离

我还可以使用控制台创建存储桶。我们新增了在创建时配置加密参数的功能。默认情况下,索引使用存储桶级加密,但我可以使用自定义 AWS Key Management Service(AWS KMS)密钥在索引级别覆盖存储桶级别的加密。

我还可以为向量存储桶和向量索引添加标签。向量索引上的标签有助于访问控制和成本分配。

S3 Vector 控制台 – 创建

现在我可以直接在控制台中管理属性权限了。

S3 Vector 控制台 – 属性

S3 Vector 控制台 – 创建

同样,我定义了不可过滤的元数据,并为向量索引配置了加密参数。

S3 Vector 控制台 – 创建索引

接下来,我创建并存储嵌入(向量)。在这个演示中,我使用了我的得力助手:《AWS 风格指南》。这是一份 800 页的文档,详细介绍了如何在 AWS 上撰写帖子、技术文档和文章。

我使用 Amazon Bedrock 知识库来摄取存储在通用 S3 存储桶中的 PDF 文档。Amazon Bedrock 知识库读取文档并将其分割成称为“块”的片段。然后,它使用 Amazon Titan 文本嵌入模型计算每个块的嵌入,并将向量及其元数据存储在我新建的向量存储桶中。该过程的详细步骤超出了本文的范围,但您可以查阅相关文档中的说明

查询向量时,每个向量最多可以存储 50 个元数据键,其中最多 10 个标记为不可过滤。您可以使用可过滤的元数据键,根据特定属性过滤查询结果。因此,您可以将向量相似性搜索与元数据条件结合使用,以缩小结果范围。您还可以存储更多不可过滤的元数据,以获取更丰富的上下文信息。Amazon Bedrock 知识库负责计算和存储向量,并添加大型元数据(原始文本块)。我已将这些元数据从可搜索索引中排除。

还有其他方法可以摄取向量。您可以尝试使用 S3 Vectors Embed CLI,这是一款命令行工具,可以帮助您使用 Amazon Bedrock 生成向量嵌入,并通过直接命令将其存储在 S3 Vectors 中。您还可以将 S3 Vectors 用作 OpenSearch 的向量存储引擎

现在我准备查询我的向量索引了。假设我想知道“open source”该如何写。是写成带连字符的“open-source”,还是不带连字符的“open source”? 我应该用大写字母吗? 我想在《AWS 风格指南》中搜索与“open source”相关的章节。

# 1.创建嵌入请求
echo '{"inputText":"Should I write open source or open-source"}' | base64 | tr -d '\n' > body_encoded.txt

# 2.使用 Amazon Titan 嵌入模型计算嵌入
aws bedrock-runtime invoke-model \
  --model-id amazon.titan-embed-text-v2:0 \
  --body "$(cat body_encoded.txt)" \
  embedding.json

# 在 S3 Vectors 索引中搜索相似的块
vector_array=$(cat embedding.json | jq '.embedding') && \
aws s3vectors query-vectors \
  --index-arn "$S3_VECTOR_INDEX_ARN" \
  --query-vector "{\"float32\": $vector_array}" \
  --top-k 3 \
  --return-metadata \
  --return-distance | jq -r '.vectors[] | "距离: \(.distance) | 来源: \(.metadata."x-amz-bedrock-kb-source-uri" | split("/")[-1]) | 文本: \(.metadata.AMAZON_BEDROCK_TEXT[0:100])..."'

第一个结果显示如下 JSON:

        {
            "key": "348e0113-4521-4982-aecd-0ee786fa4d1d",
            "metadata": {
                "x-amz-bedrock-kb-data-source-id": "0SZY6GYPVS",
                "x-amz-bedrock-kb-source-uri": "s3://sst-aws-docs/awsstyleguide.pdf",
                "AMAZON_BEDROCK_METADATA": "{\"createDate\":\"2025-10-21T07:49:38Z\",\"modifiedDate\":\"2025-10-23T17:41:58Z\",\"source\":{\"sourceLocation\":\"s3://sst-aws-docs/awsstyleguide.pdf\"",
                "AMAZON_BEDROCK_TEXT": "[redacted] open source (adj., n.) Two words.Use open source as an adjective (for example, open source software), or as a noun (for example, the code throughout this tutorial is open source).Don't use open-source, opensource, or OpenSource. [redacted]",
                "x-amz-bedrock-kb-document-page-number": 98.0
            },
            "distance": 0.63120436668396
        }

它在《AWS 风格指南》中找到了相关章节。我必须写成“open source”,不能加连字符。它甚至还检索了原始文档中的页码,方便我将建议与源文档中的相关段落进行核对。

额外要点
S3 Vectors 还扩展了其集成功能。现在,您可以使用 AWS CloudFormation 部署和管理向量资源,使用 AWS PrivateLink 实现私有网络连接,并使用资源标记进行成本分配和访问控制。

定价和可用性
S3 Vectors 现已在 14 个 AWS 区域推出,除了现已推出预览版的五个区域 [美国东部(俄亥俄州、弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(悉尼)和欧洲地区(法兰克福)] 之外,还新增了亚太地区(孟买、首尔、新加坡、东京)、加拿大(中部)和欧洲地区(爱尔兰、伦敦、巴黎、斯德哥尔摩)。

Amazon S3 Vectors 的定价基于三个维度。PUT 费用根据您上传的向量的逻辑 GB 数计算,每个向量包含其逻辑向量数据、元数据和键。存储成本决于索引的总逻辑存储空间。查询费用包括每次 API 的费用以及基于索引大小的 $/TB 费用(不包括不可过滤的元数据)。当索引规模超过 10 万个向量时,您将享受更低的 $/TB 定价。像往常一样,Amazon S3 定价页面包含详细信息

要开始使用 S3 Vectors,请访问 Amazon S3 控制台。您可以创建向量索引、开始存储嵌入,并开始构建可扩展的人工智能应用程序。有关更多信息,请查看《Amazon S3 用户指南》或《AWS CLI Command Reference》。

我期待看到您使用这些新功能的构建成果。请通过 AWS re:Post 或您常用的 AWS Support 联系人分享反馈。

– seb