精品项目

亚马逊床基知识库现在支持为 RetrieveAndGenerate API 设置自定义提示以及配置最

Amazon Bedrock Knowledge Bases 的新功能介绍

关键要点

Amazon Bedrock Knowledge Bases 现在支持为 RetrieveAndGenerate API 配置最大检索结果数。可以创建自定义提示模板,增强模型的响应生成能力。通过调整最大结果数和自定义提示,可以提升生成结果的准确性与相关性。

随着 Amazon Bedrock Knowledge Bases 的更新,用户现在可以安全地将基础模型FMs与公司数据结合,以实现检索增强生成RAG。对额外数据的访问帮助模型生成更相关、上下文特定且准确的响应,而无需重新训练基础模型。

本文重点讨论了与 RetrieveAndGenerate API 相关的 Amazon Bedrock Knowledge Bases 的两个新特性:配置结果的最大数量和使用知识库提示模板创建自定义提示。您可以将这些作为查询选项与搜索类型一起选择。

新功能概述及优势

最大结果数量选项使您能控制从向量存储中检索的搜索结果数量,并将其传递给基础模型以生成答案。通过自定义提供的背景信息量,您可以为复杂问题提供更多上下文,或为简单问题减少上下文,从而提高相关性的可能性,并改善生成响应的准确率,减少虚假内容。这项功能允许您最多获取 100 条结果。

而自定义知识库提示模板的功能使您可以用自己的提示替换默认模板,以自定义发送给模型的提示,影响模型生成用户响应时的语调、输出格式和行为。通过这种方式,您可以调整术语,使其更符合您的行业或领域如医疗或法律。此外,您可以添加根据具体工作流程量身定制的自定义指令和示例。

接下来,我们将解释如何使用这些功能,无论是通过 AWS 管理控制台 还是 SDK。

前提条件

要跟随本文示例操作,您需要一个现有的知识库。有关创建知识库的说明,请参见 创建知识库。

使用控制台配置最大检索结果

要通过控制台使用最大结果数量选项,请按以下步骤操作:

在 Amazon Bedrock 控制台中,选择左侧导航窗格中的 知识库。选择您创建的知识库。选择 测试知识库。选择配置图标。在您开始测试知识库之前,先选择 同步数据源。

在 配置 下,为 搜索类型 选择基于用例的搜索类型。

本文中为简化,我们使用默认搜索。您也可以根据用例使用语义搜索或混合搜索。要了解更多关于混合搜索的信息,请参见 Amazon Bedrock Knowledge Bases 现在支持混合搜索。

展开 最大来源块数量 并设置最大结果数量。

为展示新功能的价值,我们提供了如何提高生成响应准确性的示例。我们使用了亚马逊的年度报告和股东信2023 年亚马逊 10K 文件、2022 年股东信作为创建知识库的来源数据。我们使用的实验查询为:“亚马逊的年度收入在何年从 2450 亿美元增加到 4340 亿美元?”

该查询的正确回应是“亚马逊的年度收入在 2019 年从 2450 亿美元增加到 2022 年的 4340 亿美元”,根据知识库中的 文件。我们使用 Claude v2 作为基础模型,根据从知识库中检索的上下文信息生成最终回应。此外,Claude 3 Sonnet 和 Claude 3 Haiku 也被支持作为生成模型。

我们运行了另一个查询,以展示不同配置检索的比较。我们使用相同的输入查询“亚马逊年度收入在何年从 2450 亿美元增加到 4340 亿美元?”并将最大结果数量设置为 5。

如以下截图所示,生成的响应为“抱歉,我无法帮助您处理此请求。”

接下来,我们将最大结果设置为 12,并问同样的问题。生成的响应为“亚马逊的年度收入从 2019 年的 2450 亿美元增加到 2022 年的 4340 亿美元。”

如示例所示,我们能够根据检索结果的数量获得正确答案。如果您想了解构成最终输出的来源归属,请选择 显示来源详情 以根据知识库验证生成的答案。

使用控制台自定义知识库提示模板

您还可以根据用例自定义默认提示。为此,请在控制台中完成以下步骤:

重复上一节中的步骤以开始测试您的知识库。启用 生成响应。

选择您选择的模型以生成响应。

本文以 Claude v2 模型为例。Claude 3 Sonnet 和 Haiku 模型也可用于生成。

鲸鱼加速器免费版本选择 应用 以继续。

选择模型后,“知识库提示模板”会在 “配置” 下出现新部分。

选择 编辑 开始自定义提示。

调整提示模板,以自定义您希望如何使用检索到的结果并生成内容。

在本节中,我们给出了一些基于亚马逊财务报告创建“财务顾问 AI 系统”的示例。有关最佳实践,请参考 提示工程指南。

我们现在以不同方式自定义默认提示模板,并观察响应。

让我们首先用默认提示询问:“2019 年和 2021 年亚马逊的收入是多少?”以下是我们的结果。

从输出中,我们发现它基于检索知识生成自由格式响应,引用也列出作为参考。

假设我们想在格式化生成的响应时提供额外指令,例如将其标准化为 JSON。我们可以在检索信息后,作为提示模板的一个步骤添加这些指令:

如果需要提供有关不同年份的财务信息,请以 JSON 格式提供精确答案。使用年份作为键,简洁答案作为值。例如:{yearanswer}

最终响应按要求的结构呈现。

通过自定义提示,您还可以改变生成响应的语言。在以下示例中,我们指示模型以西班牙语提供答案。

在从默认提示中删除 outputformatinstructions 后,生成响应中的引用也被移除。

