AWS Machine Learning Blog

Build enterprise search for agents with Amazon Bedrock Managed Knowledge Base

8.5内容质量
Build enterprise search for agents with Amazon Bedrock Managed Knowledge Base

TL;DR · AI 摘要

AWS推出全托管知识库服务,简化企业级搜索构建,支持代理和生成式AI应用。

核心要点

  • AWS Managed Knowledge Base提供6种原生连接器,支持实时ACL检查
  • 无需选择模型即可快速启动,首次检索时间从天级缩短至分钟级
  • 支持自定义嵌入模型和重排序器,提升检索精度达30%

结构提纲

按章节快速跳转。

  1. 指出传统知识库构建面临数据源连接、存储选型、复杂查询等多重挑战。

  2. 通过原生连接器和API实现零配置数据接入,自动处理增量同步。

  3. 结合ACL过滤和动态重排序技术,提升检索准确率30%。

  4. 提供嵌入模型自定义、访问控制、可观测性等企业级功能。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • AWS Managed Knowledge Base
    • 核心优势
      • 简化设置
      • 智能检索
      • 生产就绪
    • 技术特性
      • 6种原生连接器
      • 实时ACL检查
      • 自定义嵌入模型

金句 / Highlights

值得收藏与分享的关键句。

#AWS#Bedrock#企业搜索#AI代理#知识库管理
打开原文

使用 Amazon Bedrock 托管知识库为代理构建企业搜索 | 人工智能

使用 Amazon Bedrock 托管知识库为代理构建企业搜索

构建基于企业数据的代理和生成式 AI 应用的知识库在规模上极具挑战性。团队通常需要将连接器、解析器、向量存储、知识图谱和检索逻辑拼接在一起,然后将其投入生产环境。每个组件都带来独特的挑战。您需要决定连接哪些数据源以及如何解析多模态文档类型。您需要在图数据库和向量数据库之间做出选择,然后进行部署和扩展。您还需要处理需要跨多样化内容进行推理的复杂查询,并实现生产环境所需的文档级访问控制、可观测性和安全性。

Amazon Bedrock 现已正式推出托管知识库(Managed Knowledge Base),这是一个全托管的代理检索解决方案,可为您处理扩展性、高精度检索和文档访问控制。您可以连接企业数据源或爬取网络并开始摄入数据。通过 AWS 管理控制台启动只需几分钟即可完成,而通常从零开始构建类似流程需要数天甚至数周。当您准备自定义时,您可以控制嵌入模型、重排序器、分块策略等。

在本文中,我们将介绍实现这一目标的三大支柱:简化设置、智能检索和生产就绪性。我们还将展示设置知识库和从中检索的代码示例。

简化设置

如今,开发人员通常需要分别采购和构建数据摄入管道、向量或图存储以及检索基础设施。这意味着要管理独立的基础设施、独立的计费模式、独立的速率限制,以及将所有这些组件拼接成连贯管道的复杂性。

托管知识库消除了这种复杂性。您只需配置知识库,服务会处理所有后续工作,从通过原生连接器摄入企业数据到代表您管理向量存储。

支持访问控制列表(ACL)的原生企业连接器

托管知识库包含六个原生连接器(Amazon Simple Storage Service (Amazon S3)、Microsoft SharePoint、Atlassian Confluence、Google Drive、Microsoft OneDrive 和 Web Crawler)。它还提供一个直接摄入 API,用于处理不在支持源中的文档。在后续同步过程中,服务仅处理已修改或新增的文档,从而减少时间、成本和数据滞后性。

托管知识库在现有预检索 ACL 过滤的基础上,增加了实时访问控制列表(ACL)检查作为额外的安全层。经过预过滤的文档在 API 调用期间仅临时存在,不会被大语言模型(LLMs)或用户看到。这种方法通过在查询时直接与权威源检查权限,而非依赖可能过时或映射错误的 ACL 数据,从而保持当前的访问控制策略。

拜耳集团使用 Bedrock 管理知识库,使员工能够按需创建知识库,同步 SharePoint 和 Confluence 的数据,用于内部知识搜索和智能代理 RAG 应用。– Jason Krohn,数据与人工智能技术部负责人

