本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用代理式检索查询知识库
代理检索使用基础模型智能地将复杂的查询分解为子查询,以迭代方式从知识库中检索相关信息,并评估检索到的结果是否足以回答原始查询。这种方法提高了复杂的多步骤问题的检索准确性,而单次检索过程可能无法完全解决这些问题。
例如,给定查询 “哪本杂志最先创办,《亚瑟杂志》还是《女性第一本杂志》?”,代理检索将其分解为单独的子查询,例如 “《亚瑟杂志》是什么时候成立的?” 以及 “First for Women 是什么时候成立的?”,检索每个结果,并评估合并后的结果是否足够。
代理检索的工作原理
当您向 AgenticRetrieveStream API 发送请求时,会发生以下过程:
-
会话历史记录加载 ——当您提供包含的
memoryConfiguration时sessionBinding,Amazon Bedrock 会在代理开始工作之前从 AgentCore 内存短期内存中恢复该会话的先前历史记录。恢复的历史记录成为请求的对话上下文。 -
规划 — 基础模型分析您的查询并创建计划以将其分解为一个或多个子查询。每个子查询都以您配置的特定源为目标,可以是知识库检索 AgentCore 器或内存长期内存。收集检索结果后,基础模型将评估它们是否足以回答原始查询。如果不是,它将计划并执行额外的检索迭代,但不超过配置的最大值。
-
检索 -子查询是针对配置的源执行的。每次检索都会收集结果。
-
完整文档扩展 — 当基础模型确定需要文档的完整内容(例如,用于摘要、验证完整性或访问特定部分)时,它会调用 GetDocumentContent API 来检索完整的文档内容。
-
响应生成 -当设置
generateResponse为true(默认)时,基础模型将从检索到的结果中合成自然语言答案。亚马逊 Bedrock 通过responseEvent活动将答案传送给您。当设置为 “sessionBinding是” 时DEFAULT,Amazon Bedrock 将保留问题和生成的会话答案。persistenceMode -
结果事件 — 所有迭代的去重检索结果、完整的合成自然语言答案和引文将返回给您。跟踪事件在整个过程中进行流式传输,以实现可观测性。
先决条件
在使用代理检索之前,必须具备以下条件:
-
完全托管的亚马逊 Bedrock 知识库。代理检索目前仅支持托管知识库。
-
访问亚马逊 Bedrock 中的基础模型,用于查询规划和评估。
-
所需的 IAM 权限。有关更多信息,请参阅 代理检索所需的权限。
使用代理检索查询知识库
要使用代理检索,AgenticRetrieveStream请发送请求。响应是一个包含检索结果和跟踪事件的流。
下表描述了密钥请求字段:
| 字段 | 说明 |
|---|---|
| 消息 | 输入查询和对话历史记录。每条消息都包含一个content带text值的role字段和一个字段(user或assistant)。 |
| 寻回犬 | 用于从中获取数据的知识库检索器。您最多可以指定 5 个检索器,每个检索器通过其 ID 指向托管知识库。每个检索器可以选择包括元数据过滤器和最大数量的结果。 |
| 代理的 RetrieveConfiguration | 代理检索配置,包括用于查询规划和评估的基础模型,以及可选的重新排名模型和最大代理迭代次数。 |
| 字段 | 说明 |
|---|---|
| 策略配置 | 将亚马逊基岩护栏配置为在代理检索期间使用。指定guardrailId和guardrailVersion。 |
| 用户上下文 | 为访问控制筛选提供用户上下文。 |
| 内存配置 | 配置用于检索的 AgentCore 内存资源。指定 amemoryId,然后sessionBinding恢复并继续会话,retrievalConfigs让代理从长期内存中检索,或两者兼而有之。有关更多信息,请参阅 使用 AgentCore 内存进行代理检索。 |
| 生成响应 | 一个布尔字段,当设置为true(默认)时,它指示基础模型从检索到的结果中生成自然语言答案。答案以文本块的形式回传并包含在结果事件中。 |
有关完整的请求和响应语法,请参阅 API 参考AgenticRetrieveStream中的。
代理检索响应
AgenticRetrieveStream响应是一个包含以下事件类型的流:
-
结果事件 (
AgenticRetrieveResultEvent)-处理完成时交付的最终事件。包含检索结果,如果启用响应生成,则包含生成的响应。结果事件包括:-
检索结果 (
results)-在所有迭代中检索到的源块。每个结果都包括内容、源检索器标识符和可选元数据。当多个子查询检索到同一个区块时,它在最终结果中只出现一次。 -
生成的响应 (
generatedResponse)-当设置generateResponse为true(默认)时,结果事件包括一个包含以下内容的generatedResponse对象:-
answer— 完整的合成自然语言答案文本。 -
citations— 一个可选列表,将答案的范围映射到支持的检索结果。每个引文都包含:-
startIndex— 被引段落在字符串内开始的answer字符偏移量。 -
endIndex— 被引段落结尾处的字符偏移量(不包括——引用的文本从startIndex上到但不包括endIndex)。 -
references— 一个列表,其中每个参考文献都有一个resultIndex字段,该字段对同一结果事件的results数组进行索引,表明哪个检索结果支持引用的跨度。
-
-
-
-
响应事件 (
AgenticRetrieveResponseEvent)-当设置generateResponse为true(默认)时,将在响应生成期间流式传输responseEvent事件。每个事件都包含一个text字段,其中包含合成的自然语言答案的增量部分。 -
跟踪事件 (
AgenticRetrieveTraceEvent)-代理检索过程中流式传输的事件,提供对每个步骤的可见性。以下是跟踪事件的类型:-
规划 -表示基础模型正在分析查询并创建子查询。包括计划采取的行动和目标来源。每个动作要么是
retrieve针对知识库的memoryRetrieve操作,要么是针对长期记忆的操作,其中包括组合查询和memoryId. -
检索 -表示正在对配置的源执行检索。包括检索输入、输出以及任何警告或故障。该
retrievalMetadata条目报告来源类型,为BedrockKnowledgeBase或BedrockAgentCoreMemory。 -
推测性检索 — 在第一个计划步骤之前运行的初始检索,以减少延迟。对于单一知识库,它使用原始用户查询检索结果。对于多个知识库,它会执行探测搜索,以帮助将查询路由到相应的检索器。配置时
retrievalConfigs,此步骤还可以从长期内存中检索。 -
完整文档展开-表示代理正在检索特定文档的完整内容。包括文档 ID、来源检索器和状态(InProgress成功或失败)。
-
会话历史负载 — 表示在代理开始工作之前,Amazon Bedrock 正在从 AgentCore内存短期内存中恢复先前会话的历史记录。
-
使用 AgentCore 内存进行代理检索
您可以授予代理检索亚马逊基岩 AgentCore 内存资源的权限。通过内存访问,检索可以继续较早的会话并利用代理在先前的会话中学到的内容。向该memoryConfiguration字段提供您的账户中处于该ACTIVE状态的内存资源的。memoryId
内存是可选的。仅设置 a memoryId 的 A 无效。memoryConfiguration当您提供内存资源时memoryConfiguration,必须通过以下两种方式中的至少一种使用内存资源:
-
Short-term memory (
sessionBinding)-恢复先前会话的历史记录,以便请求继续该会话,而不是重新开始。使用actorId和 a 标识会话sessionId。它们actorId涵盖了历史,因此一个演员的历史永远不会回到另一个演员身上。设置sessionBinding时,messages必须仅携带当前查询,且role为user。您无法在同一个请求中恢复会话和提供之前messages的对话历史记录。还原会加载角色为USER或ASSISTANT的对话事件。 -
Long-term memory (
retrievalConfigs)-使内存从先前会话中提取的 AgentCore内存记录可供代理使用。使用namespace前缀标识记录,或使用在父命名空间下的每个命名空间中检索记录。namespacePath您可以使用 astrategyId和 with 进一步缩小结果范围metadataFilters。代理决定是否检索并编写自己的查询。
提供完全按照内存策略配置的命名空间,占位符已经解析。例如,如果策略定义了命名空间/strategy/{memoryStrategyId}/actor/{actorId},则提供解析值而不是模板。有关命名空间、策略和内存记录的更多信息,请参阅 Amazon Bedrock AgentCore 开发者指南中的内存术语。
注意
您有责任提供正确的memoryIdsessionBinding、和retrievalConfigs值。代理检索不会验证您提供的会话或命名空间是否与您打算继续的对话相对应。如果您提供的值不正确,则会收到意想不到的结果。
设置后sessionBinding,persistenceMode用于控制是否将当前交换写回会话:
-
DEFAULT(默认)-将问题和生成的会话答案作为单个事件保留。此值generateResponse必须为true。 -
NONE—保持会话不变。使用此值读取会话历史记录,但不添加会话历史记录。
以下示例恢复了之前的会话,允许代理访问该参与者的长期内存,并将交换保留回会话:
{ "messages": [ { "content": { "text": "What did we decide about the migration timeline?" }, "role": "user" } ], "retrievers": [ { "configuration": { "knowledgeBase": { "knowledgeBaseId": "KB12345678" } } } ], "agenticRetrieveConfiguration": { "foundationModelType": "MANAGED", "rerankingModelType": "MANAGED" }, "memoryConfiguration": { "memoryId": "projectAssistantMemory-1a2b3c4d5e", "sessionBinding": { "actorId": "user-123", "sessionId": "session-456" }, "retrievalConfigs": [ { "namespace": "/strategy/summarization-1a2b3c4d5e/actor/user-123" } ], "persistenceMode": "DEFAULT" } }
响应流报告内存活动。恢复以会话历史加载跟踪事件的形式出现。长期内存返回的记录会显示在检索跟踪事件中BedrockAgentCoreMemory,其源类型为无论哪个步骤检索到它们。
检索本身的显示方式取决于它发生的时间。当基础模型选择搜索内存(通常在持续会话中)时,检索将显示为针对 Planning 追踪事件的memoryRetrieve操作。在新会话中,代理可以在推测性检索期间,即在第一个计划步骤之前检索长期内存,在这种情况下,它不会发出任何memoryRetrieve操作。有关更多信息,请参阅 代理检索响应。
代理检索所需的权限
要使用 AgenticRetrieveStream API,调用的 IAM 身份必须具有以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "bedrock:AgenticRetrieveStream", "Resource": "*" }, { "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:region:account-id:knowledge-base/*" }, { "Effect": "Allow", "Action": "bedrock:InvokeModelWithResponseStream", "Resource": "*" } ] }
如果您使用护栏进行代理检索,请添加以下权限:
{ "Effect": "Allow", "Action": [ "bedrock:GetGuardrail", "bedrock:ApplyGuardrail" ], "Resource": "*" }
如果您使用 AgentCore 内存资源进行代理检索,请添加以下权限:
{ "Effect": "Allow", "Action": [ "bedrock-agentcore:GetMemory", "bedrock-agentcore:ListEvents", "bedrock-agentcore:RetrieveMemoryRecords", "bedrock-agentcore:CreateEvent" ], "Resource": "arn:aws:bedrock-agentcore:region:account-id:memory/memory-id" }
bedrock-agentcore:ListEvents仅在设置时才是必需sessionBinding的。bedrock-agentcore:RetrieveMemoryRecords仅在设置时才是必需retrievalConfigs的。bedrock-agentcore:CreateEvent仅在 “是” 时才persistenceMode是必需的DEFAULT。
如果使用客户管理的密钥对内存资源进行加密,则在该密钥上添加以下权限:
{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:region:account-id:key/key-id" }
注意事项
使用代理检索时请记住以下几点:
-
代理检索仅支持托管的亚马逊 Bedrock 知识库。
-
有关每个请求的检索器配额、每次检索调用的结果以及最大代理迭代次数,请参阅。托管知识库的服务配额
-
减少最大迭代次数可能会导致代理提前停止,这可能会降低复杂查询的准确性。
-
配置护栏时,仅支持该
BLOCK操作。代理检索不支持该MASK操作。 -
客户提供并拥有代理检索期间使用的基础模型、嵌入模型和重新排序模型(如果提供)。您的 IAM 证书用于调用这些模型。
-
当您使用 AgentCore 内存资源时,该资源必须与知识库处于同一个帐户中,并且必须处于
ACTIVE状态。 -
设置时
sessionBinding,messages必须仅携带当前查询,且role为user。您无法在同一个请求中恢复会话和提供之前messages的对话历史记录。 -
恢复会话会加载角色为
USER或ASSISTANT的对话事件。 AgentCore 内存还接受TOOL和OTHER角色,恢复时不会加载这些角色。有关更多信息,请参阅亚马逊 Bedrock AgentCore API 参考Conversational中的内容。 -
retrievalConfigs目前最多接受一个条目,每个条目最多接受 5 个metadataFilters表达式。 -
a
persistenceModeofDEFAULT必须generateResponse为true,因为会话会保留生成的答案。