使用情境接地检查来过滤反应中的幻觉 - Amazon Bedrock

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

使用情境接地检查来过滤反应中的幻觉

当提供参考源和用户查询时,Amazon Bedrock Guardrails 支持上下文接地检查,以检测和过滤模型响应中的幻觉。支持的用例跨越检索增强生成 (RAG)、摘要、释义或对话代理,这些代理依赖参考来源(例如检索到的通行证或对话历史记录)来为对话奠RAG定基础。

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

情境基础检查可评估两种范式的幻觉:

  • 接地-根据信号源检查模型响应是否在事实上是准确的,是否以源为基础。答复中引入的任何新信息都将被视为没有根据的。

  • 相关性-用于检查模型响应是否与用户查询相关。

举一个例子,参考来源包含 “伦敦是英国的首都”。东京是日本的首都”,用户查询是 “日本的首都是什么?”。诸如 “日本首都为伦敦” 之类的回应将被视为没有根据和事实不正确,而诸如 “英国的首都为伦敦” 之类的回应将被视为无关紧要,即使它是正确的,也是以消息来源为依据的。

注意

当请求包含多个grounding_source标签时,护栏会将所有提供的grounding_source值组合在一起并进行评估,而不是分别考虑每个值。grounding_source对于query标签,这种行为是相同的。

注意

上下文基础策略目前支持最多 100,000 个字符作为接地源,1,000 个字符用于查询,5,000 个字符用于响应。

置信度分数和阈值

情境接地检查根据提供的来源和用户查询为每个模型响应生成与基础和相关性相对应的置信度分数。您可以配置阈值以根据生成的分数筛选模型响应。过滤阈值决定了模型响应的最低允许置信度分数,该分数在生成式 AI 应用程序中被视为扎根且相关。例如,如果您的接地阈值和相关性阈值均设置为 0.7,则所有接地分数或相关性分数低于 0.7 的模型响应都将被检测为幻觉并在您的应用程序中被阻止。随着过滤阈值的增加,屏蔽没有根据和不相关的内容的可能性就会增加,而在应用程序中看到幻觉内容的可能性也会降低。您可以在 0 到 0.99 之间配置接地和相关性的阈值。阈值为 1 是无效的,因为这将屏蔽所有内容。

上下文接地检查需要 3 个组件来执行检查:接地源、查询和要保护的内容(或模型响应)。根据您使用的是调用APIs、Converse APIs 还是 ApplyGuardrail 直接使用,它们的配置会有所不同。

  • 基础来源 — 回答任何用户查询所需的上下文信息。例如,“伦敦是英国的首都。东京是日本的首都”。

  • 查询-用户可能会问的问题。例如,“日本的首都是什么?”。

  • 要保护的内容 — 相对于基础来源和查询应加以保护的文本。对于 Invoke 和 ConverseAPIs,这是模型响应。例如,这可以是 “日本的首都为东京”。

没有根据的例子

  • 基础来源—— “伦敦是英国的首都。东京是日本的首都。”

  • 查询-“日本的首都是什么?”

  • 满足于警惕—— “日本的首都是伦敦。”

在此示例中,要保护的内容与查询相关,但由于未正确使用接地源,因此没有根据。这会有较低的接地分数。

无关的例子

  • 基础来源—— “伦敦是英国的首都。东京是日本的首都。”

  • 查询-“日本的首都是什么?”

  • 满足于警惕—— “英国的首都是伦敦。”

在此示例中,要保护的内容是有根据的,但不相关。它使用来自接地源的信息,但不回答查询。这将具有较低的相关性分数。

没有根据且无关紧要的例子

  • 基础来源—— “伦敦是英国的首都。东京是日本的首都。”

  • 查询-“日本的首都是什么?”

  • 满足于警惕-“外面正在下雨。”

在此示例中,要保护的内容没有根据且不相关。它既不使用来自接地来源的信息,也不回答查询。这将具有较低的基础和相关性分数。

更多示例

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

来源:

  • 开设支票账户不收取任何费用。

  • 维持支票账户的月费为10美元。

  • 国际转账需支付 1% 的交易费。

  • 国内转账不收取任何费用。

  • 逾期支付信用卡账单的相关费用为23.99%。

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

扎根且相关

  • 问:与支票账户相关的费用是多少?

  • 答:维持支票账户的月费为10美元。国内转账不收取任何费用。但是,国际转账需支付1%的交易费。开设支票账户不收取任何费用。

没有根据但相关

  • 问:与信用卡相关的交易费用是多少。

  • 答:与信用卡相关的交易费用为23.99%。

扎根但无关紧要

  • 问:使用银行支票账户的费用是多少?

  • 答:根据提供的信息,信用卡的滞纳金为23.99%。

没有根据且无关紧要

  • 问:使用银行支票账户的费用是多少?

  • 答:经纪账户的费用为每笔交易0.5美元。

使用 Invoke 调用上下文基础检查 APIs

为了在输入中标记接地源和查询,我们提供了 2 个与输入标签相同的工作方式的标签。amazon-bedrock-guardrails-query_xyz假设标签后缀为 amazon-bedrock-guardrails-groundingSource_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

要标记基础源并查询 ConverseAPIs,请使用每个防护内容块中的限定符字段。例如:

[ { "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_content 限定符,则上下文基础检查策略将仅调查基础来源、查询和响应。其余策略将遵循默认的调查行为:系统提示默认为不接受调查,消息默认为接受调查。但是,如果内容块标有 guard_content 限定符,则上下文基础检查策略将仅调查基础来源、查询和响应,而其余策略将调查标有标签的内容。 guardContent

调用上下文接地检查 ApplyGuardrail API

使用上下文接地检查与在 ApplyGuardrail Converse 上使用它类似。APIs要标记基础源并查询 ApplyGuardrail,请使用每个内容块中的限定符字段。但是,由于不使用调用模型 ApplyGuardrail,因此您还必须提供一个包含要保护的内容的额外内容块。可以选择使用 guard_content 限定此内容块,等同于 Invoke* 或 Converse* 中的模型响应。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_content 限定符,则上下文基础检查策略将仅调查基础来源、查询和响应。其余策略将遵循默认的调查行为:系统提示默认为不接受调查,消息默认为接受调查。但是,如果内容块标有 guard_content 限定符,则上下文基础检查策略将仅调查基础来源、查询和响应,而其余策略将调查标有标签的内容。 guardContent

有关上下文接地检查的更多信息,请参阅使用上下文接地检查。