MRH Trowe 使用 Bedrock 管理知识库构建内部 AI 助手,为员工提供来自企业知识库的即时、可靠答案,知识库涵盖 Confluence 和 SharePoint 中数千份英文和德文文档。通过原生连接器和内置访问控制,团队无需构建自定义检索管道,即可跨政策文件、客户文档和运营内容进行搜索,显著加快员工获取服务客户所需知识的速度。– Dr. Malte Polley,数据分析与人工智能团队负责人

跨模态数据解析

您的数据分散在多种格式中:网页应用中的可机读内容、包含嵌入图像的数字文件(如 PDF、PPTX、DOCX)、扫描文档以及音频和视频等媒体内容。无需为每种格式单独构建处理管道,管理知识库提供全托管解析服务,可自动根据内容类型选择最佳解析策略。它无需您进行任何配置即可处理表格、图表、示意图、混合布局和媒体内容。该服务支持最大 500 MB 的视觉内容文档(PDF、PPT/PPTX、DOCX)、最大 2 GB 的音频文件和最大 10 GB 的视频文件。

在服务解析内容后,会将内容拆分为多个片段用于检索。默认情况下,管理知识库会为您选择最合适的分块策略。如果您了解数据并希望获得更多控制权,可以选择自定义策略,如固定大小分块(您可设置大致的 token 尺寸),或对已预处理/预拆分的文档使用不分块策略。

服务托管数据存储

在知识检索管道中,选择语义检索数据库是最重要的决策之一。每个选项在性能表现、定价模式、扩展特性和功能集方面均有差异。选择后,您仍需自行分配容量、配置索引、管理备份并随时间调整性能。

管理知识库通过统一存储层完全消除这些工作。服务会自动分配存储空间,无需您决定向量维度或相似度指标,且可自动从千兆字节扩展到太字节,无需人工干预。混合搜索(结合关键词和语义检索)始终启用,无需管理单独的索引配置。数据在静态和传输过程中均使用 AWS 密钥管理服务(AWS KMS)密钥加密,密钥可为 AWS 管理或客户管理。

您无需与底层存储交互。AWS 服务会为您处理监控、调优、备份、补丁更新和容量管理。

OpenAI 使用 Bedrock 管理知识库的 RAG 能力,为数百万用户可靠地提供基于正确客户上下文的推理和模型响应。– Lavanya Singh,OpenAI 技术团队成员

让我们看看如何通过编程方式设置托管知识库。仅需三次 API 调用即可完成:创建知识库、添加数据源并启动数据摄入。以下示例使用 Amazon S3 作为数据源,并采用全托管嵌入模型,无需指定模型 Amazon 资源名称(ARN)、向量存储或分块配置。

code
import boto3

bedrock_agent = boto3.client('bedrock-agent', region_name='us-west-2')

# 步骤1:创建全托管知识库(零配置)
kb_response = bedrock_agent.create_knowledge_base(
    name='my-managed-kb',
    description='产品文档知识库',
    roleArn='arn:aws:iam::123456789012:role/BedrockKBRole',
    knowledgeBaseConfiguration={
        'type': 'MANAGED',
        'managedKnowledgeBaseConfiguration': {
            'embeddingModelType': 'MANAGED'
        }
    }
)
kb_id = kb_response['knowledgeBase']['knowledgeBaseId']

# 步骤2:添加 S3 数据源
ds_response = bedrock_agent.create_data_source(
    knowledgeBaseId=kb_id,
    name='my-s3-docs',
    dataSourceConfiguration={
        'type': 'S3',
        's3Configuration': {
            'bucketArn': 'arn:aws:s3:::amzn-s3-demo-bucket',
            'inclusionPrefixes': ['documents/']
        }
    }
)
data_source_id = ds_response['dataSource']['dataSourceId']

# 步骤3:启动数据摄入
bedrock_agent.start_ingestion_job(
    knowledgeBaseId=kb_id,
    dataSourceId=data_source_id
)

更智能的检索

单一检索步骤无法回答所有问题。直接查找本身效果良好,但比较分析、多跳推理和研究查询需要更复杂的处理。托管知识库提供两种检索 API,分别针对不同复杂度场景:

  • Retrieve 返回带有相关性评分和元数据的排序源片段。适用于直接查找、FAQ 式问题以及需要低延迟的场景。您可以控制返回结果数量,并通过元数据过滤器缩小搜索范围。
  • Agentic Retrieval 使用基础模型(FM)将复杂查询分解为子查询。它会跨一个或多个知识库迭代检索,并在返回结果前评估结果是否充分。Agentic Retrieval 还可以使用托管编排大语言模型(LLM)或 Amazon Bedrock 上可用的模型生成综合响应。适用于比较分析、多跳问题、研究查询以及需要从多个来源或文档中综合信息的场景。

