> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ko/llms.txt # 요약 득점자 그만큼`createSummarizationScorer()`함수는 두 축, 즉 모든 주장이 소스 텍스트에 의해 뒷받침되는지 여부와 소스가 명시한 정보를 보존하는지 여부에 대한 요약을 평가하는 채점자를 생성합니다. 최종 점수는 둘 중 낮은 것이기 때문에 요약은 충실하지만 공허하거나, 철저하지만 틀리다고 해서 통과할 수 없습니다. 요약은 텍스트를 포함하는 Agent의 마지막 메시지이며, 원본 텍스트는 기본적으로 실행 입력의 첫 번째 사용자 메시지로 설정됩니다. 요약할 텍스트가 Tool 결과 등 다른 위치에 있다면 `source` 또는 `sourceExtractor`를 전달하세요. ## 사용예 요약된 문서에 대해 요약 점수를 매깁니다. ```typescript 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`): 채점기 구성 옵션 **options.source** (`string`): 요약을 판정할 기준이 되는 텍스트입니다. 기본값은 실행 입력의 사용자 메시지입니다. **options.sourceExtractor** (`(input, output) => string`): 실행 입력과 출력에서 원본 텍스트를 추출하는 함수입니다. source보다 우선합니다. **options.maxQuestions** (`number`): 원본에서 생성하는 포함 범위 질문 수의 상한(기본값: 10) **options.scale** (`number`): 최종 점수에 곱할 배율 계수(기본값: 1) ## `.run()`보고 **score** (`number`): 0과 scale 사이의 요약 점수(기본값 0\~1)이며, 정렬 점수와 포함 범위 점수 중 더 낮은 값입니다. **reason** (`string`): 점수를 결정한 축과 그 근거가 된 주장 또는 질문을 명시하는 사람이 읽을 수 있는 설명입니다. 두 축의 점수가 모두 텍스트에 표시됩니다. **preprocessStepResult** (`object`): 정렬 평결과 원본에서 생성된 질문 **preprocessStepResult.alignment** (`{ claim: string; supported: boolean; reason: string }[]`): 요약에 포함된 주장별 평결 **preprocessStepResult.questions** (`string[]`): 원본 텍스트에서 생성된 포함 범위 질문 **analyzeStepResult** (`object`): 포함 범위 평결 **analyzeStepResult.coverage** (`{ question: string; answered: boolean; reason: string }[]`): 요약만을 기준으로 답변 여부를 판정한 질문별 평결 축 점수는 저장되지 않으며 이러한 평결에서 파생됩니다. 정렬 점수는 `supported: true`인 `alignment` 항목의 비율이고, 포함 범위 점수는 해당 `coverage` 항목이 `answered: true`인 `questions`의 비율입니다. ## 채점 세부정보 ### 2축 평가 채점자는 3단계 파이프라인을 실행합니다. 1. **소스 판단**: 요약의 주장을 추출하여 소스와 비교하여 확인하고, 소스에서 폐쇄형 질문을 가져옵니다. 모든 질문은 소스가 "예"라고 대답하도록 작성되었습니다. 2. **적용 범위**: 각 질문은 요약만을 사용하여 답변됩니다. 3. **채점**: 두 비율을 계산하여 낮은 쪽이 점수가 됩니다. 적용 범위 단계는 소스 텍스트를 수신하지 않는 별도의 Model 호출로 실행됩니다. 출처를 볼 수 있는 판사는 요약이 아닌 출처에서 질문에 답할 것이며, 이는 이 축이 측정하기 위해 존재하는 누락을 숨길 것입니다. ### 채점 공식 ```text 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`는 포함 범위 평가 작업의 절반에 상한을 설정하며, 이 값이 없으면 작업량이 원본 길이에 따라 증가합니다. 질문 열 개로 내용을 표현할 수 없는 긴 문서에서는 이 값을 늘리세요. ## 득점자 구성 ### 실행 입력 요약 ```typescript const scorer = createSummarizationScorer({ model: 'openai/gpt-5.6-sol', }) ``` ### 다른 곳의 문서 요약 ```typescript 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를 평가합니다. ```typescript 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 레퍼런스](https://mastra.zisheng.pro/ko/reference/evals/run-evals)를 참조하세요. 이 득점자를 Agent에 추가하려면 다음을 참조하세요.[Scorers overview](https://mastra.zisheng.pro/ko/docs/evals/overview) guide. ## 신실함과의 비교 | 사용 사례 | 요약 | 충실성 | | ---------------------------------------------------------------------------------------------------- | ---------------- | ------------------- | | **측정 항목** | 근거와 포함 범위를 함께 측정 | 근거만 측정 | | **판정 기준** | 요약되는 원본 텍스트 | 검색된 컨텍스트 또는 Tool 결과 | | **누락 감지** | 예 | 아니요 | | **전체 원본 필요 여부** | 예 | 아니요, 컨텍스트만으로 충분함 | | 답변이 검색된 컨텍스트에 충실한지를 확인하려면 `faithfulness`를 사용하세요. 출력이 더 긴 텍스트를 대신하도록 작성된 경우에는 `summarization`을 사용하세요. | | | ## 관련된 - [성실성 득점자](https://mastra.zisheng.pro/ko/reference/evals/faithfulness): 문맥에 따른 답변 근거성을 측정합니다. - [완전성 득점자](https://mastra.zisheng.pro/ko/reference/evals/completeness): Model 없이 요소 커버리지를 비교합니다. - [콘텐츠 유사성 점수 측정기](https://mastra.zisheng.pro/ko/reference/evals/content-similarity): Model 없이 텍스트 유사성을 비교합니다. - [맞춤 채점자](https://mastra.zisheng.pro/ko/docs/evals/custom-scorers): 나만의 평가 지표 만들기