본문으로 건너뛰기

createScorer

Mastra는 통합된createScorer입력/출력 쌍을 평가하기 위해 사용자 정의 채점자를 정의할 수 있는 팩토리입니다. 각 평가 단계에 기본 JavaScript 함수 또는 LLM 기반 Prompt 개체를 사용할 수 있습니다. 사용자 정의 채점자를 Agent 및 Workflow 단계에 추가할 수 있습니다.

맞춤 채점자를 만드는 방법
맞춤 채점자를 만드는 방법에 대한 직접 링크

createScorer 팩터리를 사용해 이름, 설명, 선택적 심판 구성을 포함하는 채점기를 정의합니다. 그런 다음 단계 메서드를 연결하여 평가 파이프라인을 구축합니다. 최소한 generateScore 단계는 제공해야 합니다. Prompt 객체 단계description + createPrompt로 표현되는 단계 구성입니다(preprocess/analyze의 경우 outputSchema도 포함). 이러한 단계는 심판 LLM을 호출합니다. 함수 단계는 일반 함수이며 심판을 호출하지 않습니다.

import { createScorer } from '@mastra/core/evals'

const scorer = createScorer({
id: 'my-custom-scorer',
name: 'My Custom Scorer', // Optional, defaults to id
description: 'Evaluates responses based on custom criteria',
type: 'agent', // Optional: for agent evaluation with automatic typing
judge: {
model: myModel,
instructions: 'You are an expert evaluator...',
},
})
.preprocess({/* step config */})
.analyze({/* step config */})
.generateScore(({ run, results }) => {
// Return a number
})
.generateReason({/* step config */})

createScorer옵션
createscorer-options에 대한 직접 링크

id:

string
채점기의 고유 식별자입니다. name을 제공하지 않으면 이름으로 사용됩니다.

name?:

string
채점기의 이름입니다. 제공하지 않으면 기본값으로 id를 사용합니다.

description:

string
채점기가 수행하는 작업에 대한 설명입니다.

judge?:

object
LLM 기반 단계를 위한 선택적 심판 구성입니다.
object

model:

LanguageModel
평가에 사용할 LLM Model 인스턴스입니다.

instructions:

string
LLM을 위한 시스템 Prompt/지침입니다.

jsonPromptInjection?:

boolean | 'system' | 'inline' | 'auto'
심판의 구조화된 출력 스키마가 Model에 전달되는 방식을 제어합니다. 기본값은 'auto'이며, 지원되는 경우 네이티브 구조화 출력을 사용하고 그렇지 않으면 인라인 Prompt 삽입을 사용합니다. 명시적 값은 자동 라우팅을 재정의합니다.

inputProcessors?:

Processor[]
내부 심판 Agent의 메시지가 Model에 도달하기 전에 적용되는 입력 프로세서입니다(예: 수정, 검증).

outputProcessors?:

Processor[]
내부 심판 Agent의 출력이 반환되기 전에 적용되는 출력 프로세서입니다(예: 조정, 변환).

errorProcessors?:

Processor[]
Mastra의 현재 생성 API를 사용하는 심판 Model용 오류 프로세서입니다. 이 프로세서는 processAPIError를 구현하며 LLM API 거부를 검사하고 재시도를 지시할 수 있습니다(예: StreamErrorRetryProcessor). 레거시 Model 어댑터는 generateLegacy()를 사용하므로 오류 프로세서를 실행하지 않습니다.

maxProcessorRetries?:

number
오류 프로세서가 한 번의 심판 생성을 재시도할 수 있는 최대 횟수입니다. 이 값을 지정하지 않고 errorProcessors를 구성하면 런타임 기본값은 10입니다. 재시도 예산을 제한하려면 명시적으로 설정하세요.

type?:

string
입력/출력의 타입 지정입니다. 자동 Agent 타입에는 'agent'를 사용합니다. 사용자 정의 타입에는 제네릭 방식을 사용하세요.

prepareRun?:

(run: ScorerRun) => ScorerRun | Promise<ScorerRun>
파이프라인을 실행하기 전에 채점기 실행 데이터를 변환합니다. 메시지를 필터링하거나, 컨텍스트 크기를 제한하거나, 채점기에 필요하지 않은 필드를 제거할 때 사용합니다. `filterRun()` 유틸리티는 선언적 옵션으로 이 함수를 생성합니다. 비동기일 수 있습니다.

이 함수는 단계 메서드를 연결할 수 있는 채점기 빌더를 반환합니다. .run() 메서드와 해당 입력/출력에 대한 자세한 내용은 MastraScorer 참조를 확인하세요. 심판은 Prompt 객체로 정의된 단계(Prompt 모드의 preprocess, analyze, generateScore, generateReason)에서만 실행됩니다. 함수 단계만 사용하면 심판이 호출되지 않으며 검사할 LLM 출력도 없습니다. 이 경우 점수와 이유는 함수에서 생성해야 합니다. Prompt 객체 단계가 실행되면 구조화된 LLM 출력이 해당 결과 필드(preprocessStepResult, analyzeStepResult 또는 generateScorecalculateScore가 사용하는 값)에 저장됩니다.

