检索段落 - Amazon Kendra

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

检索段落

您可以将 Retrieve API 用作检索增强生成(RAG)系统的检索器。

RAG 系统使用生成式人工智能来构建问答应用程序。RAG 系统由检索器和大型语言模型(LLM)组成。给定一个查询,检索器会从文档语料库中识别出最相关的文本块,并将其提供给 LLM 以提供最有用的答案。然后,LLM 会分析相关的文本块或段落,并为查询生成全面的响应。

RetrieveAPI 会查看被称为段落的大块文本或摘录,并返回与查询最相关的热门段落。

Query API 一样,Retrieve API 也使用语义搜索来搜索相关信息。语义搜索会考虑搜索查询的上下文,以及索引文档中的所有可用信息。但是,默认情况下,Query API 仅返回最多 100 个标记词的摘录段落。使用 Retrieve API,您可以检索最多 200 个标记词和多达 100 个语义相关段落的较长段落。这不包括索引中的问题答案或常见问题解答类型的回复。这些段落是文本摘录,可以在语义上从多个文档和同一文档的多个部分中提取出来。如果在极端情况下,您的文档使用 Retrieve API 生成零段落,则可以选择使用 Query API 及其响应类型。

您可以使用 Retrieve API 执行以下操作:

  • 覆盖指数级别的提升

  • 根据文档字段或属性进行筛选

  • 根据用户或其群组对文档的访问权限进行筛选

  • 查看置信度分数区以获取检索到的通过结果。 Amazon Kendra 的置信度分区提供相对排名,表示响应与查询相关的信心程度。

    注意

    置信度分数桶目前仅适用于英语。

您还可以在响应中加入某些字段,这些字段可能会提供有用的其他信息。

Retrieve API 目前不支持该 Query API 支持的所有功能。不支持以下功能:使用高级查询语法进行查询,使用建议的拼写更正进行查询,使用分面进行查询,自动完成搜索查询的查询建议以及增量学习。请注意,并非所有功能都适用于 Retrieve API。Retrieve该 API 的任何未来版本都将记录在本指南中。

Retrieve API 共享您为索引设置的查询容量单位数。有关单个容量单位中包含的内容以及索引的默认基本容量的更多信息,请参阅调整容量

注意

如果您使用的是 Amazon Kendra 开发者版,则无法添加容量;只能在使用 Amazon Kendra 企业版时添加容量。有关开发人员版和企业版中包含的内容的更多信息,请参阅 Amazon Kendra 版本

以下是使用 Retrieve API 从 "how does amazon kendra work?" 查询索引中的文档中检索前 100 条最相关的段落的示例

Python
import boto3 import pprint kendra = boto3.client("kendra") # Provide the index ID index_id = "index-id" # Provide the query text query = "how does amazon kendra work?" # You can retrieve up to 100 relevant passages # You can paginate 100 passages across 10 pages, for example page_size = 10 page_number = 10 result = kendra.retrieve( IndexId = index_id, QueryText = query, PageSize = page_size, PageNumber = page_number) print("\nRetrieved passage results for query: " + query + "\n") for retrieve_result in result["ResultItems"]: print("-------------------") print("Title: " + str(retrieve_result["DocumentTitle"])) print("URI: " + str(retrieve_result["DocumentURI"])) print("Passage content: " + str(retrieve_result["Content"])) print("------------------\n\n")
Java
package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.RetrieveRequest; import software.amazon.awssdk.services.kendra.model.RetrieveResult; import software.amazon.awssdk.services.kendra.model.RetrieveResultItem; public class RetrievePassageExample { public static void main(String[] args) { KendraClient kendra = KendraClient.builder().build(); String indxId = "index-id"; String query = "how does amazon kendra work?"; Integer pgSize = 10; Integer pgNumber = 10; RetrieveRequest retrieveRequest = retrieveRequest .builder() .indexId(indxId) .queryText(query) .pageSize(pgSize) .pageNumber(pgNumber) .build(); RetrieveResult retrieveResult = kendra.retrieve(retrieveRequest); System.out.println(String.format("\nRetrieved passage results for query: %s", query)); for(RetrieveResultItem item: retrieveResult.resultItems()) { System.out.println("----------------------"); System.out.println(String.format("Title: %s", documentTitle)); System.out.println(String.format("URI: %s", documentURI)); System.out.println(String.format("Passage content: %s", content)); System.out.println("-----------------------\n"); } } }