使用上下文接地检查来筛选响应中的幻觉 - Amazon Bedrock

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

使用上下文接地检查来筛选响应中的幻觉

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

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

上下文接地检查可评估两种范式的幻觉:

  • 接地 – 根据源检查模型响应是否与事实相符且基于源。响应中引入的任何新信息都将被视为无依据的信息。

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

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

注意

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

注意

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

置信度分数和阈值

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

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

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

  • 查询 – 用户可能会问的问题。例如,“日本的首都是哪里?”。

  • 要防护的内容 – 相对于接地源和查询应加以防护的文本。用于调用和 Converse APIs,这是模型响应。例如,这可以是“日本的首都是东京”。

无依据内容示例

  • 接地源 –“伦敦是英国的首都。东京是日本的首都。”

  • 查询 –“日本的首都是哪里?”

  • 要防护的内容 –“日本的首都是伦敦。”

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

不相关内容示例

  • 接地源 –“伦敦是英国的首都。东京是日本的首都。”

  • 查询 –“日本的首都是哪里?”

  • 要防护的内容 –“英国的首都是伦敦。”

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

无依据且不相关内容示例

  • 接地源 –“伦敦是英国的首都。东京是日本的首都。”

  • 查询 –“日本的首都是哪里?”

  • 要防护的内容 –“外面正在下雨。”

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

更多示例

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

源:

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

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

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

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

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

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

有依据且相关

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

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

无依据但相关

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

  • 答:与信用卡相关的交易费是 23.99%?

有依据但不相关

  • 问:使用银行支票账户需要支付多少费用?

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

无依据且不相关

  • 问:使用银行支票账户需要支付多少费用?

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

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

为了在输入中标记接地源和查询,我们提供了 2 个与运行方式与输入标签相同的标签。这些标签是 amazon-bedrock-guardrails-groundingSource_xyzamazon-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

标记接地源并查询 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_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

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