심사위원 요청 재시도
심사위원 요청 재시도에 대한 직접 링크

심판의 errorProcessors 구성을 사용하여 실패한 심판 요청 내의 일시적 오류를 재시도하세요. 이 구성은 채점기 Workflow, Trace 대상, 배치 항목, 점수 쓰기 또는 완료된 채점기 단계를 재시도하지 않습니다. @mastra/core 1.49.0에는 채점기 오류 프로세서 구성이 포함되어 있지 않습니다. 이 구성을 사용하기 전에 채점기 프로세서를 지원하는 버전으로 업그레이드하거나 해당 변경 사항만 백포트하세요. 다음 예에서는 하나의 제한된 재시도 예산을 사용합니다. 프로세서의 maxRetriesjudge.maxProcessorRetries를 같은 값으로 설정합니다. Model 재시도가 프로세서 시도 횟수를 배가하지 않도록 내부 심판 Agent의 Model 재시도는 기본값 0으로 유지하세요.

src/mastra/scorers/response-quality.ts
import { createScorer } from '@mastra/core/evals'
import { StreamErrorRetryProcessor } from '@mastra/core/processors'

const isTransientNetworkError = (error: unknown) =>
error instanceof Error && /ECONNRESET|ETIMEDOUT|socket hang up/i.test(error.message)

const retryProcessor = new StreamErrorRetryProcessor({
maxRetries: 2,
maxRetryAfterMs: 30_000,
delayMs: ({ retryCount }) => Math.min(1_000 * 2 ** retryCount, 30_000),
matchers: [isTransientNetworkError],
retryUnknownErrors: false,
})

export const responseQuality = createScorer({
id: 'response-quality',
description: 'Scores response quality',
judge: {
model: myModel,
instructions: 'Return a score and concise reason.',
errorProcessors: [retryProcessor],
maxProcessorRetries: 2,
},
})
.generateScore({
description: 'Score the response quality.',
createPrompt: ({ run }) => `Score: ${run.output}`,
})
.generateReason({
description: 'Explain the score.',
createPrompt: () => 'Explain the score.',
})

이 구성을 사용하면 실패한 요청에 최대 3번의 Provider 시도(초기 요청과 프로세서 재시도 2회)가 이루어집니다. generateScore가 완료된 후 generateReason에서 재시도 가능한 오류가 발생하면 generateReason만 재시도됩니다. StreamErrorRetryProcessor는 재시도 가능한 Provider 메타데이터와 범위가 좁은 사용자 정의 매처를 따릅니다. retryUnknownErrors는 기본적으로 비활성화되어 있으므로 인증, 잘못된 요청 및 컨텍스트 길이 오류는 명시적으로 일치시키지 않는 한 즉시 실패합니다. 기본적으로 Retry-After 값을 30_000밀리초로 제한합니다. 이 상한을 변경하려면 maxRetryAfterMs를 사용하세요. 외부 채점자나 Workflow 재시도를 추가하지 마세요. 의도적으로 추가 시도를 허용하지 않는 한 0이 아닌 Model 재시도 설정을 이 프로세서와 결합하지 마십시오.

한 단계에 대한 재시도 재정의
한 단계에 대한 재시도 재정의에 대한 직접 링크

단계의 judge 구성은 채점기 수준의 심판 필드를 재정의합니다. 프로세서 배열은 채점기 수준의 배열을 대체합니다. 채점기 수준의 숫자 상한을 상속하려면 단계 구성에서 maxProcessorRetries를 생략하세요. 조정된 프로세서 재시도에는 Mastra의 현재 생성 API를 사용하는 심판 Model이 필요합니다. 레거시 Model 어댑터는 generateLegacy()를 호출하고 오류 프로세서를 우회하며, 해당 API의 별도 AI SDK maxRetries 기본값인 2를 사용합니다.

유형 안전
유형 안전에 대한 직접 링크

더 나은 유형 추론 및 IntelliSense 지원을 위해 채점자를 만들 때 입력/출력 유형을 지정할 수 있습니다.

Agent 유형 바로가기
Agent 유형 바로가기에 대한 직접 링크

Agent를 평가하려면 type: 'agent'를 사용하여 Agent 입력/출력에 맞는 타입을 자동으로 가져오세요.

import { createScorer } from '@mastra/core/evals'

