

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

# 使用上下文接地检查来筛选响应中的幻觉
<a name="guardrails-contextual-grounding-check"></a>

提供引用源和用户查询时，Amazon Bedrock 护栏支持使用上下文一致性检查来检测和筛选模型响应中的幻觉。支持的用例包括计算机科学学科中定义的摘要、释义和问答。（不支持对话式 QA /Chatbot 用例。）

上下文一致性检查会检查处理的每个分块的相关性。如果任何一个分块被认为是相关的，则整个响应都被认为是相关的，因为它具有用户查询的答案。对于流式传输 API，这可能会导致向用户返回不相关的响应，并且仅在流式传输整个响应后才被标记为不相关。

情境基础检查以下范例：
+ **接地** – 根据源检查模型响应是否与事实相符且基于源。响应中引入的任何新信息都将被视为无依据的信息。
+ **相关性** – 检查模型响应是否与用户查询相关。

例如，引用源包含“伦敦是英国的首都。东京是日本的首都”，用户查询是“日本的首都是哪里？”。诸如“日本的首都是伦敦”之类的响应将被视为无依据且与事实相悖的响应，而诸如“英国的首都是伦敦”之类的响应将被视为不相关的响应，即使它是正确的，也基于源。

**注意**  
当请求包含多个 `grounding_source` 标签时，护栏会将所有提供的 `grounding_source` 值组合在一起并进行评估，而不是分别考虑每个 `grounding_source` 值。对于 `query` 标签，护栏会进行同样的操作。

**注意**  
上下文接地策略目前最多支持在接地源中包含 10 万个字符，在查询中包含 1000 个字符，在响应中包含 5000 个字符。

**置信度分数和阈值**

上下文一致性检查根据提供的来源和用户查询，为处理的每个模型响应生成与一致性和相关性对应的置信度分数。您可以配置阈值以根据生成的分数筛选模型响应。筛选阈值决定了模型响应的最低允许置信度分数，达到该分数的模型响应在生成式人工智能应用程序中被视为有依据且相关的响应。例如，如果您的接地阈值和相关性阈值均设置为 0.7，则所有接地分数或相关性分数低于 0.7 的模型响应都将被检测为幻觉并在您的应用程序中受到阻止。随着筛选阈值的增加，阻止无依据且不相关的内容的可能性就会增加，而在应用程序中看到幻觉内容的可能性也会降低。您可以将接地和相关性的阈值配置为 0 到 0.99 之间的值。阈值为 1 是无效的，因为这将阻止所有内容。

上下文一致性检查需要 3 个组件来执行检查：一致性来源、查询和要保护的内容（即模型响应）。根据您使用的是 Invoke、还是`ApplyGuardrail`直接使用 Invoke APIs Converse APIs，它们的配置会有所不同。
+ 接地源 – 回答任何用户查询所需的上下文信息。例如，“伦敦是英国的首都。东京是日本的首都”。
+ 查询 – 用户可能会问的问题。例如，“日本的首都是哪里？”。
+ 要防护的内容 – 相对于接地源和查询应加以防护的文本。对于 Invoke 和 Converse APIs，这是模型响应。例如，这可以是“日本的首都是东京”。

**无依据内容示例**
+ 接地源 –“伦敦是英国的首都。东京是日本的首都。”
+ 查询 –“日本的首都是哪里？”
+ 要防护的内容 –“日本的首都是伦敦。”

在此示例中，要防护的内容与查询相关，但由于未正确使用接地源，因此属于无依据内容。此类内容的接地分数会很低。

**不相关内容示例**
+ 接地源 –“伦敦是英国的首都。东京是日本的首都。”
+ 查询 –“日本的首都是哪里？”
+ 要防护的内容 –“英国的首都是伦敦。”

在此示例中，要防护的内容有依据但不相关。它使用来自接地源的信息，但没有回答查询。此类内容的相关性分数会很低。

**无依据且不相关内容示例**
+ 接地源 –“伦敦是英国的首都。东京是日本的首都。”
+ 查询 –“日本的首都是哪里？”
+ 要防护的内容 –“外面正在下雨。”

