正文 · AI 翻译
使用 Amazon Bedrock 上由客户管理的知识库时,您需要预置向量存储并对其扩容,调整嵌入模型和索引设置,并为每个新数据源规划容量。Agent Toolkit for AWS 中的迁移指南可帮助您迁移到 Amazon Bedrock 托管知识库。托管知识库接管这些工作并增加新的检索能力,而您的团队仍掌控内容及使用这些内容的应用程序。迁移生产环境中的知识库意味着您的团队需要梳理其配置、创建替代知识库、摄取内容、更新应用程序的检索调用,并在切换流量前验证检索效果。为此,我们在 Agent Toolkit for AWS 的 amazon-bedrock 技能中添加了知识库迁移指南。该指南为您的编码代理提供与您共同规划迁移所需的背景信息,从只读发现和一份供您逐行审阅的计划开始。在您批准后,代理会在保留原有知识库的同时创建新知识库及其数据源,或者为您的流水线编写迁移后的基础设施即代码(IaC)模板。内容摄取和应用程序 Retrieve 调用的更新仍由您负责,您的代理可以引导您完成这两项工作。在本文中,我们将解释推荐迁移的原因及迁移指南的工作方式,回顾先决条件、安装技能、规划迁移、更新应用程序的检索调用,并在切换前验证检索效果。为什么迁移到托管知识库 我们推荐托管知识库,因为它兼顾易用性、检索准确性和成本。AWS 负责运行存储 使用托管知识库时,Amazon Bedrock 负责摄取、存储、索引和检索,存储会随着内容增长自动扩展。结合关键词匹配和语义匹配的混合搜索始终启用,无需配置索引。知识库包含托管嵌入模型、托管重排序器,以及适用于多模态文件类型的内置解析器。创建知识库时,您仍可使用自己的 Amazon Bedrock 嵌入模型。对于每次检索请求,您可以选择托管重排序器、Amazon Bedrock 重排序模型,或不进行重排序。托管重排序器要求使用托管嵌入模型。内置功能 托管知识库包含一些原本需要您自行构建的功能:原生连接器可直接从 Amazon Simple Storage Service(Amazon S3)、Microsoft SharePoint 和 Atlassian Confluence 等来源摄取内容。有关当前列表,请参阅支持的连接器。首次完整同步后,后续同步只获取变更,可按需或按计划进行。托管知识库包含删除保护机制,有助于防止已索引内容被意外批量删除。访问控制列表(ACL)感知功能会随内容一同摄取文档权限,因此检索仅返回已登录用户有权访问的内容。对于支持此功能的连接器,例如 Microsoft SharePoint 和 Atlassian Confluence,针对源的实时检查还能发现上次同步以来的权限变更。ACL 感知功能不会对用户进行身份验证,因此您的应用程序必须验证并传递用户身份。代理式检索通过处理多部分问题并反复检索,回答单次搜索无法回答的问题。它可以在单个请求中搜索多个知识库。与 Amazon Bedrock AgentCore 的一项功能 AgentCore Gateway 集成后,可将您的知识库公开为目标。随后,任何支持模型上下文协议(MCP)的客户端都可以查询该知识库,而网关负责身份验证。基于资源的策略允许其他 AWS 账户中的应用程序使用某个团队的知识库。请将每项策略的范围限定为调用该知识库的特定角色,并且只授予它们使用的操作权限,例如 bedrock:Retrieve。代理式检索、AgentCore Gateway 集成和基于资源的策略不适用于由客户管理的知识库。 有关托管式知识库可用的 AWS 区域,以及 AWS GovCloud (US-West) 不支持的功能,请参阅“支持的 AWS 区域”。更高的配额 截至本文撰写时,更高的默认配额改变了内容的组织方式。每个知识库可有 200 个数据源,因此可以将相关内容归入同一个知识库。每个账户在每个区域可有 10,000 个知识库,因此每个团队或产品线都可以使用单独的知识库。默认配额 客户自行管理的知识库 托管式知识库 每个账户在每个区域的知识库数 100 10,000 每个知识库的数据源数 5 200 每个知识库的并发摄取作业数 1 50 查询输入字符数 1,000 10,000 有关当前数值,请参阅 Amazon Bedrock 终端节点和配额,以及托管式知识库的服务配额。按存储量和检索量付费 团队考虑这一转变时,会权衡 3 个方面:成本、可定制性以及对向量存储的直接控制权。在客户自行管理的知识库中,您需要选择、预置、扩展和更新向量存储及文本存储,并为所选基础设施分别付费。在托管式知识库中,这些环节由服务负责,并直接按存储量和检索量计费。定价模式也可能不同。对于客户自行管理的知识库,存储和检索费用取决于您选择的向量存储。有些存储按预置容量或最低容量收费;另一些存储,例如 Amazon S3 的一项功能 Amazon S3 Vectors,则只按实际用量收费。托管式知识库按存储量和检索量定价,因此费用随实际用量变化。按用量定价可能适合利用率较低的企业问答、政策和支持类知识库。有关当前费率,请参阅 Amazon Bedrock 定价。有关客户自行管理的知识库可用的解析器及其各自的计费方式,请参阅数据源的解析选项。成本因素 客户自行管理的知识库 托管式知识库 向量存储 由所选存储单独定价。即使用量较低,预置型检索服务也可能产生最低闲置成本 包含在每月每 GB 5 美元的基本存储费率中 多模态文档解析 需要使用 Amazon Bedrock Data Automation,按页或图像计费;或使用基础模型,按 token 计费。纯文本解析免费 已包含 嵌入生成 按嵌入模型的费率单独计费 使用默认模型时已包含。只有选择自定义模型时才收费 摄取、同步和重新同步计算 每次同步时,重新生成嵌入、编排代码和索引计算的用量峰值会增加经常性成本 已包含,并提供仅处理新增和变更内容的增量同步 连接器 构建和运行自定义连接器可能增加计算成本 原生连接器已包含 标准检索 Amazon Bedrock 不按查询收费。向量存储可能按查询收费,Amazon S3 Vectors 即如此。 每 1,000 次检索请求收费 1 美元 重排序 Amazon Rerank 每 1,000 次查询收费 1 美元。自定义重排序模型按其自身费率计费 已包含在每 1,000 次检索请求收费 1 美元的费用中 代理式检索 您需要基于 Bedrock 模型构建代理式工作流,在开发和维护成本之外,每 1,000 次查询的费用可能约为 18 至 24 美元。由于模型用量按 token 计费,每次查询的价格会有所不同。 代理式检索在底层检索调用的费用之外,每 1,000 次查询另收 4 美元;其中包括多轮检索、重排序和答案生成。根据底层检索调用次数,每 1,000 次查询的总费用可能约为 6 至 9 美元。费率只是总拥有成本的一部分。对于客户自行管理的知识库,您的团队需要将各个环节作为独立资源进行预置、扩展和运营。托管式知识库将这些环节整合为单一资源,提供默认的嵌入模型、基础模型和重排序器,并默认按知识库设置速率限制。 你负责管理内容及使用这些内容的应用程序,Amazon Bedrock 则负责运营托管存储、嵌入模型、基础模型和重排序器。解决方案概览 客户自行管理的知识库使用 VECTOR 类型,配套使用由你配置的向量存储。托管知识库使用 MANAGED 类型。迁移指南指导你的代理在原知识库旁创建新的 MANAGED 知识库,迁移期间不修改或删除原知识库。代理依据指南中的映射编写计划,列明哪些设置保持不变、哪些设置在托管知识库中以不同方式处理,以及你需要对应用程序做哪些改动。如图 1 所示,在团队导入内容、验证并完成切换期间,原知识库继续处理每一项请求。图 1:在原知识库旁创建托管知识库或迁移后的模板,然后在切换前进行验证 迁移指南的工作方式 该指南将规划与实施分开。在探索模式下,代理可以回答有关托管知识库的问题,并通过只读调用检查你的配置,帮助你估算所需工作量。在迁移模式下,指南引导代理完成以下检查点:介绍与选择。代理说明它会处理和不会处理的内容。选择模式、现有知识库或 IaC 源,以及通俗(默认)或技术性说明风格。识别。确认账户和 AWS 区域。代理会提示权限范围过宽的凭证,询问你是否需要成本分析,并创建输出目录。发现。代理通过只读调用读取知识库和数据源,或读取你的模板文件。规划。审查计划和应用程序改动。默认情况下,代理到此为止。按需实施。对于实际构建,你需要批准预置脚本的确切预览;如果脚本有变化,还需再次批准。对于 IaC,代理编写迁移后的模板,并报告运行了哪些架构检查。移交。审查生成的内容及团队尚需完成的步骤。如图 2 所示,资源创建与导入和切换分开进行。图 2:迁移检查点。实施是可选的,导入和切换由你的团队执行 审查配置映射 当托管类型采用不同配置时,指南会映射各项设置,以保留你的数据源、筛选器和分块行为。计划将每项设置归为以下类别:1:1。新知识库使用相同设置。已调整。托管知识库使用不同设置实现相同结果,计划会应用这一替换。受阻。目前没有适用于托管知识库的迁移路径。代理会将该知识库排除在构建之外,解释原因,并建议你联系 AWS Support。同一次运行中的其他知识库仍可继续处理。验证时,请用自己的内容比较分块结果。审查权限和生成的改动 发现、规划和整个 IaC 流程只需要只读凭证。对于实际构建,指南指导代理提出范围受限的策略,明确禁止更改原知识库,并且绝不要求管理员权限或完全访问权限。指南还指导代理只更改其创建的资源,通过亚马逊资源名称(ARN)引用密钥,并忽略在所读取数据中发现的指令。在批准运行前,请审查生成的 AWS 身份与访问管理(IAM)策略和预置脚本。构建完成后,请在 AWS CloudTrail 事件历史记录中检查代理执行了哪些操作;该记录保留 90 天的管理事件。每个事件都会记录 API 调用(例如 CreateKnowledgeBase)及调用者的身份。对于可选的成本分析,代理会使用当前 AWS 价格,将当前支出与托管知识库的估算费用进行比较。它使用只读输入,包括 Amazon CloudWatch 指标、Amazon S3 对象大小和 AWS Cost Explorer。每个数值都会标明是测得的、由你提供的,还是估算的。 前提条件 为规划工作和任何获批的资源创建操作使用不同的凭证。一个安装了 Agent Toolkit for AWS 的兼容开发环境。AWS 命令行界面(AWS CLI),并将其配置为使用遵循最小权限原则的只读配置文件。能够访问原始知识库的配置或其基础设施即代码(IaC)文件。对于可选的实际构建:使用本指南推荐的策略、权限范围受限的构建配置文件。用于新知识库的 IAM 服务角色。本指南会向你的智能体提供信任策略和权限,以帮助你创建该角色。用于生成的资源预置脚本的 Python 3 和 boto3。Agent Toolkit for AWS 可与兼容的开发环境配合使用,其 GitHub 仓库列出了可用技能。本文示例使用 AWS CLI 2.37 和 boto3 1.43.32。安装技能 按照 Agent Toolkit for AWS 针对你的编码智能体提供的入门说明操作。add-skill 命令会将 amazon-bedrock 技能安装到它检测到的编码智能体中。添加 --agent 可指定一个智能体,例如 --agent kiro。aws agent-toolkit add-skill \\ --skill-name amazon-bedrock 安装后,当你描述迁移任务时,你的智能体会加载迁移指南。以下提示词是示例输入,并非对话记录。规划迁移 根据你维护源资源的方式选择路径。路径 你的智能体读取的内容 它生成的内容 AWS 变更 探索 文档,以及可选的你的知识库(只读) 对话中的回答 无 实时知识库 你的知识库和数据源(只读) 一份计划,以及可选的一个与原知识库并存的新托管知识库 仅在你批准确切的预览内容后 基础设施即代码 你的 AWS CloudFormation 模板、AWS Cloud Development Kit(AWS CDK)合成模板或 Terraform 配置 相同格式的迁移后模板 无。由你的流水线部署 要以探索模式开始,请提出一个问题:如果我将 <your-region> 中的知识库 <your-kb-name> 迁移到托管知识库,会有哪些变化?使用探索模式。准备好后,选择实时迁移或 IaC 路径。迁移实时知识库 在授权创建资源之前,先要求制定计划:规划将 <your-region> 中的知识库 <your-kb-name> 迁移到托管知识库。完成计划后停止。确认账户和区域,然后审查计划中的映射关系和应用程序变更。默认情况下,新知识库使用原知识库的名称,并添加 -managed 后缀。要构建它,请确认服务角色已存在,切换到构建配置文件,检查资源预置脚本及其预览内容,然后批准。你的智能体会运行脚本,创建知识库和数据源,并报告其状态。迁移基础设施即代码 向你的智能体提供源模板或配置的路径:审查 <path-to-source-template> 并规划迁移到托管知识库。你的智能体会将迁移后的文件写入输出目录,不进行部署,并向你展示差异。如需保留差异,请要求你的智能体将其保存。部署前运行 terraform init -backend=false 和 terraform validate。你的智能体可以指导你执行这两个命令,但本指南将这些检查留给你完成,因为 terraform init 会下载体积庞大的 AWS 提供程序。在应用部署计划之前,检查它是否保留了回滚所需的原始资源。对话示例 迁移通过对话进行。在读取任何内容之前,你的智能体会说明其工作范围并询问如何继续:它绝不会更改或删除 <your-kb-id>,绝不会启动数据摄取,也绝不会将你的应用程序切换到新知识库;每项 AWS 变更都会先展示给你并获得批准。目前尚未对你的知识库执行任何操作。1. 模式:探索(关于托管知识库和你的知识库的只读问答,不制定计划或构建)还是迁移(执行识别、发现、规划,以及可选的构建阶段)?2. 目标类型,如果选择迁移:迁移正在使用的知识库 <your-kb-id>(知识库路径,获批后可构建新的托管知识库),还是迁移定义该知识库的 Terraform/CloudFormation(IaC 路径,只会生成迁移后的文件,不会预置任何资源)?3. 说明风格:通俗或技术性。除非你另有要求,否则我会采用通俗风格。计划摘要列出了每项映射、调用方需要做的更改,以及你需要作出的决定:阶段 3,计划:已写入(plan.md)——映射:——向量存储改为自动预置(有调整,是)。——SEMANTIC 分块被舍弃,改用托管模式的默认设置(有调整,部分是)。——解析改为 SMART_PARSING(有调整,是)。——S3 前缀和元数据附属文件按 1:1 保留。——调用方需要做的更改:——使用新的知识库 ID。——用 managedSearchConfiguration 替换 vectorSearchConfiguration。——不能发送 overrideSearchType: SEMANTIC;搜索采用混合模式。继续推进前需要你提供意见。——D1 embeddingModelType:MANAGED(推荐):保留托管重排序器。CUSTOM Titan v2 1024/FLOAT32:关闭托管重排序器。——D2 aclEnabled:建议设为 false,因为源知识库没有 ACL。在 S3 上,创建后无法更改此设置。——下一步:停留在此计划(默认),还是选择进入阶段 4?对于实际构建,你的代理会在预览阶段停止,批准命令需要提供计划的哈希值:如果你批准,需运行以下命令。此操作会修改资源:AWS_PROFILE=build-profile AWS_REGION=<your-region> \ python3 provision_managed_kb.py --execute \ --expect-plan-sha256 <plan-sha256>。如果未提供 --expect-plan-sha256,或哈希值不匹配,--execute 将拒绝启动。预览显示将创建的资源:——知识库(CreateKnowledgeBase,MANAGED):support-docs-managed——数据源(CreateDataSource,托管连接器,删除保护 ENABLED/15):support-docs-s3-managed。该脚本绝不会调用 StartIngestionJob、Retrieve、Update*、Delete* 或独立的 TagResource。示例对话经过轻微编辑,标识符已替换。更新应用程序的检索调用。你的应用程序对两种类型都使用同一个 Retrieve 操作。托管模式的请求以新的知识库 ID 为目标,并用 managedSearchConfiguration 替换 vectorSearchConfiguration。向托管知识库传入 vectorSearchConfiguration 会返回验证错误。托管检索始终使用混合搜索,因此托管模式的请求结构中没有 overrideSearchType 字段。元数据筛选条件保留相同的语法,但托管知识库不支持 startsWith 和 stringContains 运算符。完整语法请参阅 Retrieve API 参考文档。此示例假定两个知识库都包含筛选条件使用的 locale 元数据。# 示例:托管模式的请求结构已使用 boto3 1.43.32 检查;请根据你的知识库调整 ID 和筛选条件。 import boto3 client = boto3.client("bedrock-agent-runtime") query = {"text": "如何退回网上购买的商品?"} locale_filter = {"equals": {"key": "locale", "value": "en-US"}} # 客户管理的(VECTOR)知识库。 original_response = client.retrieve( knowledgeBaseId="<original-kb-id>", retrievalQuery=query, retrievalConfiguration={ "vectorSearchConfiguration": { "numberOfResults": 5, "overrideSearchType": "SEMANTIC", "filter": locale_filter, } }, ) # 托管目标:使用不同的 ID 和搜索配置。 managed_response = client.retrieve( knowledgeBaseId="<managed-kb-id>", retrievalQuery=query, retrievalConfiguration={ "managedSearchConfiguration": { "numberOfResults": 5, "filter": locale_filter, } }, ) 验证检索并切换。在应用程序仍使用原知识库时,评估新知识库。如果使用 IaC,请通过你的流水线审核并部署目标配置。同步每个数据源并检查是否有失败。请参阅“同步数据”。为应用程序的运行时 IAM 角色授予对新知识库 ARN 的 bedrock:Retrieve 权限,并保留其对原知识库的访问权限,以便回滚。 使用该角色,通过 Retrieve 对两个知识库运行有代表性的查询。这两种类型使用不同的分数尺度。托管型知识库的分数还取决于 rerankingModelType:使用托管嵌入模型时,默认值为 MANAGED;使用自定义嵌入模型时,默认值为 NONE。应分别针对每种模式调整阈值,并在比较期间保持模式不变。测试使用中的元数据筛选和感知权限的检索,包括已登录用户不应收到的内容。对于启用了 ACL 的数据源,未提供 userContext.userId(用户电子邮件地址)的请求不会返回任何结果。验收通过后,部署新的知识库 ID 和请求结构。在回滚期内,保留包含当前内容的原知识库以及应用程序配置。对于每个查询,检查两个知识库返回的首位文档是否相同,以及结果有多少重叠。可以编写一个简短脚本,根据以下标准报告通过或失败:至少 90% 的查询具有相同的首位文档,且托管型知识库没有返回零结果的查询。请根据工作负载调整该阈值。有关其他检索质量指标,例如上下文相关性和上下文覆盖率,请参阅《使用指标了解 RAG 系统性能》。比较结果时,请注意以下差异:比较前先将来源位置规范化。客户自行管理的知识库可能在 location.s3Location.uri 中返回 s3://bucket/key,而托管型知识库可能返回 https:// URL。应按对象键进行比较。比较首位结果,不要假定结果数量相等。两种知识库类型可能返回不同数量的结果,numberOfResults 设置的是上限,而非保证的数量。比较首位文档,并检查其发生变化的每个查询。详情请参阅《配置和自定义托管型知识库的查询》。映射已重命名的系统元数据键。例如,在比较代码中,将 x-amz-bedrock-kb-data-source-id 替换为 _data_source_id。您自己的元数据属性名称保持不变。详情请参阅《配置和自定义托管型知识库的查询》。清理:如果完成迁移,仅在回滚期结束并审查依赖项后才停用原知识库。保留托管型知识库摄取内容所用的源文档和存储桶,以及其他工作负载使用的存储资源。通过所属模板清理由 IaC 管理的资源。如果结束评估,则保留原知识库,并按以下顺序删除评估期间创建的资源:删除每个托管型数据源,并等待其删除完成。删除托管型知识库,并等待其删除完成。如果服务角色仅为此次评估而创建,先删除其内联策略,再删除该角色。如果使用客户管理的密钥,请通过 aws kms list-grants 检查 Amazon Bedrock 创建的授权;这些授权在知识库删除后可能仍然存在。保留其他知识库仍在读取的所有 S3 存储桶。托管型数据源的删除保护限制同步操作可删除的内容量,并不限制您能否删除该数据源。删除原知识库不会删除其向量存储;在将其移除之前,它会持续产生费用。请参阅《删除 Amazon Bedrock 知识库》。结语:使用 Amazon Bedrock Managed Knowledge Base 后,您的团队无需再运行向量存储或管理底层检索基础设施。借助 amazon-bedrock 技能中的迁移指南,您可以让智能体制定计划、审查计划,并仅批准您希望创建的资源。要开始使用,请设置 Agent Toolkit for AWS,并让您的智能体对知识库进行只读评估。迁移后,可以探索使用智能体检索来处理多部分问题。要了解更多信息,请参阅 AWS Machine Learning Blog 上的《使用 Amazon Bedrock Managed Knowledge Base 为智能体构建企业搜索》。关于作者:Josh DeMuth。Josh 是 AWS 的生成式 AI 解决方案架构师。 他在科技行业工作超过20年,其中包括数年系统集成经验,一直致力于让不同的系统协同工作。如今,他帮助客户构建能够与现有系统和数据协同工作的生成式 AI 应用。Siddhant Sahu Siddhant 是 AWS 的高级产品经理,也是 Amazon Bedrock Managed Knowledge Base 的单一负责人,作为产品负责人对其战略、路线图和发布负责。他构思并推出了该产品的智能体式检索和应用连接器,使 AI 智能体能够对 Microsoft SharePoint、Atlassian Confluence 和 Amazon S3 等关键业务应用中的企业数据执行复杂搜索查询。自该服务于2026年6月推出以来,OpenAI、Syngenta、MRH Trowe、Sony 以及其他基于企业数据构建 AI 智能体的企业已采用该服务。Arjun Tapde Arjun 是 Amazon Web Services(AWS)的软件工程师,负责为 Amazon Bedrock Knowledge Bases 和 AWS Quick 构建 AI 智能体系统及企业检索基础设施。他专注于检索增强生成(RAG)以及安全、可扩展的企业数据访问,帮助客户构建以自身业务知识为依据的可靠 AI 应用和智能体。Ibhan Aggarwal Ibhan 是 AWS 的软件开发工程师。他为 Amazon Bedrock Knowledge Bases 构建 AI 智能体评估框架,重点是在实时 AWS 环境中测试智能体,并通过以 LLM 为评判者的工作流程、工具调用轨迹分析以及针对前沿模型的对抗性测试来评估其行为。他的工作帮助客户相信其智能体能够准确、安全地行事。Aniket Panda Aniket 是 AWS 的软件开发工程师,负责为 Amazon Bedrock Knowledge Bases、Amazon Bedrock AgentCore 和 AWS Quick 构建 AI 及企业检索系统。他专注于智能体工作流程、检索增强生成(RAG),以及让智能体安全、可扩展地访问企业数据,从而使客户能够构建以自身业务知识为依据的可靠 AI 应用。