ContextRelevanceEvaluator

ContextRelevanceEvaluator

ContextRelevanceEvaluator는 LLM을 사용해 컨텍스트가 질문과 관련이 있는지 평가해요. ground truth 레이블이 필요하지 않습니다.

출처: 문서

본문

항목 내용
파이프라인에서의 일반적인 위치 단독으로 또는 평가 파이프라인에서 사용. Evaluator의 입력을 생성한 별도 파이프라인 뒤에 배치
필수 run 변수 questions — 질문 리스트 / contexts — 컨텍스트(문서 내용)의 리스트의 리스트. 질문별 컨텍스트 리스트 하나를 뜻해요.
출력 변수 딕셔너리: score — 모든 입력 질문에 대한 평균 컨텍스트 관련성 점수(0.0~1.0) / individual_scores — 각 입력 쌍(질문과 컨텍스트 리스트)에 대한 개별 컨텍스트 관련성 점수(각각 0 또는 1) 리스트 / results — relevant_statements, score, status 키를 가진 딕셔너리 리스트. LLM이 각 컨텍스트에서 관련 있다고 찾은 문장, 그 컨텍스트의 이진 점수, 그리고 유효한 결과의 evaluated 또는 실패한 평가의 error를 담아요.
API reference Evaluators
GitHub link https://github.com/deepset-ai/haystack/blob/main/haystack/components/evaluators/context_relevance.py
Package name haystack-ai

Overview

ContextRelevanceEvaluator 컴포넌트로 ground truth 레이블 없이 Haystack 파이프라인(예: RAG 파이프라인)이 검색한 문서를 평가할 수 있어요. 컴포넌트는 컨텍스트를 여러 문장으로 나누고, 각 문장이 질문에 답하는 데 관련이 있는지 확인합니다. 각 컨텍스트의 점수는 이진법이에요. LLM이 그 안에서 관련 문장을 하나라도 찾으면 1, 그렇지 않으면 0입니다. 전체 score는 모든 입력 질문에 대한 이진 점수의 평균이므로 0.0~1.0 숫자입니다.

Parameters

이 Evaluator의 기본 모델은 gpt-5-mini예요. 초기화 시 chat_generator 파라미터로 모델을 재정의할 수 있습니다. 이는 JSON 객체를 반환하도록 구성된 Chat Generator 인스턴스여야 해요. 예를 들어 OpenAIChatGenerator를 사용할 때는 generation_kwargs에 {"response_format": {"type": "json_object"}}를 전달해야 합니다.

OpenAI가 아닌 자체 Chat Generator로 Evaluator를 초기화하지 않는다면, 유효한 OpenAI API 키를 OPENAI_API_KEY 환경 변수로 설정해야 해요. 자세한 내용은 시크릿 관리 문서 페이지를 참고하세요.

두 가지 선택적 초기화 파라미터:

  • raise_on_failure — True면 실패한 API 호출 시 예외를 발생시킵니다.
  • progress_bar — 평가 중 진행 바를 표시할지 여부.

ContextRelevanceEvaluator에는 examples라는 선택적 파라미터가 있어서, ContextRelevanceEvaluator의 예상 입력·출력 형식에 맞는 few-shot 예시를 전달할 수 있어요. 이 예시들은 LLM으로 보내는 프롬프트에 포함됩니다. 따라서 예시는 프롬프트의 토큰 수를 늘려 각 요청을 더 비싸게 만들어요. 평가 품질을 토큰 비용과 교환해 개선하고 싶다면 예시 추가가 도움이 됩니다.

각 예시는 inputs와 outputs 키를 가진 딕셔너리여야 합니다. inputs는 questions와 contexts 키를 가진 딕셔너리여야 합니다. outputs는 relevant_statements를 가진 딕셔너리여야 합니다. 기대 형식은 다음과 같습니다:

[
    {
        "inputs": {
            "questions": "What is the capital of Italy?",
            "contexts": ["Rome is the capital of Italy."],
        },
        "outputs": {
            "relevant_statements": ["Rome is the capital of Italy."],
        },
    },
]

Usage

On its own

아래는 제공된 질문과 컨텍스트를 바탕으로 생성된 응답을 평가하기 위해 ContextRelevanceEvaluator 컴포넌트를 사용하는 예시예요. ContextRelevanceEvaluator는 컨텍스트에서 질문과 관련된 문장을 찾으므로 점수 1을 반환합니다.

from haystack.components.evaluators import ContextRelevanceEvaluator

questions = ["Who created the Python language?"]
contexts = [
    [
        "Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming language. Its design philosophy emphasizes code readability, and its language constructs aim to help programmers write clear, logical code for both small and large-scale software projects.",
    ],
]

evaluator = ContextRelevanceEvaluator()
result = evaluator.run(questions=questions, contexts=contexts)
print(result["score"])
# 1
print(result["individual_scores"])
# [1]
print(result["results"])
# [{'relevant_statements': ['Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming language.'], 'status': 'evaluated', 'score': 1}]

In a pipeline

아래는 제공된 질문을 바탕으로 RAG 파이프라인이 받은 응답과 컨텍스트(문서 내용)를 평가하기 위해 FaithfulnessEvaluator와 ContextRelevanceEvaluator를 파이프라인에서 사용하는 예시예요. 개별 컴포넌트 대신 파이프라인을 실행하면 둘 이상의 지표를 계산하기가 더 간단해집니다.

from haystack import Pipeline
from haystack.components.evaluators import (
    ContextRelevanceEvaluator,
    FaithfulnessEvaluator,
)

pipeline = Pipeline()
context_relevance_evaluator = ContextRelevanceEvaluator()
faithfulness_evaluator = FaithfulnessEvaluator()
pipeline.add_component("context_relevance_evaluator", context_relevance_evaluator)
pipeline.add_component("faithfulness_evaluator", faithfulness_evaluator)

questions = ["Who created the Python language?"]
contexts = [
    [
        "Python, created by Guido van Rossum in the late 1980s, is a high-level general-purpose programming language. Its design philosophy emphasizes code readability, and its language constructs aim to help programmers write clear, logical code for both small and large-scale software projects.",
    ],
]
predicted_answers = [
    "Python is a high-level general-purpose programming language that was created by George Lucas.",
]

result = pipeline.run(
    {
        "context_relevance_evaluator": {"questions": questions, "contexts": contexts},
        "faithfulness_evaluator": {
            "questions": questions,
            "contexts": contexts,
            "predicted_answers": predicted_answers,
        },
    },
)

for evaluator in result:
    print(result[evaluator]["individual_scores"])
# [1]
# [0.5]
for evaluator in result:
    print(result[evaluator]["score"])
# 1
# 0.5

더 알아보기 (Learn more)