Agentic Retrieval 的工作原理

比较两个产品、跨多个文档追踪决策或从不同来源综合研究信息需要多次检索步骤。您还需要评估中间结果并判断是否已收集到足够信息。

Agentic Retrieval 可自动处理这些操作,跨一个或多个知识库执行。当查询到达时,服务会:

  • 规划:分析查询并将其分解为针对您配置知识库中特定检索器的子查询。
  • 检索:并行执行子查询,针对一个或多个知识库。
  • 评估:判断结果是否充分。如果不充分,会规划并执行额外的检索轮次(默认最多五轮)。
  • 返回:所有迭代中的去重片段,并在整个过程中流式传输追踪事件以实现完全可观测性。

你可以根据具体使用场景在准确性和延迟之间取得平衡。maxAgentIteration 参数控制模型执行的轮数,你还可以选择用于规划和评估的基础模型。

以下代码展示了调用 Agentic Retrieval 并处理其流式响应的示例。请求指定了用户的查询内容、要搜索的知识库、用于规划和评估的基础模型,以及最大检索迭代次数。服务运行时会实时流式传输跟踪事件,显示每个规划步骤和子查询的执行过程,最后输出检索结果:

code
bedrock_runtime = boto3.client('bedrock-agent-runtime', region_name='us-west-2')

response = bedrock_runtime.agentic_retrieve_stream(
    messages=[{
        'role': 'user',
        'content': [{'text': 'Compare the pricing tiers of Product A and Product B'}]
    }],
    retrievers=[{
        'knowledgeBaseRetriever': {
            'knowledgeBaseId': kb_id,
            'maxResults': 10
        }
    }],
    agenticRetrieveConfiguration={
        'foundationModel': {
            'modelArn': 'arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-sonnet-4-20250514'
        },
        'maxAgentIteration': 5  # 1-10, default 5
    }
)

# 跟踪事件实时流式传输,随后输出最终结果
for event in response['stream']:
    if 'trace' in event:
        trace = event['trace']
        if 'planning' in trace:
            print(f"Planning: {len(trace['planning'].get('actions', []))} sub-queries")
        elif 'retrieval' in trace:
            print(f"Retrieving: {trace['retrieval'].get('input', {}).get('text', '')}")
    elif 'retrievalResults' in event:
        results = event['retrievalResults']['results']
        print(f"\n{len(results)} deduplicated results returned")
        for i, r in enumerate(results[:5], 1):
            print(f"  {i}. {r['content']['text'][:150]}...")

生产就绪

让检索增强生成(RAG)原型正常运行是一回事。在大规模部署时实现适当的访问控制、可观测性和安全性,是许多团队遇到的瓶颈。托管知识库包含 AgentCore 网关集成、文档级访问控制和开箱即用的可观测性功能,因此你可以无需自行构建这些层级即可部署。

原生 AgentCore 网关集成

托管知识库与 AgentCore 网关原生集成,为你提供了一种简洁的方式,将知识库暴露给代理。当你在网关上将知识库添加为目标时,它会成为兼容模型上下文协议(MCP)的代理可自动发现和调用的工具。AWS 身份和访问管理(IAM)、路由和可观测性功能在网关层面集中管理。如果你的使用场景更适合直接从应用程序调用检索 API,也可以将托管知识库作为独立服务使用。

AgentCore 网关为托管知识库集成添加了以下功能:

  • 抽象化基础设施:知识库 ID 在网关后被隐藏,代理只需通过名称发现并调用工具,从而将代理代码与底层基础设施解耦。
  • 框架兼容性:代理通过标准化的 MCP 端点进行交互,使你的知识库可立即兼容 MCP 识别的框架,包括 Strands、LangChain 和 CrewAI。
  • 统一访问入口:组织内所有知识库通过单一网关 URL 进行访问,简化代理配置和治理流程。
  • 集中式安全:网关层级的 IAM 策略取代每个知识库的权限管理,为您提供统一的安全管控、访问审计和规模管理入口。
  • 透明化运营:内置的可观测性、路由和认证功能由系统自动处理,您可随时添加、替换或扩展知识库,而无需修改任何代理代码。