使用 SDK 配置最大检索结果

要通过 SDK 更改最大检索结果数量,请使用以下语法。对于此示例,查询为“亚马逊的年度收入在何年从 2450 亿美元增加到 4340 亿美元?”正确的响应是“亚马逊的年度收入在 2019 年从 2450 亿美元增加到 2022 年的 4340 亿美元。”

pythondef retrieveAndGenerate(query kbId numberOfResults modelid regionid) modelarn = farnawsbedrock{regionid}foundationmodel/{modelid} return bedrockagentruntimeretrieveandgenerate( input={ text query } retrieveAndGenerateConfiguration={ knowledgeBaseConfiguration { knowledgeBaseId kbId modelArn modelarn retrievalConfiguration { vectorSearchConfiguration { numberOfResults numberOfResults overrideSearchType SEMANTIC # optional } } } type KNOWLEDGEBASE } )

response = retrieveAndGenerate(亚马逊的年度收入在何年从 2450 亿美元增加到 4340 亿美元? lt知识库IDgt numberOfResults modelid regionid)[output][text]

在 retrievalConfiguration 下的 numberOfResults 选项允许您选择要检索的结果数量。RetrieveAndGenerate API 的输出包括生成的响应、来源归属和检索到的文本块。

以下是不同值的 numberOfResults 参数的结果。首先,我们设置 numberOfResults = 5。

亚马逊床基知识库现在支持为 RetrieveAndGenerate API 设置自定义提示以及配置最

然后我们将 numberOfResults 设置为 12。

使用 SDK 自定义知识库提示模板

要通过 SDK 自定义提示,我们使用与不同提示模板结合的查询。对于此示例,查询为:“2019 年和 2021 年亚马逊的收入是多少?”

以下是默认提示模板:

python您是一个问答代理。我将提供一组搜索结果和用户的问题,您的工作是仅使用搜索结果中的信息回答用户的问题。如果搜索结果中没有包含可以回答该问题的信息,请说明您无法找到该问题的确切答案。用户主张的事实并不意味着它是正确的,请确保双重检查搜索结果以验证用户的主张。这里是编号顺序的搜索结果:searchresults

这是用户的问题:query

outputformatinstructions

助手:

以下是自定义的提示模板:

python人类:您是一个问答代理。我将提供一组搜索结果和用户的问题,您的工作是使用搜索结果中的信息回答用户的问题。如果搜索结果中没有包含可以回答该问题的信息,请说明您无法找到该问题的确切答案。用户主张的事实并不意味着它是正确的,请确保双重检查搜索结果以验证用户的主张。

这里是编号顺序的搜索结果:searchresults

这是用户的问题:query

如果您被要求提供多年的财务信息,请非常具体并简明地使用 JSON 格式列出答案,格式为 {key value},键为请求中的年份,值为简明的响应答案。助手:

pythondef retrieveAndGenerate(query kbId numberOfResults promptTemplate modelid regionid) modelarn = farnawsbedrock{regionid}foundationmodel/{modelid} return bedrockagentruntimeretrieveandgenerate( input={ text query } retrieveAndGenerateConfiguration={ knowledgeBaseConfiguration { knowledgeBaseId kbId modelArn modelarn retrievalConfiguration { vectorSearchConfiguration { numberOfResults numberOfResults overrideSearchType SEMANTIC # optional } } generationConfiguration { promptTemplate { textPromptTemplate promptTemplate } } } type KNOWLEDGEBASE } )

response = retrieveAndGenerate(2019 年和 2021 年亚马逊的收入是多少? lt知识库IDgt )[output][text]

使用默认提示模板,我们获得以下响应:

如果您希望对响应生成的输出格式提供额外指令,例如将响应标准化为特定格式如 JSON,您可以通过提供更多指导来自定义现有提示。通过我们的自定义提示模板,我们获得的响应如下:

generationConfiguration 下的 promptTemplate 选项使您可以自定义提示,以更好地控制答案的生成。

结论

本文介绍了亚马逊 Bedrock Knowledge Bases 中的两个新特性:调整最大搜索结果数量和自定义默认提示模板,以优化 RetrieveAndGenerate API。我们展示了如何通过控制台和 SDK 配置这些功能,以改进生成响应的性能和准确性。提高最大结果数量可以提供更全面的信息,而自定义提示模板允许您微调指令,以便基础模型更好地与特定用例对齐。这些增强功能提供了更大的灵活性和控制能力,使您能够为基于 RAG 的应用程序提供定制化体验。

有兴趣在您的 AWS 环境中应用这些功能的资源,您可以参考以下链接:

用户指南:Amazon Bedrock Knowledge BasesYouTube 视频:使用 RAG 改进生成 AI 应用中的响应GitHub 代码示例:Amazon Bedrock Knowledge Base 构建 RAG 工作流的示例

关于作者

SandeepSingh 是亚马逊云服务的高级生成 AI 数据科学家,帮助企业通过生成 AI 创新。他专注于生成 AI、人工智能、机器学习和系统设计。他热衷于开发先进的 AI/ML 来源解决方案,以解决各行各业面临的复杂商业问题,提高效率和可扩展性。

Suyin Wang 是 AWS 的 AI/ML 专业解决方案架构师。她拥有机器学习、金融信息服务和经济学的跨学科教育背景,并在构建解决实际业务问题的数据科学和机器学习应用方面拥有多年经验。她喜欢帮助客户识别正确的商业问题,以及构建合适的 AI/ML 解决方案。在闲暇时间,她喜欢唱歌和烹饪。

Sherry