在此示例中，要防护的内容无依据且不相关。它既没有使用来自接地源的信息，也没有回答查询。此类内容的接地分数和相关性分数可能会很低。

**更多示例**

考虑一个旨在回答与费用和收费相关的问题的银行应用程序。

源：
+ 开设支票账户不收取任何费用。
+ 维护支票账户的月费为 10 美元。
+ 国际转账需支付 1% 的交易费。
+ 国内转账不收取任何费用。
+ 逾期支付信用卡账单的相关费用为 23.99%。

从上述源来看，根据用户的查询可以分为四种情况。

**有依据且相关**
+ 问：与支票账户相关的费用是多少？
+ 答：维护支票账户的月费为 10 美元。国内转账不收取任何费用。但是，国际转账需支付 1% 的交易费。开设支票账户不收取任何费用。

**无依据但相关**
+ 问：与信用卡相关的交易费是多少？
+ 答：与信用卡相关的交易费是 23.99%？

**有依据但不相关**
+ 问：使用银行支票账户需要支付多少费用？
+ 答：根据提供的信息，信用卡的滞纳金为 23.99%。

**无依据且不相关**
+ 问：使用银行支票账户需要支付多少费用？
+ 答：经纪人账户的费用为每笔交易 0.5 美元。

**Topics**
+ [使用控制台添加上下文一致性检查](#guardrails-contextual-grounding-console)
+ [使用 Invoke 调用上下文基础检查 APIs](#guardrails-contextual-grounding-invoke-api)
+ [调用上下文接地检查 Converse APIs](#guardrails-contextual-grounding-converse-api)
+ [使用 API 调用上下文基础检查 ApplyGuardrail](#guardrails-contextual-grounding-applyguardrail-api)

## 使用控制台添加上下文一致性检查
<a name="guardrails-contextual-grounding-console"></a>

1. 使用有权使用 Amazon Bedrock 控制台的 IAM 身份登录。 AWS 管理控制台 然后，在 [https://console.aws.amazon.com/](https://console.aws.amazon.com/bedrock)bedrock 上打开 Amazon Bedrock 控制台。

1. 从左侧导航栏中，选择**护栏**，然后选择**创建护栏**。

1. 对于**提供护栏详细信息**页面，执行以下操作：

   1. 在**护栏详细信息**部分，提供护栏的**名称**和（可选的）**描述**。

   1. 对于**针对阻止的提示显示的消息**，输入一条将在应用护栏时显示的消息。选中**对回应应用相同的阻止消息**复选框，以便在对响应应用您的护栏时使用相同的消息。

   1. （可选）要为护栏启用[跨区域推理](guardrails-cross-region.md)，请展开**跨区域推理**，然后选择**为护栏启用跨区域推理**。选择一个护栏配置文件，该配置文件定义了 AWS 区域 可以路由护栏推理请求的目的地。

   1. （可选）默认情况下，您的护栏使用 AWS 托管式密钥加密。要使用您自己的客户自主管理型 KMS 密钥，请展开 **KMS 密钥选择**，然后选中**自定义加密设置（高级）**复选框。

      您可以选择现有 AWS KMS 密钥或选择 “**创建 AWS KMS 密钥**” 来创建新密钥。

   1. （可选）要向护栏添加标签，请展开**标签**，然后为您定义的每个标签选择**添加新标签**。

      有关更多信息，请参阅 [标记 Amazon Bedrock 资源](tagging.md)。

   1. 选择**下一步**。

1. 在**添加上下文一致性检查**页面上，配置阈值以阻止无依据或不相关的信息。
**注意**  
对于每种类型的检查，您可以移动滑块或输入介于 0 到 0.99 之间的阈值。针对使用情况选择合适的阈值。较高的阈值将要求响应的内容必须有依据或相关，并具有很高的置信度。低于阈值的响应将被筛选掉。

   1. 在**接地**字段中，选择**启用接地检查**以检查模型响应的内容是否有依据。

   1. 在**相关性**字段中，选择**启用相关性检查**以检查模型响应是否相关。

   1. 配置完敏感信息筛选条件后，选择**下一步**或**跳至“查看并创建”**。

## 使用 Invoke 调用上下文基础检查 APIs
<a name="guardrails-contextual-grounding-invoke-api"></a>

为了在输入中标记接地源和查询，我们提供了 2 个与运行方式与输入标签相同的标签。这些标签是 `amazon-bedrock-guardrails-groundingSource_xyz` 和 `amazon-bedrock-guardrails-query_xyz`（假设标签后缀是 xyz）。例如：

```
{
    "text": """
<amazon-bedrock-guardrails-groundingSource_xyz>London is the capital of UK. Tokyo is the capital of Japan. </amazon-bedrock-guardrails-groundingSource_xyz>

<amazon-bedrock-guardrails-query_xyz>What is the capital of Japan?</amazon-bedrock-guardrails-query_xyz>
""",
    "amazon-bedrock-guardrailConfig": {
        "tagSuffix": "xyz",
    },
}
```

请注意，执行上下文一致性检查需要模型响应，因此只对输出进行检查，不对提示执行检查。

这些标签可以与 guardContent 标签一起使用。如果不使用 guardContent 标签，则护栏将默认对整个输入（包括接地源和查询）应用所有配置的策略。如果使用 guardContent 标签，则上下文接地检查策略将仅调查接地源、查询和响应，而其余策略将调查 guardContent 标签内的内容。

## 调用上下文接地检查 Converse APIs
<a name="guardrails-contextual-grounding-converse-api"></a>

要标记接地源并查询 Converse APIs，请使用每个防护内容块中的限定符字段。例如：

```
[
    {
        "role": "user",
        "content": [
            {
                "guardContent": {
                    "text": {
                        "text": "London is the capital of UK. Tokyo is the capital of Japan",
                        "qualifiers": ["grounding_source"],
                    }
                }
            },
            {
                "guardContent": {
                    "text": {
                        "text": "What is the capital of Japan?",
                        "qualifiers": ["query"],
                    }
                }
            },
        ],
    }
]
```

请注意，执行上下文一致性检查需要模型响应，因此只对输出进行检查，不对提示执行检查。

如果所有内容块都没有使用 guard\$1content 限定符进行标记，则上下文一致性检查策略将仅调查一致性来源、查询和响应。其余策略将遵循默认的调查行为：系统提示默认为不进行调查，消息默认为进行调查。但是，如果内容块使用 guard\$1content 限定符进行标记，则上下文一致性检查策略将仅调查一致性来源、查询和响应，而其余策略将调查用 guardContent 标签标记的内容。

## 使用 API 调用上下文基础检查 ApplyGuardrail
<a name="guardrails-contextual-grounding-applyguardrail-api"></a>

使用上下文接地检查与`ApplyGuardrail`使用上下文接地检查类似。Converse APIs要针对 `ApplyGuardrail` 标记一致性来源和查询，请在每个内容块中使用 qualifiers 字段。但是，由于 `ApplyGuardrail` 不会调用模型，因此您还必须提供一个包含要护栏的内容的额外内容块。可以选择使用 guard\$1content 限定此内容块，它等同于 Invoke\$1 或 Converse\$1 中的模型响应。 APIs例如：

```
[
    {
        "text": {
            "text": "London is the capital of UK. Tokyo is the capital of Japan",
            "qualifiers": [
                "grounding_source"
            ]
        }
    },
    {
        "text": {
            "text": "What is the capital of Japan?",
            "qualifiers": [
                "query"
            ]
        }
    },
    {
        "text": {
            "text": "The capital of Japan is Tokyo."
        }
    }
]
```

请注意，执行上下文一致性检查需要模型响应，因此只对输出进行检查，不对提示执行检查。

如果所有内容块都没有使用 guard\$1content 限定符进行标记，则上下文一致性检查策略将仅调查一致性来源、查询和响应。其余策略将遵循默认的调查行为：系统提示默认为不进行调查，消息默认为进行调查。但是，如果内容块使用 guard\$1content 限定符进行标记，则上下文一致性检查策略将仅调查一致性来源、查询和响应，而其余策略将调查用 guardContent 标签标记的内容。