// Agent scorer with automatic typing
const agentScorer = createScorer({
id: 'agent-response-quality',
description: 'Evaluates agent responses',
type: 'agent', // Automatically provides ScorerRunInputForAgent/ScorerRunOutputForAgent
})
.preprocess(({ run }) => {
// run.input is automatically typed as ScorerRunInputForAgent
const userMessage = run.inputData.inputMessages[0]?.content
return { userMessage }
})
.generateScore(({ run, results }) => {
// run.output is automatically typed as ScorerRunOutputForAgent
const response = run.output[0]?.content
return response.length > 10 ? 1.0 : 0.5
})

제네릭을 사용한 사용자 정의 유형
제네릭을 사용한 사용자 정의 유형에 대한 직접 링크

사용자 정의 입력/출력 유형의 경우 일반적인 접근 방식을 사용하십시오.

import { createScorer } from '@mastra/core/evals'

type CustomInput = { query: string; context: string[] }
type CustomOutput = { answer: string; confidence: number }

const customScorer = createScorer<CustomInput, CustomOutput>({
id: 'custom-scorer',
description: 'Evaluates custom data',
}).generateScore(({ run }) => {
// run.input is typed as CustomInput
// run.output is typed as CustomOutput
return run.output.confidence
})

내장 Agent 유형
내장 Agent 유형에 대한 직접 링크

  • ScorerRunInputForAgent - Agent 평가를 위한 inputMessages, rememberedMessages, systemMessages, taggedSystemMessages 포함
  • ScorerRunOutputForAgent - Agent 응답 메시지 배열 이러한 유형을 사용하면 자동 완성, 컴파일 시간 유효성 검사 및 채점 논리에 대한 더 나은 문서가 제공됩니다.

Agent 유형을 통한 추적 점수 매기기
Agent 유형을 통한 추적 점수 매기기에 대한 직접 링크

type: 'agent'를 사용하면 채점기를 Agent에 직접 추가하거나 Agent 상호 작용의 Trace를 채점하는 데 모두 사용할 수 있습니다. 채점기는 Trace 데이터를 적절한 Agent 입력/출력 형식으로 자동 변환합니다.

const agentTraceScorer = createScorer({
id: 'agent-trace-length',
description: 'Evaluates agent response length',
type: 'agent',
}).generateScore(({ run }) => {
// Trace data is automatically transformed to agent format
const userMessages = run.inputData.inputMessages
const agentResponse = run.output[0]?.content

// Score based on response length
return agentResponse?.length > 50 ? 0 : 1
})

// Register with Mastra for trace scoring
const mastra = new Mastra({
scorers: {
agentTraceScorer,
},
})

단계 메서드 서명
단계 메서드 서명에 대한 직접 링크

전처리
전처리에 대한 직접 링크

분석 전에 데이터를 추출하거나 변환할 수 있는 선택적 전처리 단계입니다.

기능 모드:기능:({ run, results }) => any

run.input:

any
채점기에 제공되는 입력 레코드입니다. 채점기가 Agent에 추가된 경우 사용자 메시지 배열입니다(예: [{ role: 'user', content: 'hello world' }]). 채점기가 Workflow에서 사용되는 경우 Workflow의 입력입니다.

run.output:

any
채점기에 제공되는 출력 레코드입니다. Agent의 경우 일반적으로 Agent의 응답입니다. Workflow의 경우 Workflow의 출력입니다.

run.runId:

string
이 채점 실행의 고유 식별자입니다.

run.requestContext?:

object
평가 중인 Agent 또는 Workflow 단계의 요청 컨텍스트입니다(선택 사항).

results:

object
빈 객체입니다(이전 단계 없음).

반환값: any
이 메서드는 모든 값을 반환할 수 있습니다. 반환된 값은 후속 단계에서 preprocessStepResult로 사용할 수 있습니다. Prompt 개체 모드:

description:

string
이 전처리 단계가 수행하는 작업에 대한 설명입니다.

outputSchema:

StandardJSONSchemaV1
전처리 단계의 예상 출력에 대한 표준 JSON Schema입니다.

createPrompt:

function
함수: ({ run, results }) => string. LLM용 Prompt를 반환합니다.

judge?:

object
(선택 사항) 이 단계의 LLM 심판입니다(주 심판을 재정의할 수 있음). 심판 객체 섹션을 참조하세요.

분석하다
분석하다에 대한 직접 링크

입력/출력 및 전처리된 데이터를 처리하는 선택적 분석 단계입니다.

기능 모드:기능:({ run, results }) => any

run.input:

any
채점기에 제공되는 입력 레코드입니다. 채점기가 Agent에 추가된 경우 사용자 메시지 배열입니다(예: [{ role: 'user', content: 'hello world' }]). 채점기가 Workflow에서 사용되는 경우 Workflow의 입력입니다.

run.output:

any
채점기에 제공되는 출력 레코드입니다. Agent의 경우 일반적으로 Agent의 응답입니다. Workflow의 경우 Workflow의 출력입니다.

run.runId:

string
이 채점 실행의 고유 식별자입니다.

run.requestContext?:

object
평가 중인 Agent 또는 Workflow 단계의 요청 컨텍스트입니다(선택 사항).

results.preprocessStepResult?:

any
정의된 경우 전처리 단계의 결과입니다(선택 사항).

반환값: any
이 메서드는 모든 값을 반환할 수 있습니다. 반환된 값은 후속 단계에서 analyzeStepResult로 사용할 수 있습니다. Prompt 개체 모드:

description:

string
이 분석 단계가 수행하는 작업에 대한 설명입니다.

outputSchema:

StandardJSONSchemaV1
분석 단계의 예상 출력에 대한 표준 JSON Schema입니다.

createPrompt:

function
함수: ({ run, results }) => string. LLM용 Prompt를 반환합니다.

judge?:

object
(선택 사항) 이 단계의 LLM 심판입니다(주 심판을 재정의할 수 있음). 심판 객체 섹션을 참조하세요.

generateScore
generatescore에 대한 직접 링크

필수의최종 수치 점수를 계산하는 단계입니다.

기능 모드:기능:({ run, results }) => number

run.input:

any
채점기에 제공되는 입력 레코드입니다. 채점기가 Agent에 추가된 경우 사용자 메시지 배열입니다(예: [{ role: 'user', content: 'hello world' }]). 채점기가 Workflow에서 사용되는 경우 Workflow의 입력입니다.

run.output:

any
채점기에 제공되는 출력 레코드입니다. Agent의 경우 일반적으로 Agent의 응답입니다. Workflow의 경우 Workflow의 출력입니다.

run.runId:

string
이 채점 실행의 고유 식별자입니다.

run.requestContext?:

object
평가 중인 Agent 또는 Workflow 단계의 요청 컨텍스트입니다(선택 사항).

results.preprocessStepResult?:

any
정의된 경우 전처리 단계의 결과입니다(선택 사항).

results.analyzeStepResult?:

any
정의된 경우 분석 단계의 결과입니다(선택 사항).

반환값: number
이 메서드는 숫자 점수를 반환해야 합니다. Prompt 개체 모드:

description:

string
이 채점 단계가 수행하는 작업에 대한 설명입니다.

outputSchema:

StandardJSONSchemaV1
generateScore 단계의 예상 출력에 대한 표준 JSON Schema입니다.

createPrompt:

function
함수: ({ run, results }) => string. LLM용 Prompt를 반환합니다.

judge?:

object
(선택 사항) 이 단계의 LLM 심판입니다(주 심판을 재정의할 수 있음). 심판 객체 섹션을 참조하세요.

Prompt 객체 모드를 사용하는 경우 LLM 출력을 숫자 점수로 변환하는 calculateScore 함수도 제공해야 합니다.

calculateScore:

function
함수: ({ run, results, analyzeStepResult }) => number. LLM의 구조화된 출력을 숫자 점수로 변환합니다.

generateReason
generatereason에 대한 직접 링크

점수에 대한 설명을 제공하는 선택적 단계입니다.

기능 모드:기능:({ run, results, score }) => string

run.input:

any
채점기에 제공되는 입력 레코드입니다. 채점기가 Agent에 추가된 경우 사용자 메시지 배열입니다(예: [{ role: 'user', content: 'hello world' }]). 채점기가 Workflow에서 사용되는 경우 Workflow의 입력입니다.

run.output:

any
채점기에 제공되는 출력 레코드입니다. Agent의 경우 일반적으로 Agent의 응답입니다. Workflow의 경우 Workflow의 출력입니다.

run.runId:

string
이 채점 실행의 고유 식별자입니다.

run.requestContext?:

object
평가 중인 Agent 또는 Workflow 단계의 요청 컨텍스트입니다(선택 사항).

results.preprocessStepResult?:

any
정의된 경우 전처리 단계의 결과입니다(선택 사항).

results.analyzeStepResult?:

any
정의된 경우 분석 단계의 결과입니다(선택 사항).

score:

number
generateScore 단계에서 계산된 점수입니다.

반환값: string
이 메서드는 점수를 설명하는 문자열을 반환해야 합니다. Prompt 개체 모드:

description:

string
이 근거 생성 단계가 수행하는 작업에 대한 설명입니다.

createPrompt:

function
함수: ({ run, results, score }) => string. LLM용 Prompt를 반환합니다.

judge?:

object
(선택 사항) 이 단계의 LLM 심판입니다(주 심판을 재정의할 수 있음). 심판 객체 섹션을 참조하세요.

모든 단계 기능은 비동기식일 수 있습니다.