Jev as a judge(판사로서의 Jev)

Jev as a judge(판사로서의 Jev)

Jev as a judge는 TypeSafe의 System One 모델인 Jev를 Langfuse에서 판사로 사용하는 기능입니다. 이 문서는 Jev가 동작하는 방식, 질문 유형(Choice, Score, Yes/No), 설정 단계, 그리고 Jev가 쓰는 점수 형식을 설명해요. LLM-as-a-Judge와 코드 평가자 옆에서 사용할 수 있습니다.

출처: 문서

본문

Jev as a judge는 실험적입니다. 설정은 안정적이지만 UI와 점수 형식의 세부 사항은 여전히 변경될 수 있습니다.

JevTypeSafe 의 System One 모델입니다. 텍스트를 생성하지 않습니다. state(판단할 데이터)와 하나 이상의 typed questions를 보내면 확률이 포함된 typed answers를 반환합니다. Langfuse에서 LLM-as-a-Judge코드 평가자 옆에 Jev를 판사로 사용할 수 있습니다. 질문 하나마다 observation에 점수 하나가 됩니다.

필요한 판정이 좁고 타입이 정해져 있을 때(라벨, 루브릭의 수준, 예/아니오) 그리고 그것을 대량으로 하고 싶을 때 Jev를 판사로 사용하세요. 판정 옆에 서면 추론이 필요하거나 기준이 너무 개방적이어서 나열하기 어려울 때는 LLM-as-a-Judge를 사용하세요.

Langfuse UI에서 Jev 평가자는 decision-model evaluators라고 불립니다. 나중에 다른 의사결정 모델을 추가할 수 있도록 타입이 모델 클래스 이름을 따라 명명됩니다. Jev는 현재 유일하게 지원되는 decision model입니다.

Jev as a judge의 동작 방식

LLM 판사는 프롬프트를 읽고 자유 텍스트로 추론한 뒤 구조화된 판정을 만듭니다. 이는 그 자체로 실패할 수 있는 추가 단계입니다. Jev는 생성(generation) 단계를 완전히 건너뜁니다. 하나의 Jev 평가자는 다음으로 구성됩니다:

  • State: observation에서 조합한 JSON 객체. 예: { "input": ..., "output": ... }. LLM 판사용 변수를 매핑하는 것과 같은 방식으로 observation 필드를 state 키에 매핑해 만듭니다.
  • 하나 이상의 질문: 각 질문은 타입, 백틱 안의 state 키를 참조하는 지침(예: Which team should handle input?), 그리고 허용 답변을 가집니다. 모든 질문은 단일 Jev 호출로 답변됩니다.
  • 질문당 하나의 점수: typed answer는 질문에 설정한 점수 이름으로 Langfuse 점수가 됩니다. 확률과 신뢰도는 점수 메타데이터에 저장되어 검사하고 필터링할 수 있습니다.

모든 질문은 같은 state에 대해 병렬로 평가되므로, 두 번째나 열 번째 질문을 추가해도 지연시간은 거의 변하지 않고 해당 질문의 토큰 비용만 듭니다. 이를 통해 하나의 평가자에서 주제, 불만, 범위 밖 여부 등 여러 기준에 대해 한 observation을 동시에 저렴하게 점수 매길 수 있습니다.

왜 Jev를 판사로 사용하나요?

  • 더 저렴합니다. Jev는 input 토큰에 대해서만 과금됩니다. TypeSafe에 따르면 분류 작업에서 Jev는 frontier 모델보다 40~400배 저렴합니다. 이를 통해 샘플이 아니라 모든 observation에 점수를 매길 수 있습니다.
  • 더 빠릅니다. Jev는 1초 미만에 답변을 반환하며, TypeSafe에 따르면 비교 가능한 LLM보다 20~200배 빠릅니다. 온라인 평가자는 프로덕션 트래픽 속도를 따라가므로 잘못된 출력과 알림 발동 사이의 시간이 짧아집니다.
  • 보정됩니다(Calibrated). 모든 답변에 확률 분포가 있고, Choice와 Score 질문에는 신뢰도 값이 있습니다.
  • 일관됩니다(Consistent). Jev는 텍스트를 샘플링하지 않으므로 같은 state와 질문은 같은 판정을 반환합니다. 회귀 테스트와 시간 경과에 따라 추적되는 기준에 잘 맞습니다.

