본문으로 건너뛰기

요약 득점자

그만큼createSummarizationScorer()함수는 두 축, 즉 모든 주장이 소스 텍스트에 의해 뒷받침되는지 여부와 소스가 명시한 정보를 보존하는지 여부에 대한 요약을 평가하는 채점자를 생성합니다. 최종 점수는 둘 중 낮은 것이기 때문에 요약은 충실하지만 공허하거나, 철저하지만 틀리다고 해서 통과할 수 없습니다.

요약은 텍스트를 포함하는 Agent의 마지막 메시지이며, 원본 텍스트는 기본적으로 실행 입력의 첫 번째 사용자 메시지로 설정됩니다. 요약할 텍스트가 Tool 결과 등 다른 위치에 있다면 source 또는 sourceExtractor를 전달하세요.

사용예
사용예에 대한 직접 링크

요약된 문서에 대해 요약 점수를 매깁니다.

src/mastra/scorers/summarization.ts
import { createSummarizationScorer } from '@mastra/evals/scorers/prebuilt'

const scorer = createSummarizationScorer({
model: 'openai/gpt-5.6-sol',
})

const result = await scorer.run({
input: {
inputMessages: [{ id: '1', role: 'user', content: sourceDocument }],
},
output: [{ id: '2', role: 'assistant', content: summary }],
})

console.log(result.score)
console.log(result.reason)

요약 평가
요약 평가에 대한 직접 링크

Agent가 텍스트를 압축할 때 이 채점기를 사용하세요.

  • 문서 및 성적표 요약
  • 스레드 및 이메일 요약 지원
  • 긴 입력을 짧은 출력으로 압축하는 모든 단계

매개변수
매개변수에 대한 직접 링크

model:

MastraModelConfig
주장 및 포함 범위 질문을 판정하는 데 사용할 언어 Model

options?:

SummarizationMetricOptions
채점기 구성 옵션
SummarizationMetricOptions

source?:

string
요약을 판정할 기준이 되는 텍스트입니다. 기본값은 실행 입력의 사용자 메시지입니다.

sourceExtractor?:

(input, output) => string
실행 입력과 출력에서 원본 텍스트를 추출하는 함수입니다. source보다 우선합니다.

maxQuestions?:

number
원본에서 생성하는 포함 범위 질문 수의 상한(기본값: 10)

scale?:

number
최종 점수에 곱할 배율 계수(기본값: 1)

.run()보고
run-returns에 대한 직접 링크

score:

number
0과 scale 사이의 요약 점수(기본값 0~1)이며, 정렬 점수와 포함 범위 점수 중 더 낮은 값입니다.

reason:

string
점수를 결정한 축과 그 근거가 된 주장 또는 질문을 명시하는 사람이 읽을 수 있는 설명입니다. 두 축의 점수가 모두 텍스트에 표시됩니다.

preprocessStepResult:

object
정렬 평결과 원본에서 생성된 질문
object

alignment:

{ claim: string; supported: boolean; reason: string }[]
요약에 포함된 주장별 평결

questions:

string[]
원본 텍스트에서 생성된 포함 범위 질문

analyzeStepResult:

object
포함 범위 평결
object

coverage:

{ question: string; answered: boolean; reason: string }[]
요약만을 기준으로 답변 여부를 판정한 질문별 평결

축 점수는 저장되지 않으며 이러한 평결에서 파생됩니다. 정렬 점수는 supported: truealignment 항목의 비율이고, 포함 범위 점수는 해당 coverage 항목이 answered: truequestions의 비율입니다.

채점 세부정보
채점 세부정보에 대한 직접 링크

2축 평가
2축 평가에 대한 직접 링크

채점자는 3단계 파이프라인을 실행합니다.

  1. 소스 판단: 요약의 주장을 추출하여 소스와 비교하여 확인하고, 소스에서 폐쇄형 질문을 가져옵니다. 모든 질문은 소스가 "예"라고 대답하도록 작성되었습니다.
  2. 적용 범위: 각 질문은 요약만을 사용하여 답변됩니다.
  3. 채점: 두 비율을 계산하여 낮은 쪽이 점수가 됩니다.

적용 범위 단계는 소스 텍스트를 수신하지 않는 별도의 Model 호출로 실행됩니다. 출처를 볼 수 있는 판사는 요약이 아닌 출처에서 질문에 답할 것이며, 이는 이 축이 측정하기 위해 존재하는 누락을 숨길 것입니다.

채점 공식
채점 공식에 대한 직접 링크

Alignment = supported_claims / total_claims
Coverage = answered_questions / total_questions
Summarization = min(Alignment, Coverage) × scale

요약에서 주장이 나오지 않거나 소스에서 질문이 나오지 않으면 점수는 0입니다.

