컨텍스트 근거 검사를 사용하여 응답에서 할루시네이션 필터링 - 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개의 구성 요소로 근거 소스, 쿼리, 보호할 콘텐츠(또는 모델 응답)이 필요합니다. 이는 Invoke API, Converse API 또는 ApplyGuardrail을 직접 사용하는지 여부에 따라 다르게 구성됩니다.

  • 근거 소스 - 사용자 쿼리에 답변하는 데 필요한 컨텍스트 정보입니다. 예: “런던은 영국의 수도입니다. 도쿄는 일본의 수도입니다.”

  • 쿼리 - 사용자가 물어볼 수 있는 질문입니다. 예: “일본의 수도는 어디인가요?”

  • 보호할 콘텐츠 - 근거 소스 및 쿼리를 기준으로 보호해야 하는 텍스트입니다. Invoke API 및 Converse API에서 이는 모델 응답입니다. 예: “일본의 수도는 도쿄입니다.”

근거가 없는 예제

  • 근거 소스 - “런던은 영국의 수도입니다. 도쿄는 일본의 수도입니다.”

  • 쿼리 - “일본의 수도는 어디인가요?”

  • 보호할 콘텐츠 - “일본의 수도는 런던입니다.”

이 예제에서는 보호할 콘텐츠가 쿼리와 관련이 있지만 근거 소스를 올바르게 사용하고 있지 않으므로 근거가 부족합니다. 이 경우 근거 점수가 낮습니다.

관련성이 없는 예제

  • 근거 소스 - “런던은 영국의 수도입니다. 도쿄는 일본의 수도입니다.”

  • 쿼리 - “일본의 수도는 어디인가요?”

  • 보호할 콘텐츠 - “영국의 수도는 런던입니다.”

이 예제에서는 보호할 콘텐츠가 근거는 있지만 관련성이 없습니다. 근거 소스의 정보를 사용하지만 쿼리에 대한 답변이 되지 못합니다. 이 경우 관련성 점수가 낮습니다.

근거와 관련성이 없는 예제

  • 근거 소스 - “런던은 영국의 수도입니다. 도쿄는 일본의 수도입니다.”

  • 쿼리 - “일본의 수도는 어디인가요?”

  • 보호할 콘텐츠 - “밖에 비가 옵니다.”

이 예제에서는 보호할 콘텐츠가 근거와 관련성이 없습니다. 근거 소스의 정보를 사용하지도 않았고 쿼리에 대한 답변도 되지 못합니다. 이 경우 근거 및 관련성 점수가 낮습니다.

추가 예제

수수료 및 요금과 관련된 질문에 답변하도록 설계된 뱅킹 애플리케이션을 생각해 보겠습니다.

소스:

  • 당좌 예금 계좌 개설에 부과되는 수수료는 없습니다.

  • 당좌 예금 계좌 유지에 대한 월 요금은 10달러입니다.

  • 해외 송금에는 1%의 거래 수수료가 부과됩니다.

  • 국내 송금에는 수수료가 부과되지 않습니다.

  • 신용카드 청구서 연체 수수료는 23.99%입니다.

위의 소스를 바탕으로, 사용자의 쿼리에 따라 4개의 시나리오가 있을 수 있습니다.

근거 및 관련성 있음

  • Q: 당좌 예금 계좌에는 어떤 수수료가 부과되나요?

  • A: 당좌 예금 계좌 유지에 대한 월 요금은 10달러입니다. 국내 송금에는 수수료가 부과되지 않습니다. 하지만 해외 송금에는 1%의 거래 수수료가 부과됩니다. 당좌 예금 계좌 개설에 부과되는 수수료는 없습니다.

근거는 없지만 관련성 있음

  • Q: 신용카드와 관련된 거래 수수료는 얼마인가요?

  • A: 신용카드와 관련된 거래 수수료는 23.99%입니다.

근거는 있지만 관련성 없음

  • Q: 당좌 예금 계좌를 사용하는 경우 어떤 수수료가 부과되나요?

  • A: 제공된 정보를 기준으로 신용카드의 연체료는 23.99%입니다.

근거 및 관련성 없음

  • Q: 당좌 예금 계좌를 사용하는 경우 어떤 수수료가 부과되나요?

  • A: 중개 계좌 수수료는 거래당 0.5달러입니다.

Invoke API를 사용하여 컨텍스트 근거 검사 직접 호출

입력 내에서 근거 소스와 쿼리를 표시할 수 있도록, 입력 태그와 동일한 방식으로 작동하는 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 API를 사용하여 컨텍스트 근거 검사 직접 호출

Converse API에 대한 근거 소스 및 쿼리를 표시하려면 각 가드 콘텐츠 블록에서 한정자 필드를 사용합니다. 예:

[ { "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 API에서 검사를 사용하는 것과 유사합니다. ApplyGuardrail에 대한 근거 소스 및 쿼리를 표시하려면 각 콘텐츠 블록에서 한정자 필드를 사용합니다. 그러나 모델이 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." } } ]

모델 응답은 컨텍스트 근거 검사를 수행하는 데 필요하므로 검사는 프롬프트가 아닌 출력에서만 수행됩니다.

어떤 콘텐츠 블록도 guard_content 한정자로 표시되지 않은 경우 컨텍스트 근거 검사 정책은 근거 소스, 쿼리 및 응답만 조사합니다. 나머지 정책은 기본 조사 동작을 따릅니다. 시스템 프롬프트는 기본적으로 조사되지 않고, 메시지는 기본적으로 조사됩니다. 그러나 콘텐츠 블록에 guard_content 한정자가 표시된 경우 컨텍스트 근거 검사 정책은 근거 소스, 쿼리 및 응답만 조사하는 반면 나머지 정책은 guardContent 태그로 표시된 콘텐츠를 조사합니다.

컨텍스트 근거 검사에 대한 자세한 내용은 컨텍스트 근거 검사 사용을 참조하세요.