이 중 어느 것도 LLM 판사를 대체하지 않습니다. 판정 옆에 근거가 필요하거나 개방형 품질을 평가하고 싶다면 LLM-as-a-Judge 를 계속 사용하세요. 많은 팀이 둘 다 사용합니다. 모든 observation에 Jev로 저렴한 타입 검사를 하고, 샘플이나 Jev가 표시한 케이스에 LLM 판사를 사용합니다.

질문 유형

Jev는 세 종류의 질문에 답합니다. 각각 하나의 Langfuse 점수로 매핑됩니다.

질문 유형 Jev가 반환하는 것 Langfuse 점수
Choice 내가 정의한 고정 집합(2~255개)에서 옵션 하나. 옵션별 확률과 신뢰도 포함 선택된 옵션을 값으로 하는 범주형 점수 "Which team should handle this ticket?" → billing, technical, sales
Score 내가 설명한 정렬된 수준(2~10개)에서의 위치. 수준에 대한 확률 분포와 신뢰도 포함 기대 수준을 0부터 levels - 1까지의 숫자 점수로 "How frustrated is the customer?" → 0 calm ... 3 angry
Yes / no 어떤 진술이 참일 확률 (TypeSafe는 이를 Noul 이라 부름) 01 사이의 P(true)를 담은 숫자 점수 "Does the message request a refund?" → 0.93

각 유형에 대한 팁:

  • Choice는 라우팅과 분류에 좋습니다: 주제 감지, 의도, 실패 모드, 호출했어야 할 도구. 각 옵션에 짧은 설명을 주고 otherunclear 같은 탈출구(escape hatch)를 포함하세요. Jev는 기권(abstain)할 수 없으므로, 없으면 덜 틀린 옵션을 고릅니다.
  • Score는 루브릭에 좋습니다: 심각도, 불만, 답변 완성도. 각 수준을 평이한 언어로 설명하고 낮은 것부터 높은 것 순으로 정렬하세요. 점수는 확률 가중 수준이므로 1.7은 "수준 1과 2 사이, 2에 더 가까움"을 뜻합니다.
  • Yes / no는 가드레일과 플래그에 좋습니다: 범위 밖 요청, 출력의 PII, 사용자 불일치, 정책 위반. 선택적으로 무엇이 true이고 무엇이 false인지 설명하세요. 하드 라벨 대신 확률을 받으므로, 내 위험 허용도에 맞는 임계값을 고르거나 act/review/ignore의 세 구간을 사용할 수 있습니다.

TypeSafe 문서는 각 질문이 **원자적(atomic)**이어야 한다고 강조합니다. 질문당 하나의 결정이어야 합니다. "답변이 정확하고 공손한가?"처럼 묻고 있다면 두 질문으로 나누세요. 어차피 둘 다 같은 호출에서 답변됩니다.

단계별 설정

TypeSafe 연결 추가

프로젝트의 Settings → LLM Connections로 이동해 제공자 typesafe로 연결을 추가하세요. TypeSafe console 에서 만들 수 있는 TypeSafe API 키만 있으면 됩니다. Base URL이나 추가 헤더는 필요 없습니다.

TypeSafe 연결은 Jev 평가자에게만 제공됩니다. Jev는 텍스트를 생성할 수 없으므로 playground, 프롬프트 실험, LLM-as-a-Judge 모델 선택기에는 나타나지 않습니다.

Jev 평가자 만들기