점수 해석
점수 해석에 대한 직접 링크

이 범위는 기본 scale 값인 1을 가정합니다. 사용자 지정 배율을 사용하는 경우 그에 맞게 곱하세요.

  • 0.9-1.0: 훌륭한 요약, 출처에 충실하고 주요 내용을 다루고 있음
  • 0.7-0.8: 약간의 누락이 있거나 지원되지 않는 세부 사항이 있는 좋은 요약
  • 0.4-0.6: 중요한 정보가 누락되었거나 출처에서 벗어나는 정도의 요약
  • 0.1-0.3: 요약이 좋지 않음, 대부분의 출처가 손실되었거나 모순됨
  • 0.0: 요약에는 판단할 만한 내용이 없거나 어떤 주장도 뒷받침하지 못했습니다. 질문에 대답하지 않은 요약도 이 점수를 받습니다.

두 축 읽기
두 축 읽기에 대한 직접 링크

두 축 모두 실행 결과에 대한 판정을 남깁니다. 즉, 전처리 단계의 정렬 판정과 분석 단계의 적용 범위 판정입니다. 각 평결에는 그것이 속한 주장이나 질문과 그 이유가 담겨 있습니다. 낮은 정렬 점수는 낮은 적용 범위 점수와 다른 의미를 갖습니다.

  • 높은 적용 범위와 낮은 정렬 점수는 요약이 세부 사항을 만들어내거나 왜곡한다는 것을 의미합니다.
  • 높은 정렬과 낮은 적용 범위 점수는 요약이 정확하지만 너무 많은 부분이 누락되었음을 의미합니다.

이유 필드는 점수를 생성한 축의 이름을 지정합니다.

점수에서 제외되는 것
점수에서 제외되는 것에 대한 직접 링크

길이는 점수에 영향을 미치지 않습니다. 소스 단어를 단어별로 반복하는 요약은 모든 주장을 뒷받침하고 모든 질문에 답하므로 점수는 1입니다. 압축이 테스트 대상의 일부인 경우 길이 확인을 추가하세요.

비용
비용에 대한 직접 링크

각 평가에서는 세 번의 Model 호출이 이루어집니다. maxQuestions는 포함 범위 평가 작업의 절반에 상한을 설정하며, 이 값이 없으면 작업량이 원본 길이에 따라 증가합니다. 질문 열 개로 내용을 표현할 수 없는 긴 문서에서는 이 값을 늘리세요.

득점자 구성
득점자 구성에 대한 직접 링크

실행 입력 요약
실행 입력 요약에 대한 직접 링크

const scorer = createSummarizationScorer({
model: 'openai/gpt-5.6-sol',
})

다른 곳의 문서 요약
다른 곳의 문서 요약에 대한 직접 링크

import { extractToolResults } from '@mastra/evals/scorers/utils'

const scorer = createSummarizationScorer({
model: 'openai/gpt-5.6-sol',
options: {
sourceExtractor: (input, output) => {
return extractToolResults(output)
.filter(({ toolName }) => toolName === 'fetchDocument')
.map(({ result }) => String(result))
.join('\n\n')
},
maxQuestions: 20,
},
})

예에 대한 직접 링크

문서 세트에 대해 요약 Agent를 평가합니다.

src/example-summarization.ts
import { runEvals } from '@mastra/core/evals'
import { createSummarizationScorer } from '@mastra/evals/scorers/prebuilt'
import { summarizerAgent } from './agent'

const scorer = createSummarizationScorer({
model: 'openai/gpt-5.6-sol',
options: { maxQuestions: 10 },
})

const result = await runEvals({
target: summarizerAgent,
scorers: [scorer],
data: [
{
input:
'The company was founded in 1995 by John Smith. It started with 10 employees and grew to 500 by 2020. The company is based in Seattle.',
},
],
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
reason: scorerResults[scorer.id].reason,
})
},
})

console.log(result.scores)

runEvals에 대한 자세한 내용은 runEvals 레퍼런스를 참조하세요. 이 득점자를 Agent에 추가하려면 다음을 참조하세요.Scorers overview guide.

신실함과의 비교
신실함과의 비교에 대한 직접 링크

사용 사례요약충실성
측정 항목근거와 포함 범위를 함께 측정근거만 측정
판정 기준요약되는 원본 텍스트검색된 컨텍스트 또는 Tool 결과
누락 감지아니요
전체 원본 필요 여부아니요, 컨텍스트만으로 충분함
답변이 검색된 컨텍스트에 충실한지를 확인하려면 faithfulness를 사용하세요. 출력이 더 긴 텍스트를 대신하도록 작성된 경우에는 summarization을 사용하세요.