

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

# 使用上下文接地检查来筛选响应中的幻觉
<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 API、Converse API 还是直接使用 `ApplyGuardrail`，它们的配置会有所不同。
+ 接地源 – 回答任何用户查询所需的上下文信息。例如，“伦敦是英国的首都。东京是日本的首都”。
+ 查询 – 用户可能会问的问题。例如，“日本的首都是什么？”。
+ 要防护的内容 – 相对于接地源和查询应加以防护的文本。对于 Invoke 和 Converse API 而言，这属于模型响应。例如，这可以是 “日本的首都为东京”。

**无依据内容示例**
+ 基础来源—— “伦敦是英国的首都。东京是日本的首都。”
+ 查询-“日本的首都是哪里？”
+ 满足于警惕—— “日本的首都是伦敦。”

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

**不相关内容示例**
+ 基础来源—— “伦敦是英国的首都。东京是日本的首都。”
+ 查询-“日本的首都是哪里？”
+ 满足于警惕—— “英国的首都是伦敦。”

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

**无依据且不相关内容示例**
+ 基础来源—— “伦敦是英国的首都。东京是日本的首都。”
+ 查询-“日本的首都是哪里？”
+ 满足于警惕-“外面正在下雨。”

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

**更多示例**

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

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

根据上述来源，根据用户的查询，可能有四种场景。

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

**Un-grounded 但相关**
+ 问：与信用卡相关的交易费是多少？
+ 答：与信用卡相关的交易费是 23.99%？

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## 使用 Invoke API 调用上下文接地检查
<a name="guardrails-contextual-grounding-invoke-api"></a>

要标记接地源并在输入中进行查询，请使用以下与输入标签相同的标签。这些标签是`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`标签一起使用。除了基于上下文的依据（字词过滤器、主题过滤器、内容过滤器、敏感信息检测）之外，内部`groundingSource`内容和`query`标签不包括在政策评估之外。

其余策略的行为取决于您是否使用`guardContent`标签：
+ **不带`guardContent`标签**-其他策略使用默认行为：不调查系统提示并调查消息。
+ **使用`guardContent`标签**-其他策略仅调查`guardContent`标签内的内容。任何标签之外的内容（未加标签的文本）和`groundingSource`或`query`标签内的内容都将被跳过。

要让基础源或查询内容也由其余策略进行评估，请将上下文基础标签嵌套在标签中：`guardContent`

```
<amazon-bedrock-guardrails-guardContent_xyz><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-guardContent_xyz>

<amazon-bedrock-guardrails-query_xyz>What is the capital of Japan?</amazon-bedrock-guardrails-query_xyz>
```

在此示例中，基础源内容既用作上下文基础参考源，又由其他策略进行评估，因为它也包含在标签中。`guardContent`

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

要针对 Converse API 标记一致性来源和查询，请在每个护栏内容块中使用 qualifiers 字段。例如：

```
[
    {
        "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"],
                    }
                }
            },
        ],
    }
]
```

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

除情境基础之外的策略的行为取决于分配给每个区块的限定词：`guardContent`
+ `["grounding_source"]`— 内容仅用作上下文基础参考源。其他政策不对其进行评估。
+ `["query"]`— 内容仅用作基于上下文的用户查询。其他政策不对其进行评估。
+ `["guard_content"]`— 内容由上下文基础检查（作为要保护的内容）和所有其他策略进行评估。
+ 无限定词（不合格）— 内容由上下文基础检查（作为要保护的内容）和所有其他政策进行评估。
+ `["grounding_source", "guard_content"]`— 内容有两个作用：用作情境基础参考来源，并由其他政策进行评估。
+ `["query", "guard_content"]`— 内容有两个作用：用作上下文基础查询，并由其他策略进行评估。

如果您希望您的接地来源或查询内容也由其他护栏政策进行评估，请在上下文基础限定符旁边`guard_content`添加到限定词列表中。

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

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

```
[
    {
        "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."
        }
    }
]
```

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

### 限定词如何影响政策评估
<a name="guardrails-applyguardrail-qualifier-behavior"></a>

带有`grounding_source`或`query`限定符的内容块只能通过上下文基础检查进行评估。这些区块不包括在所有其他护栏策略评估中（字词过滤器、主题过滤器、内容过滤器、敏感信息检测和即时攻击检测）。

要让内容块同时通过上下文基础检查和其他护栏策略进行评估，请同时使用这两个限定词。例如，指定`["grounding_source", "guard_content"]`将内容块标记为同样受所有其他配置策略约束的接地源。

对于评估内容的基于情境以外的政策，必须至少有一个内容区块不合格或明确限定。`guard_content`如果内容块没有`qualifiers`字段，则该内容块是不合格的。

下表汇总了每个限定词组合如何影响策略评估。


| Qualifier | 上下文接地检查 | 其他护栏政策 | 
| --- | --- | --- | 
| `grounding_source` | 已评估（作为参考） | 未评估 | 
| `query` | 已评估（作为查询） | 未评估 | 
| `guard_content` | 已评估（作为回应） | 已评估 | 
| 没有预选赛（不合格） | 已评估（作为回应） | 已评估 | 
| `["grounding_source", "guard_content"]` | 已评估（作为参考） | 已评估 | 
| `["query", "guard_content"]` | 已评估（作为查询） | 已评估 | 