Evaluators 페이지 로 이동해 New evaluator를 클릭하세요. 템플릿 갤러리에서 New decision model evaluator를 클릭해 처음부터 시작하거나 Jev 템플릿 중 하나를 고르세요:

  • Assign Input Topic (Choice): 사용자의 주요 목표를 내가 정의한 주제 분류로 분류합니다.
  • Flag Out-of-Scope Request (Yes / no): 어시스턴트의 역할 밖에 속하는 요청을 플래그합니다.
  • Rate Customer Frustration (Score): 사용자의 불만을 네 수준으로 평가합니다.

템플릿은 state와 질문을 미리 채워 줍니다. 내 TypeSafe 연결만 고르면 됩니다.

질문 정의

기준 하나당 질문 하나를 추가하세요. 각 질문에 대해:

  • 타입을 고르세요: Choice, Score, 또는 Yes / no.
  • 질문을 작성하세요. 백틱 안에 state 키를 참조하세요. 예: Does inputask for something outside the scope described inoutput?. 필드 칩을 사용해 키를 삽입하세요. 질문을 문자 그대로 유지하세요. Jev는 지침을 적힌 대로 읽고 의도를 추론하지 않습니다.
  • 허용 답변을 정의하세요: Choice는 설명이 있는 옵션, Score는 정렬된 수준, Yes / no는 선택적 true/false 기준.
  • 점수 이름을 설정하세요. Langfuse가 질문에서 하나를 제안합니다. 각 질문은 이 이름으로 점수를 씁니다.

jev-latest 같은 Jev 모델을 선택하거나, 의존하는 임계값이 새 릴리스에 따라 움직이지 않아야 할 때 jev-1.13.0 같은 특정 버전을 고정할 수 있습니다.

State 구성

Jev가 판단할 state를 정의하세요. Add field를 클릭해 state 키를 추가한 뒤 observation 데이터(input, output, metadata, tool calls)에 매핑하세요. 실험 에서 이 평가자를 사용하려면 Expected OutputExperiment Item Metadata도 매핑하세요.

observation 필드와 정확히 같은 이름의 필드(예: input)는 자동으로 바인딩됩니다. 필드 이름을 바꾸면 질문의 참조가 다시 쓰입니다. Langfuse는 조합된 JSON 객체를 보여주고, TypeSafe의 state 제한(약 32k 토큰)에 가까워지면 경고합니다. state를 간결하게 유지하세요. 질문이 필요로 하지 않는 자료를 state가 포함하면 Jev의 정확도가 떨어지므로, 전체 trace 대신 판단하려는 특정 필드를 매핑하세요.

평가자 테스트

오른쪽에서 대표 샘플 observations로 필터링하고 하나를 선택해 평가자를 실행하세요. 테스트 패널은 확률 분포와 신뢰도가 있는 질문별 행과 호출의 예상 비용을 보여줍니다. Raw output을 사용해 TypeSafe로 전송된 정확한 요청을 볼 수 있습니다. 분포가 내 샘플에서 올바르게 보일 때까지 질문, 옵션, state를 반복하세요.

평가자 저장

저장한 뒤 다음을 할 수 있습니다:

  • 테스트 샘플을 선택하는 데 사용한 필터로 을 만들거나, 기존 룰에 평가자를 연결해 들어오는 observation에 실행합니다.
  • 룰 없이 계속합니다. 여전히 배치 평가프롬프트 실험 에서 평가자를 사용할 수 있습니다.

✨ 완료! 이제 각 질문이 일치하는 observation에 점수를 씁니다. Langfuse의 다른 점수처럼 이 점수들을 필터링, 차트, 알림에 사용하세요.

Jev가 쓰는 점수

각 질문은 평가된 observation에 점수 하나를 씁니다. 점수 값은 항상 답변 자체이며, 확률과 신뢰도는 값을 바꾸지 않고 옆에 저장되어 검사·필터링할 수 있습니다:

필드 내용
name 질문에 설정한 점수 이름
value / dataType Choice: 선택된 옵션을 CATEGORICAL 점수로. Score: 기대 수준을 NUMERIC 점수로. Yes / no: 01 사이의 P(true)NUMERIC 점수로.
comment 짧은 사람이 읽을 수 있는 요약. 예: Choice는 ready (p=0.91); confidence 0.82; runner-up needs_revision (0.09), Score는 1.26 ≈ level 1 "Frustrated but civil"; confidence 0.61, Yes / no는 P(true)=0.97
metadata.typesafe typed answer 세부 사항: questionId, type, 해석된 model(예: jev-1.13.0), Choice/Score 질문의 probabilities, confidence, (Score) 수준을 설명에 매핑하는 legend

Jev는 근거를 반환하지 않으므로 comment는 판정을 설명하는 대신 분포를 요약합니다. 점수가 잘못 보이면 모델 설명보다 state와 내 기준을 읽고, 질문을 다듬거나 옵션을 추가하세요.

Jev 실행 디버깅

모든 평가자 실행은 내부 환경 langfuse-llm-as-a-judgeExecute evaluator: <evaluator name>라는 이름의 실행 trace를 만듭니다. trace는 정확한 요청(state와 질문), 반환된 답변, 토큰 사용량, 비용을 담은 단일 generation을 포함합니다. 실행이 쓴 모든 점수는 이 trace로 연결됩니다.

내부 환경은 기본 tracing 뷰에서 숨겨집니다. environment = langfuse-llm-as-a-judge로 tracing 테이블을 필터링하거나 점수에서 실행 trace를 여세요.

제한(Limits)

제약 한도/지침
평가자당 질문 1~50개, 모두 한 번의 호출로 답변됨
Choice options 고유 값 2~255개
Score levels 정렬된 수준 2~10개
State 크기 TypeSafe는 state와 가장 긴 질문에 약 32k 토큰을 허용. Langfuse가 state 편집기에서 도달하기 전에 경고
근거(Rationale) Jev는 추론을 반환하지 않음. 판정 옆에 설명이 필요하면 LLM 판사 사용
기권(Abstaining) Jev는 항상 답변을 고름. state에 정보가 충분하지 않을 수 있는 Choice 질문에 otherunclear 옵션 추가
데이터 처리 state와 질문이 TypeSafe API로 전송됨. 민감한 데이터를 평가하기 전에 TypeSafe 약관 검토, 필요 시 masking 사용

FAQ

언제 LLM 판사 대신 Jev를 쓰나요?

결정이 좁고 타입이 정해져 있고, 호출 전에 가능한 답변을 알고 있으며, 많은 observation에서 그 결정을 하고 싶을 때(라우팅, 분류, 루브릭 수준, 가드레일 플래그) Jev를 사용하세요. 서면 추론이 필요하거나, 기준이 개방적이거나, 설명이 필요한 인간이 출력을 감사해야 할 때는 LLM 판사를 사용하세요. 둘을 결합하는 것도 좋습니다. 모든 observation에 Jev, 샘플이나 Jev가 표시한 케이스에 LLM 판사를 사용하세요.

왜 내 Yes/no 점수가 boolean이 아니라 숫자인가요?

Jev는 하드 라벨이 아니라 진술이 참일 확률을 반환합니다. Langfuse는 보정을 유지하기 위해 그 확률을 01 사이의 숫자 점수로 저장합니다. 필터링이나 알림 시 내 사용 사례에 맞는 임계값(예: >= 0.7)을 고르세요. boolean이 필요하다면 두 옵션 yesno가 있는 Choice 질문을 사용하면 범주형 점수를 씁니다.

실험과 배치 평가에서 Jev 평가자를 쓸 수 있나요?

네. Jev 평가자는 룰을 통해 들어오는 observation, 배치 평가 를 통해 과거 observation, 실험 에서 실행됩니다. 실험의 경우 질문이 필요할 때 Expected OutputExperiment Item Metadata를 state에 매핑하세요.

TypeSafe API 키는 어디서 받나요?

typesafe.ai 에서 계정을 만들고 TypeSafe console 에서 키를 생성하세요. 현재 접근은 TypeSafe 쪽의 대기자 명단(waitlist)을 거칩니다.

관련 자료(Related resources)

더 알아보기 (Learn more)