配置和自定义查询和响应生成 - Amazon Bedrock

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

配置和自定义查询和响应生成

您可以配置和自定义检索和响应生成,从而进一步提高响应的相关性。例如,您可以对文档元数据字段/属性应用筛选器,以使用最近更新的文档或修改时间最近的文档。

要在控制台或中了解有关这些配置的更多信息API,请从以下主题中进行选择。

主题

    搜索类型定义了如何查询知识库中的数据源。以下搜索类型是可能的:

    • 默认 — Amazon Bedrock 为您决定搜索策略。

    • Hybrid — 将搜索向量嵌入(语义搜索)与搜索原始文本相结合。目前,只有包含可筛选文本字段的 Amazon OpenSearch Serverless 矢量存储才支持混合搜索。如果您使用其他矢量存储,或者您的 Amazon OpenSearch Serverless 矢量存储不包含可筛选的文本字段,则查询将使用语义搜索。

    • 语义-仅搜索向量嵌入。

    要了解如何定义搜索类型,请选择与您选择的方法相对应的选项卡,然后按照以下步骤操作:

    Console

    按照中的控制台步骤进行操作查询知识库并生成 AI 响应。打开 “配置” 窗格时,您将看到以下搜索类型选项:

    • 默认 — Amazon Bedrock 决定哪种搜索策略最适合您的矢量商店配置。

    • 混合 — Amazon Bedrock 同时使用矢量嵌入和原始文本来查询知识库。只有当您使用配置了可筛选文本字段的 Amazon OpenSearch Serverless 矢量存储时,此选项才可用。

    • 语义 — Amazon Bedrock 使用其向量嵌入来查询知识库。

    API

    当你做一个 RetrieveRetrieveAndGenerate请求,包括一个映射到KnowledgeBaseRetrievalConfiguration对象的retrievalConfiguration字段。要查看此字段的位置,请参阅 RetrieveRetrieveAndGenerateAPI参考文献中的请求正文。

    以下JSON对象显示了在KnowledgeBaseRetrievalConfiguration对象中设置搜索类型配置所需的最少字段:

    "retrievalConfiguration": { "vectorSearchConfiguration": { "overrideSearchType": "HYBRID | SEMANTIC" } }

    overrideSearchType字段中指定搜索类型。您有以下选项:

    • 如果您未指定值,Amazon Bedrock 将决定哪种搜索策略最适合您的矢量商店配置。

    • HYBRID— Amazon Bedrock 同时使用矢量嵌入和原始文本来查询知识库。只有当您使用配置了可筛选文本字段的 Amazon OpenSearch Serverless 矢量存储时,此选项才可用。

    • SEMANTIC— Amazon Bedrock 使用其向量嵌入来查询知识库。

    查询分解是一种用于将复杂查询分解为更小、更易于管理的子查询的技术。这种方法可以帮助检索更准确、更相关的信息,尤其是在初始查询涉及多个方面或过于宽泛的情况下。启用此选项可能会导致对您的知识库执行多个查询,这可能有助于获得更准确的最终响应。

    例如,对于像 “谁在2022年FIFA世界杯上得分更高,阿根廷还是法国?” ,在生成最终答案之前,Amazon Bedrock 知识库可能会先生成以下子查询:

    1. 阿根廷在2022年FIFA世界杯决赛中打进了多少球?

    2. 法国在2022年FIFA世界杯决赛中打进了多少球?

    Console
    1. 创建和同步数据源或使用现有知识库。

    2. 进入测试窗口并打开配置面板。

    3. 启用查询重新表达。

    API
    POST /retrieveAndGenerate HTTP/1.1 Content-type: application/json { "input": { "text": "string" }, "retrieveAndGenerateConfiguration": { "knowledgeBaseConfiguration": { "orchestrationConfiguration": { // Query decomposition "queryTransformationConfiguration": { "type": "string" // enum of QUERY_DECOMPOSITION } }, ...} }

    在基于信息检索生成响应时,您可以使用推理参数来更好地控制模型在推理期间的行为并影响模型的输出。

    要了解如何修改推理参数,请选择与所选方法对应的选项卡,然后按照以下步骤操作:

    Console

    要在查询知识库时修改推理参数,请按照中的控制台查询知识库并生成 AI 响应步骤操作。当你打开配置窗格时,你会看到推理参数部分。根据需要修改参数。

    要在与您的文档聊天时修改推理参数,请按照中的步骤操作。在未配置知识库的情况下与您的文档聊天配置窗格中,展开推理参数部分,并根据需要修改参数。

    API

    您在调用时提供模型参数 RetrieveAndGenerateAPI。您可以通过在(如果您查询知识库)或knowledgeBaseConfiguration(如果您与文档聊天inferenceConfig字段中externalSourcesConfiguration提供推理参数来自定义模型。

    inferenceConfig字段中有一个包含以下参数的textInferenceConfig字段,您可以执行以下操作:

    • 温度

    • topP

    • maxTokenCount

    • stopSequences

    您可以通过在externalSourcesConfiguration和的inferenceConfig字段中使用以下参数来自定义模型knowledgeBaseConfiguration

    • 温度

    • topP

    • maxTokenCount

    • stopSequences

    有关每个参数的功能的详细说明,请参见使用推理参数生成影响响应

    此外,您可以textInferenceConfig通过additionalModelRequestFields地图提供不支持的自定义参数。您可以使用此参数提供特定模型独有的参数,有关唯一参数请参见基础模型的推理请求参数和响应字段

    如果省略了参数textInferenceConfig,则将使用默认值。中未识别的任何参数都textInferneceConfig将被忽略,而在中未识别的任何参数都AdditionalModelRequestFields将导致异常。

    如果additionalModelRequestFields和中的参数相同,则会引发验证异常TextInferenceConfig

    在中使用模型参数 RetrieveAndGenerate

    以下是RetrieveAndGenerate请求正文generationConfigurationinferenceConfigadditionalModelRequestFields下方的结构示例:

    "inferenceConfig": { "textInferenceConfig": { "temperature": 0.5, "topP": 0.5, "maxTokens": 2048, "stopSequences": ["\nObservation"] } }, "additionalModelRequestFields": { "top_k": 50 }

    上面的示例将 a temperature 设置为 0.5,top_p为 0.5,maxTokens为 2048,如果在生成的响应中遇到字符串 “\nObservation”,则停止生成,并传递自定义top_k值 50。

    当您查询知识库时,默认情况下,Amazon Bedrock 会在响应中返回最多五个结果。每个结果都对应一个源块。

    要修改要返回的最大结果数,请选择与所选方法对应的选项卡,然后按照以下步骤操作:

    Console

    按照中的控制台步骤进行操作查询知识库并生成 AI 响应。在 “配置” 窗格中,展开 “检索到的最大结果数”。

    API

    当你做一个 RetrieveRetrieveAndGenerate请求,包括一个映射到KnowledgeBaseRetrievalConfiguration对象的retrievalConfiguration字段。要查看此字段的位置,请参阅 RetrieveRetrieveAndGenerateAPI参考文献中的请求正文。

    以下JSON对象显示了在KnowledgeBaseRetrievalConfiguration对象中设置要返回的最大结果数所需的最小字段:

    "retrievalConfiguration": { "vectorSearchConfiguration": { "numberOfResults": number } }

    指定要在numberOfResults字段中KnowledgeBaseRetrievalConfiguration返回的最大检索结果数(有关可接受值的范围,请参阅中的numberOfResults字段)。

    您可以将筛选器应用于文档字段/属性,以帮助您进一步提高回复的相关性。您的数据源可以包含要筛选的文档元数据属性/字段。例如,文档 “epoch_modification_time” 或 1970 年 1 月 1 日该文档最后一次更新时的秒数。您可以筛选最新的数据,其中 “epoch_modification_time” 大于某个数字。这些最新的文档可用于查询。

    要在查询知识库时使用筛选器,请检查您的知识库是否满足以下要求:

    • 配置数据源连接器时,大多数连接器都会抓取文档的主元数据字段。如果使用 Amazon S3 存储桶作为数据源,则该存储桶必须至少包含一个fileName.extension.metadata.json与其关联的文件或文档的存储桶。有关配置元数据文件的更多信息,请参阅 Amazon S3 连接配置。

    • 如果知识库的向量索引位于 Amazon OpenSearch Serverless 矢量存储中,请检查该faiss引擎是否配置了矢量索引。如果使用引nmslib擎配置了向量索引,则必须执行以下操作之一:

    • 如果您要向 Amazon Aurora 数据库集群中的现有向量索引添加元数据,则在开始摄取之前,必须为元数据文件中的每个元数据属性向表中添加一列。元数据属性值将写入这些列。

    在查询时,您可以使用以下筛选运算符来筛选结果:

    筛选运算符
    运算符 控制台 API过滤器名称 支持的属性数据类型 筛选结果
    等于 = equals 字符串、数字、布尔值 属性与您提供的值相匹配
    不等于 != notEquals 字符串、数字、布尔值 属性与您提供的值不匹配
    Greater than > greaterThan number 属性大于您提供的值
    大于或等于 >= greaterThanOr等于 number 属性大于或等于您提供的值
    Less than < lessThan number 属性小于您提供的值
    小于或等于 <= lessThanOr等于 number 属性小于或等于您提供的值
    In : 字符串列表 属性在您提供的列表中(目前亚马逊 OpenSearch 无服务器矢量商店最受支持)
    不在 !: notIn 字符串列表 属性不在您提供的列表中(目前,Amazon OpenSearch Serverless 矢量存储最受支持)
    开始于 ^ startsWith 字符串 属性以您提供的字符串开头(目前最支持的是 Amazon OpenSearch Serverless 矢量存储)

    要组合筛选运算符,可以使用以下逻辑运算符:

    逻辑运算符
    运算符 控制台 API过滤器字段名称 筛选结果
    并且 以及 andAll 结果满足群组中的所有筛选表达式
    Or 或者 orAll 结果满足组中至少一个筛选表达式

    要了解如何使用元数据筛选结果,请选择与您选择的方法相对应的选项卡,然后按照以下步骤操作:

    Console

    按照中的控制台步骤进行操作查询知识库并生成 AI 响应。当你打开 “配置” 窗格时,你会看到 “筛选器” 部分。以下过程描述了不同的用例:

    • 要添加筛选条件,请在框中输入元数据属性、筛选运算符和值来创建筛选表达式。用空格分隔表达式的每个部分。按 Enter 键添加过滤器。

      有关可接受的筛选运算符的列表,请参阅上面的筛选运算符表。在元数据属性后面添加空格时,还可以看到筛选运算符列表。

      注意

      必须用引号将字符串括起来。

      例如,您可以通过添加以下筛选器来筛选来自包含genre元数据属性的源文档"entertainment"的结果,该属性的值为:genre = "entertainment"

      添加一个过滤器。
    • 要添加其他筛选器,请在框中输入另一个筛选表达式,然后按 E nter。您最多可以在群组中添加 5 个过滤器。

      添加另一个过滤器。
    • 默认情况下,查询将返回满足您提供的所有筛选表达式的结果。要返回至少满足其中一个筛选表达式的结果,请在任意两个筛选操作之间选择下拉菜单,然后选择

      更改过滤器之间的逻辑操作。
    • 要组合不同的逻辑运算符,请选择 + 添加组以添加筛选器组。在新组中输入筛选表达式。您最多可以添加 5 个筛选器组。

      添加筛选器组以组合不同的逻辑运算符。
    • 要更改所有筛选组之间使用的逻辑运算符,请在任意两个筛选组之间选择AND下拉菜单,然后选择

      更改筛选器组之间的逻辑操作。
    • 要编辑筛选器,请将其选中,修改筛选操作,然后选择 A pply

      编辑筛选条件。
    • 要移除筛选器组,请选择该组旁边的垃圾桶图标 ( Trapezoid-shaped diagram showing data flow from source to destination through AWS Transfer Family. )。要移除过滤器,请选择过滤器旁边的删除图标 ( Close or cancel icon represented by an "X" symbol. )。

      删除筛选器或筛选器组。

    下图显示了一个筛选器配置示例,除了类型为或2018且作者以开头的文档外"entertainment",该配置还返回所有以其类型为"cooking""sports"的文档编写的文档"C"

    过滤器配置示例。
    API

    当你做一个 RetrieveRetrieveAndGenerate请求,包括一个映射到KnowledgeBaseRetrievalConfiguration对象的retrievalConfiguration字段。要查看此字段的位置,请参阅 RetrieveRetrieveAndGenerateAPI参考文献中的请求正文。

    以下JSON对象显示了KnowledgeBaseRetrievalConfiguration对象中为不同用例设置过滤器所需的最少字段:

    1. 使用一个过滤运算符(参见上面的过滤运算符表)。

      "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] } } } }
    2. 使用逻辑运算符(参见上面的逻辑运算符表)最多可组合 5 个。

      "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ] } } }
    3. 使用逻辑运算符将最多 5 个筛选运算符组合到一个筛选器组中,使用第二个逻辑运算符将该筛选器组与其他筛选运算符合并。

      "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ], "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] } ] } } }
    4. 将最多 5 个筛选器组嵌入到另一个逻辑运算符中,从而将其合并。您可以创建一层嵌入。

      "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ], "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ] ] } } }

    下表描述了您可以使用的过滤器类型:

    字段 支持的值数据类型 筛选结果
    equals 字符串、数字、布尔值 属性与您提供的值相匹配
    notEquals 字符串、数字、布尔值 属性与您提供的值不匹配
    greaterThan number 属性大于您提供的值
    greaterThanOrEquals number 属性大于或等于您提供的值
    lessThan number 属性小于您提供的值
    lessThanOrEquals number 属性小于或等于您提供的值
    in 字符串列表 属性在您提供的列表中
    notIn 字符串列表 属性不在您提供的列表中
    startsWith 字符串 属性以您提供的字符串开头(仅支持 Amazon OpenSearch Serverless 矢量存储)

    要组合筛选器类型,可以使用以下逻辑运算符之一:

    字段 地图到 筛选结果
    andAll 最多 5 种过滤器类型的列表 结果满足群组中的所有筛选表达式
    orAll 最多 5 种过滤器类型的列表 结果满足组中至少一个筛选表达式

    有关示例,请参阅发送查询并包含筛选条件(检索)发送查询并包含筛选条件(RetrieveAndGenerate)

    当您查询知识库并请求生成响应时,Amazon Bedrock 使用将说明和上下文与用户查询相结合的提示模板来构造发送到模型以生成响应的提示。您可以使用以下工具设计提示模板:

    • 提示占位符 — Amazon Bedrock 知识库中的预定义变量,这些变量在知识库查询期间在运行时动态填充。在系统提示符中,您会看到这些占位符被$符号包围。以下列表描述了您可以使用的占位符:

      Variable 替换为 模型 必填?
      $query$ 发送到知识库的用户查询。 Anthropic Claude Instant, Anthropic Claude v2.x
      Anthropic Claude 3 Sonnet 否(自动包含在模型输入中)
      $search_results$ 检索到的用户查询结果。 全部
      $output_format_instructions$ 格式化响应生成和引文的基本说明。因型号而异。如果您自己定义格式化说明,我们建议您删除此占位符。如果没有这个占位符,响应将不包含引文。 全部
      $current_time$ 当前时间。 全部
    • XML标签 — Anthropic 模型支持使用XML标签来构造和描绘您的提示。使用描述性标签名称以获得最佳结果。例如,在默认的系统提示中,您将看到用于描述先前问过的问题数据库的<database>标签)。有关更多信息,请参阅中的使用XML标签 Anthropic 用户指南

    有关一般提示工程指南,请参阅 提示工程概念

    选择与您选择的方法相对应的选项卡,然后按照以下步骤操作:

    Console

    按照中的控制台步骤进行操作查询知识库并生成 AI 响应。在测试窗口中,打开 “生成响应”。然后,在配置窗格中,展开知识库提示模板部分。

    1. 选择编辑

    2. 在文本编辑器中编辑系统提示,包括必要的提示占位符和XML标签。要恢复到默认提示模板,请选择 “重置为默认值”。

    3. 编辑完成后,选择保存更改。要在不保存系统提示的情况下退出,请选择 “放弃更改”。

    API

    当你做一个 RetrieveAndGenerate请求,包括一个映射到GenerationConfiguration对象的generationConfiguration字段。要查看此字段的位置,请参阅 RetrieveAndGenerateAPI参考文献中的请求正文。

    以下JSON对象显示了在GenerationConfiguration对象中设置要返回的最大检索结果数所需的最小字段:

    "generationConfiguration": { "promptTemplate": { "textPromptTemplate": "string" } }

    textPromptTemplate字段中输入您的自定义提示模板,包括必要的提示占位符和XML标签。有关系统提示符中允许的最大字符数,请参阅中的textPromptTemplate字段GenerationConfiguration

    您可以针对自己的用例和负责任的 AI 政策为知识库实施保护措施。您可以创建针对不同用例量身定制的多个护栏,并将其应用于多个请求和响应条件,从而在整个知识库中提供一致的用户体验并标准化安全控制。您可以将拒绝的主题配置为禁止不受欢迎的话题,将内容过滤器配置为屏蔽模型输入和响应中的有害内容。有关更多信息,请参阅 使用 Amazon Bedrock Guardrails 阻止模型中的有害内容

    注意

    Claude 3 Sonnet 和 Haiku 目前不支持使用具有上下文基础的护栏作为知识库。

    有关一般提示工程指南,请参阅 提示工程概念

    选择与您选择的方法相对应的选项卡,然后按照以下步骤操作:

    Console

    按照中的控制台步骤进行操作查询知识库并生成 AI 响应。在测试窗口中,打开 “生成响应”。然后,在 “配置” 窗格中,展开 “护栏” 部分。

    1. 护栏部分,选择护栏的名称版本如果您想查看所选护栏和版本的详细信息,请选择 “查看”。

      或者,您可以通过选择 Guardrail 链接来创建新的。

    2. 编辑完成后,选择保存更改。要在不保存的情况下退出,请选择 “放弃更改”。

    API

    当你做一个 RetrieveAndGenerate请求,请在请求中包含generationConfiguration要使用护栏的guardrailsConfiguration字段。要查看此字段的位置,请参阅 RetrieveAndGenerateAPI参考文献中的请求正文。

    以下JSON对象显示了在中设置所需的最少字段guardrailsConfigurationGenerationConfiguration

    "generationConfiguration": { "guardrailsConfiguration": { "guardrailsId": "string", "guardrailsVersion": "string" } }

    指定所选护栏guardrailsVersionguardrailsId和。