컨텍스트 회상 채점자
그만큼createContextRecallScorer()함수는 검색된 컨텍스트가 실측 참조 답변의 주장을 얼마나 잘 다루고 있는지 평가하는 채점자를 생성합니다. 이는 검색된 컨텍스트에 기인한 실제 주장의 비율을 확인하여 검색 완전성을 측정합니다.
이 채점기에는 정답 참조 답변이 필요하므로 CI 또는 테스트 환경의 레이블 지정 데이터 세트에 적합합니다. 실행에 groundTruth가 제공되지 않으면 채점기는 오류를 발생시키는 대신 점수 0을 반환합니다.
RAG 검색 평가RAG 검색 평가에 대한 직접 링크
다음과 같은 경우 RAG 파이프라인에서 검색 완전성을 평가하는 데 적합합니다.
- 검색기가 필요한 모든 정보를 가져오는지 확인해야 합니다.
- 정답이 알려진 데이터 세트에 라벨을 지정했습니다.
- 검색자가 반환하는 것에서 회귀를 포착하고 싶습니다.
데이터세트 기반 테스트데이터세트 기반 테스트에 대한 직접 링크
선별된 테스트 세트에 대해 평가를 실행할 때 사용합니다.
- 정답 레이블이 지정된 질문을 포함하는 CI 파이프라인
- 검색 전략 A/B 테스트
- 적용 범위 평가를 위한 임베딩 Model 벤치마킹
매개변수매개변수에 대한 직접 링크
model:
options:
context 또는 contextExtractor 중 하나를 제공해야 합니다. 둘 다 제공하면 실행 입력과 출력이 Agent 형태(MastraDBMessage[])일 때만 contextExtractor를 사용하며, 그렇지 않으면 채점기가 context를 사용합니다.
.run()보고run-returns에 대한 직접 링크
score:
reason:
채점 세부정보채점 세부정보에 대한 직접 링크
소유권 주장 귀속소유권 주장 귀속에 대한 직접 링크
Context Recall은 2단계 LLM 평가와 결정론적 점수 계산을 사용합니다.
- 청구서 추출: 실측 답변은 원자적 주장으로 분해됩니다.
- 속성 확인: 각 클레임은 지원을 위해 검색 컨텍스트와 비교하여 확인됩니다.
그런 다음 점수는 전체 청구에 대한 귀속 청구의 비율에 규모를 곱하여 계산됩니다.
채점 공식채점 공식에 대한 직접 링크
Context Recall = attributed_claims / total_claims × scale
Where:
- attributed_claims = number of ground-truth claims supported by the context
- total_claims = total number of claims extracted from the ground truth
- Attribution is binary: a claim is either supported (yes) or not (no)
점수 해석점수 해석에 대한 직접 링크
이 범위는 기본 scale 값인 1을 가정합니다. 사용자 지정 scale을 사용할 때는 그에 맞게 곱하세요.
- 0.9-1.0: 뛰어난 기억력, 맥락이 거의 모든 사실 주장을 다루고 있습니다.
- 0.7-0.8: 기억력이 좋다. 대부분의 청구가 처리되지만 약간의 차이가 있습니다.
- 0.4-0.6: 중간 정도의 회상, 맥락에서 상당한 정보가 누락됨
- 0.1-0.3: 기억력이 좋지 않음, 대부분의 근거 진실 주장이 맥락에서 발견되지 않음
- 0.0: 회상 없음, 실제 주장 주장 중 맥락에 맞는 내용 없음
이유분석이유분석에 대한 직접 링크
이유 필드는 다음을 설명합니다.
- 해당 맥락에서 어떤 실측 주장이 발견되었는지
- 누락된 주장과 존재하는 정보 격차
- 귀속된 주장을 지원하는 특정 컨텍스트 부분
최적화 통찰력최적화 통찰력에 대한 직접 링크
결과를 사용하여 다음을 수행합니다.
- 검색 개선: 검색자가 놓친 정보 유형을 식별합니다.
- 청크 크기 조정: 청크에 실측 주장을 다룰 수 있을 만큼 충분한 세부정보가 포함되어 있는지 확인하세요.
- 임베딩 평가: 더 나은 정보 적용 범위를 위해 다양한 임베딩 Model을 테스트합니다.
- 지식 기반 확장: 자주 누락된 청구를 다루는 문서를 추가합니다.
계산 예계산 예에 대한 직접 링크
근거 진실: "아인슈타인은 1879년에 태어났습니다. 그는 상대성 이론을 개발했습니다. 그는 노벨상을 받았습니다."
추출된 주장: 3
- "아인슈타인은 1879년에 태어났다" → 귀속됨(문맥상 생년월일이 언급됨)
- "아인슈타인이 상대성 이론을 개발했다" → 귀속됨(상대성이론을 다루는 문맥)
- "아인슈타인이 노벨상을 받았습니다" → 귀속되지 않음(문맥상 노벨상이 언급되지 않음)
회상 = 2/3 = 0.67
득점자 구성득점자 구성에 대한 직접 링크
동적 컨텍스트 추출동적 컨텍스트 추출에 대한 직접 링크
const scorer = createContextRecallScorer({
model: 'openai/gpt-5.6-sol',
options: {
contextExtractor: (input, output) => {
const query = input?.inputMessages?.[0]?.content || ''
const searchResults = vectorDB.search(query, { limit: 10 })
return searchResults.map(result => result.content)
},
scale: 1,
},
})
정적 컨텍스트 평가정적 컨텍스트 평가에 대한 직접 링크
const scorer = createContextRecallScorer({
model: 'openai/gpt-5.6-sol',
options: {
context: [
'Document 1: Einstein was born on 14 March 1879 in Ulm, Germany.',
'Document 2: Einstein published the theory of special relativity in 1905.',
'Document 3: Einstein moved to the United States in 1933.',
],
},
})
예예에 대한 직접 링크
레이블이 지정된 데이터 세트에 대해 RAG 검색 완전성을 평가합니다.
import { runEvals } from '@mastra/core/evals'
import { createContextRecallScorer } from '@mastra/evals/scorers/prebuilt'
import { myAgent } from './agent'
const scorer = createContextRecallScorer({
model: 'openai/gpt-5.6-sol',
options: {
contextExtractor: (input, output) => {
// Extract context from tool invocation results in the agent output
return output
.filter(msg => msg?.role === 'assistant')
.flatMap(msg => msg?.content?.toolInvocations ?? [])
.filter((tool: any) => tool.state === 'result')
.map((tool: any) => JSON.stringify(tool.result))
},
},
})
const result = await runEvals({
data: [
{
input: 'What are the health benefits of green tea?',
groundTruth:
'Green tea contains antioxidants that reduce inflammation, L-theanine that improves focus, and catechins that boost metabolism.',
},
{
input: 'How does photosynthesis work?',
groundTruth:
'Photosynthesis converts sunlight into chemical energy using chlorophyll in chloroplasts, producing glucose and oxygen from carbon dioxide and water.',
},
],
scorers: [scorer],
target: myAgent,
onItemComplete: ({ scorerResults }) => {
console.log({
score: scorerResults[scorer.id].score,
reason: scorerResults[scorer.id].reason,
})
},
})
console.log(result.scores)
runEvals에 관한 자세한 내용은 runEvals 레퍼런스를 참조하세요.
이 득점자를 Agent에 추가하려면 다음을 참조하세요.Scorers overview guide.
컨텍스트 정밀도와의 비교컨텍스트 정밀도와의 비교에 대한 직접 링크
귀하의 필요에 맞는 채점자를 선택하십시오:
| 사용 사례 | 컨텍스트 재현율 | 컨텍스트 정밀도 |
|---|---|---|
| 측정 대상 | 정답의 적용 범위 | 검색된 청크의 관련성 |
| 방향 | 정답 → 컨텍스트 | 컨텍스트 → 정답 |
| 위치 민감 여부 | 아니요 | 예(앞쪽 배치에 가점 부여) |
| 정답 필요 여부 | 예 | 예 |
| 감지하는 실패 유형 | 누락된 정보 | 관련 없는 노이즈 |
| 검색 품질을 완벽하게 파악하려면 두 가지를 함께 사용하세요. 정밀도는 맥락에서 정크를 포착하고, 재현은 공백을 포착합니다. |
관련된관련된에 대한 직접 링크
- 상황별 정밀 득점자: 검색된 컨텍스트가 관련성이 있고 순위가 높은지 평가합니다.
- 컨텍스트 관련성 점수 측정기: 컨텍스트 사용 및 품질을 평가합니다.
- 성실성 득점자: 문맥에 따른 답변 근거성을 측정합니다.
- 맞춤 채점자: 나만의 평가 지표 만들기