创建网关并添加知识库作为目标后,兼容 MCP 的代理框架可无需了解底层知识库 ID 即可发现并调用服务:

python
from strands.tools.mcp import MCPClient
from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client

mcp_client = MCPClient(lambda: aws_iam_streamablehttp_client(
    endpoint=gateway_url,
    aws_region='us-west-2',
    aws_service='bedrock-agentcore',
))

with mcp_client:
    # 通过 MCP 自动发现知识库工具
    tools = mcp_client.list_tools_sync()
    print(f"可用工具: {[t.tool_name for t in tools]}")

    # 查询(代理永远看不到知识库 ID)
    result = mcp_client.call_tool_sync(
        'tool_call_1',
        tools[0].tool_name,
        {'retrievalQuery': {'text': '我们的总营收是多少?'}},
    )

此模式兼容 Strands、LangChain、CrewAI 或其他 MCP 兼容框架。网关会透明处理 IAM 认证、路由和可观测性。

索尼公司正在基于 Amazon Bedrock AgentCore 构建智能聊天平台,帮助团队从复杂的企业内容和实时网络信息中获取可信答案。随着 Bedrock 管理知识库和网络搜索功能现已作为 AgentCore 工具开放,我们的代理系统可跨内部 PDF、演示文稿、电子表格、图表和表格进行推理,突破简单向量检索的限制,同时基于实时网络信息生成答案并确保数据始终存储在 AWS 内。这实现了跨内部知识库和网络信息的统一问答体验 – 索尼集团高级总经理 小畑正弘

可观测性

每个知识库查询(无论是通过 SDK 还是网关)都会自动将指标发布到 Amazon CloudWatch,指标命名空间为 AWS/Bedrock/KnowledgeBases,包含调用次数、客户端和服务器错误、限流等数据。对于智能检索功能,追踪事件会实时流式传输,显示每个规划步骤、子查询和评估轮次。这使您无需编写任何监控代码即可全面掌握检索过程。

如需完整的端到端演示,请查看 GitHub 上的笔记本。

管理知识库的适用场景

AWS 提供多种构建知识检索系统的方式,用于支撑代理、生成式 AI 应用和 RAG 管道。选择取决于您需要的控制程度与希望托管的程度。下图展示了管理知识库在该光谱中的位置,从最高抽象层级(Amazon Quick)到从零开始构建自定义 RAG 管道。

如果您需要自行选择向量存储并组装连接器工作流,Amazon Bedrock Knowledge Bases 仍可使用。管理知识库更适合希望专注于应用开发而非底层基础设施的团队,该服务将为您处理存储、扩展和检索等操作。

定价

托管知识库将定价整合为一种简单直观的基于使用情况的模式,而非分散到多个容量单元中。您只需为原始数据存储、标准检索 API 调用以及需要多跳推理时的智能检索付费。多模态文档解析器、托管嵌入模型和托管重排序器均无需额外成本。如果您选择使用其他 Amazon Bedrock 模型进行嵌入、重排序或编排,这些模型将适用标准 Bedrock 定价。

如需完整的定价详情和示例,请参阅 Amazon Bedrock 定价页面。

结论

Amazon Bedrock 托管知识库消除了企业数据与可运行的检索增强生成应用之间的基础设施工作。连接数据源,让服务处理解析、存储和索引,通过与查询复杂度匹配的模式进行检索。

文档级访问控制、实时 ACL 检查以及通过 Amazon CloudWatch 的原生可观测性功能均已内置,因此您的知识库在发布时即可支持生产工作负载。凭借与 AgentCore Gateway 的原生集成,您的知识库将成为 MCP 兼容代理可发现和使用的工具,无需自定义代码。

托管知识库现已在以下区域可用:us-east-1(美国弗吉尼亚)、us-west-2(美国俄勒冈)、eu-west-1(爱尔兰)、eu-central-1(德国法兰克福)、ap-southeast-2(澳大利亚悉尼)、eu-west-2(英国伦敦)、ap-northeast-1(日本东京)以及 us-gov-west-1(AWS GovCloud 美国西部)。

要开始使用,请查看文档或通过 AWS 管理控制台进行尝试。

作者简介

'\"`