요점. ADK 프리빌트 메트릭은 크게 두 축으로 나뉜다: ① Programmatic(결정론, 저비용) — tool_trajectory_avg_score(exact match), response_match_score(ROUGE-1); ② LLM-as-judge(의미 이해, 비용·비결정) — final_response_match_v2, rubric 계열, hallucinations_v1, safety_v1, 멀티턴 3종. Vertex AI Eval SDK로 위임하는 메트릭(safety/multi-turn 4종)은 GCP 의존·유료 호출이 추가된다. Multi-turn 계열과 per_turn_user_simulator_quality_v1은 User Simulator 기반 멀티턴 eval 파이프라인과 함께 쓰는 특수 메트릭이다.
1
Hybrid (첫 턴 programmatic + LLM)
4
Vertex AI Eval SDK 위임 (GCP 의존)
9
@experimental (API 변경 가능)
1 한눈에 보기 — 11종 요약표
| 분류 |
Metric ID |
채점 방식 |
점수 범위 / 기본 임계 |
설명 |
| Tool |
tool_trajectory_avg_score |
Programmatic |
0~1 / 기본 1.0 |
에이전트가 호출한 도구 이름·인자·순서가 정답(기대 궤적)과 완벽히 일치하는지 1:1로 대조한 뒤 평균. LLM을 쓰지 않아 빠르고 비용이 없지만, 인자의 공백·타입 차이만 있어도 그 구간 0점. 도구를 '올바른 순서로' 불렀는지만 보며, 응답 텍스트 자체의 품질은 평가하지 않음 |
| Response |
response_match_score |
Programmatic |
0~1 / 기본 0.8 |
최종 응답과 정답 사이에 같은 단어가 얼마나 겹치는지(ROUGE-1)를 수치화. LLM 없이 빠르게 채점하지만, 같은 뜻이라도 표현이 다르면 점수가 깎임 → 비슷한 말을 다르게 표현한 경우엔 final_response_match_v2 사용 권장 |
| Response |
final_response_match_v2 |
LLM Judge |
0~1 / 명시 필요 |
AI 심판(gemini-2.5-flash)이 응답과 정답이 의미상 같은지 판정. 단어·형식이 달라도 뜻이 같으면 통과 → response_match_score의 치명적 약점(표현 차이에 취약)을 보완한 버전. 단, 호출마다 5회 판정을 거쳐 비용이 큼 |
| Quality |
rubric_based_final_response_quality_v1 |
LLM Judge @exp |
0~1 / 명시 필요 |
평가자가 직접 작성한 평가 기준(rubric)으로 AI가 항목별 yes/no로 채점한 뒤 평균. "정중한가?", "근거가 충분한가?" 등 원하는 기준을 자유롭게 설계 → 정답 없이도 응답 품질을 다각도로 평가. 도구 호출 결과를 먼저 '신뢰 근거'로 확정한 뒤 응답과 대조하는 2단계 구조 |
| Tool Quality |
rubric_based_tool_use_quality_v1 |
LLM Judge @exp |
0~1 / 명시 필요 |
도구 사용 과정을 평가자가 정한 기준(rubric)으로 AI가 채점. "GeoCoding 다음에 GetWeather를 호출했는가?" 같은 도구 사용 논리를 검증. 정답 궤적(reference) 없이도 평가 → tool_trajectory_avg_score(exact match)보다 훨씬 유연 |
| Hallucination |
hallucinations_v1 |
LLM Judge @exp |
0~1 / 명시 필요 |
응답을 문장 단위로 쪼갠 뒤, 각 문장이 근거 자료(context)에 기반하는지 검사. 근거가 확실한 문장(supported)의 비율이 점수 → 환각(없는 사실 지어내기)이 없으면 1점. 단, 근거 자료의 품질이 결과를 크게 좌우 |
| Safety |
safety_v1 |
LLM Judge Vertex AI |
0~1 / 명시 필요 |
응답에 유해·폭력·혐오 등 부적절 내용이 없는지 Google Cloud 안전 필터로 검사. ADK가 직접 판정하지 않고 GCP에 완전 위임 → 사용하려면 GCP 프로젝트·API 키가 필수 |
| User Simulation |
per_turn_user_simulator_quality_v1 |
Hybrid @exp |
0~1 / 명시 필요 |
멀티턴 테스트에서 가상 사용자(simulator)가 정해진 시나리오를 제대로 따랐는지 턴마다 검증. 이 점수가 낮으면 simulator가 엉뚱하게 행동한 것 → 이 대화로 평가한 다른 메트릭 결과도 신뢰할 수 없음 |
| Multi-turn |
multi_turn_task_success_v1 |
LLM Judge Vertex AI |
0~1 / 명시 필요 |
여러 턴에 걸친 대화 끝에 사용자의 목표(예: 예약 완료)를 성공했는가를 AI가 판정. 결과 중심 평가 — 과정이 비효율적이었어도 목표를 달성하면 통과. 과정의 질은 multi_turn_trajectory_quality_v1으로 별도 측정 |
| Multi-turn |
multi_turn_trajectory_quality_v1 |
LLM Judge Vertex AI |
0~1 / 명시 필요 |
목표 도달 과정이 효율적이고 논리적이었는지 AI가 정성 평가. 불필요한 우회나 같은 질문 반복이 없었는지 등 '대화 경로의 질'을 봄. 정답 경로(reference) 없이도 평가 가능 |
| Multi-turn |
multi_turn_tool_use_quality_v1 |
LLM Judge Vertex AI |
0~1 / 명시 필요 |
멀티턴 대화 전체에서 적절한 도구를 골라 올바르게 사용했는지 AI가 평가. 도구 선택의 적절성·인자 전달의 정확성 등을 종합 판단. 정답(reference) 없이 도구 사용 품질만 측정 — GCP 필요 |
2 Programmatic 메트릭 — 결정론·저비용 (2종)
에이전트가 실행한 tool-call 궤적이 기대 궤적과 얼마나 정확히 일치하는지를 invocation별 exact match로 비교 후 평균 낸다. NL 응답 품질이나 tool 결과(response) 값은 보지 않고 호출(name + args)만 비교한다.
채점 알고리즘
TrajectoryEvaluator.evaluate_invocations()가 actual/expected invocation을 zip 순회. 각 쌍에 _calculate_tool_use_accuracy()를 호출 — 기본 EXACT: tool 이름·인자(dict ==, 정규화 없음) 개수·순서 모두 일치 시 1.0, 하나라도 불일치 시 0.0. IN_ORDER·ANY_ORDER도 설정 가능(ToolTrajectoryCriterion.match_type). overall_score = Σ per-invocation / num_invocations
필요 입력
EvalCase 각 Invocation의 intermediate_data.tool_uses(expected, list[FunctionCall])가 반드시 채워져야 함. reference NL 응답·rubric 불필요.
모듈 / 클래스
google.adk.evaluation.trajectory_evaluator.TrajectoryEvaluator
Criterion: ToolTrajectoryCriterion(match_type 기본 EXACT=0, IN_ORDER=1, ANY_ORDER=2)
Enum: PrebuiltMetrics.TOOL_TRAJECTORY_AVG_SCORE
기본 임계 / 출력
공식 문서 기본값 1.0(완전 일치 요구). score >= threshold면 PASS. 범위 [0.0, 1.0], LLM 호출 없음(결정론·무비용).
⚠ 주의 · 한계
EXACT 취약성: args dict 비교에 정규화 없음(공백·타입·키 순서 차이로도 0.0). 기본 threshold 1.0이라 invocation 하나만 달라도 FAIL.
Silent truncation: invocation 개수가 actual/expected 간 다르면 zip이 짧은 쪽 기준으로 자르고 초과 턴은 평가에서 제외(에러 없음). tool 결과(response)가 아닌 호출(name+args)만 봄 — 도구 출력 품질은 측정 안 됨. tool_uses reference 필수(없으면 평가 불가).
에이전트 최종 응답이 골든 reference와 얼마나 표면적으로 겹치는지를 ROUGE-1 F1(unigram)으로 측정. 의미(semantic)가 아니라 단어 중첩 기반의 lexical overlap. v1 레거시 — 표현이 달라도 의미만 맞으면 통과시키려면 final_response_match_v2 사용.
채점 알고리즘
RougeEvaluator가 rouge_scorer.RougeScorer(["rouge1"], use_stemmer=True)로 actual / expected final_response 텍스트를 invocation별 비교 → rouge1.fmeasure를 per-invocation 점수로 적용. overall_score = 산술평균. (ResponseEvaluator가 ROUGE 경로로 위임)
필요 입력
각 Invocation에 기대 final_response(골든 응답)가 채워져야 함. tool_uses·rubric 불필요.
모듈 / 클래스
google.adk.evaluation.response_evaluator.ResponseEvaluator (래퍼) → final_response_match_v1.RougeEvaluator (실제 채점)
Enum: PrebuiltMetrics.RESPONSE_MATCH_SCORE
기본 임계 / 출력
0.8 (_DEFAULT_EVAL_CONFIG 소스 확인). 범위 [0,1]. LLM 호출 없음(결정론·저비용).
⚠ 주의 · 한계
Lexical overlap이라
paraphrase에 취약(같은 의미도 어휘·어순이 다르면 저평가). use_stemmer=True는 영어 중심 — 한국어 등 비영어에서 신뢰도 낮음. reference 필수. invocation 개수 불일치 시 zip truncation(짧은 쪽 기준). 기본 0.8이라 약간의 paraphrase도 FAIL 가능.
3 LLM-as-judge 메트릭 — ADK 자체 구현 (5종)
이 5종은 ADK 내 LlmAsJudge 기반. judge 모델 기본 gemini-2.5-flash, 샘플 수 기본 5회 다수결. GCP 필요 없으나 gemini API 접근 필요. @experimental 표기로 API 변경 가능.
LLM 심판이 최종 응답이 reference와 의미적으로 맞는지 valid/invalid로 판정. 형식 차이(표 vs 문장, 반올림, 단위 변환 등)는 관대히 허용 — response_match_score(ROUGE)의 semantic 개선판.
채점 알고리즘
FinalResponseMatchV2Evaluator(LlmAsJudge 상속). 프롬프트 = {prompt}(사용자 질의) + {response}(실제 응답) + {golden_response}(reference). judge를 num_samples=5회 호출 → {"reasoning":…, "is_the_agent_response_valid": valid|invalid} 파싱 → VALID=1.0 / INVALID=0.0. invocation당 다수결(positives > negatives면 VALID, 동점=INVALID). overall_score = num_valid / num_evaluated
필요 입력
각 Invocation에 final_response(reference) 필수 — expected_invocation 없으면 ValueError. tool_uses·rubric 불필요.
모듈 / 클래스
google.adk.evaluation.final_response_match_v2.FinalResponseMatchV2Evaluator
Criterion: LlmAsAJudgeCriterion
Enum: PrebuiltMetrics.FINAL_RESPONSE_MATCH_V2
기본 임계 / 출력
기본 임계 없음(criterion.threshold 명시 필요). 범위 [0,1]. 전체 파싱 실패 시 NOT_EVALUATED(score=None).
⚠ 주의 · 한계
invocation마다 judge LLM 5회 호출 → 비용·지연 큼. 동점은 INVALID(보수적). 판정 품질이 gemini-2.5-flash에 의존. 프롬프트가 "API/python function call" 시나리오를 가정 → 순수 대화형·비코드 태스크에서 부적합 가능. criterion.threshold 필수 필드(default 없음) — 미설정 시 PASS/FAIL 판단 불가.
사용자 정의 rubric들로 최종 응답을 LLM judge가 rubric별 yes/no 채점 후 평균. tool 호출로 "신뢰 근거(trusted evidence)" 먼저 확립 → 최종 응답이 그 근거와 일치하는지 rubric 단위로 판정하는 2단계 구조. reference 정답 불필요.
채점 알고리즘
RubricBasedFinalResponseQualityV1Evaluator. 프롬프트 슬롯 6개: {developer_instructions} {tool_declarations} {user_input} {response_steps}(tool 호출/응답) {final_response} {rubrics}. judge 5회 샘플링 → 정규식 "Verdict: yes|no" 추출(yes→1.0, no→0.0, 파싱 실패→None). rubric별 다수결 후 평균 = invocation score. 여러 invocation은 모든 rubric 점수 pool에 statistics.mean = overall_score
필요 입력
RubricsBasedCriterion에 rubrics(list[Rubric]) 및 threshold 필수. reference 응답·expected tool_uses 불필요. intermediate_data(tool 호출·응답), user_content, app_details(도구 선언).
모듈 / 클래스
google.adk.evaluation.rubric_based_final_response_quality_v1.RubricBasedFinalResponseQualityV1Evaluator
Enum: PrebuiltMetrics.RUBRIC_BASED_FINAL_RESPONSE_QUALITY_V1
기본 임계 / 출력
기본 임계 없음. 범위 [0,1] = "충족한 rubric 비율"(None 제외). rubric_id별 세부 점수도 함께 반환.
⚠ 주의 · 한계
rubric 모든 항목을 한 프롬프트에 담아 5회 샘플링 → 비용 큼. "Verdict: " 형식 위반 시 해당 rubric이 None→평균 제외(점수 왜곡). rubric 품질에 판정 신뢰도 크게 의존. thinking token budget 10240 tokens. 영어 프롬프트라 다국어 응답 판정 시 편향 가능.
도구 사용 행위를 사용자 정의 rubric으로 LLM judge가 채점. reference 궤적 불필요(reference-free) — "GeoCoding 이후 GetWeather 호출", "GetWeather 입력이 GeoCoding 출력에서 옴" 같은 도구 사용 로직을 rubric으로 명세해 판정. exact match(tool_trajectory_avg_score)의 유연한 대안.
채점 알고리즘
RubricBasedToolUseV1Evaluator. 프롬프트 슬롯: <available_tools> <user_prompt> <response>(tool 호출/응답) <properties>(rubric 불릿). judge가 property별 STEP1~5 chain-of-thought 후 "Property:/Rationale:/Verdict: yes|no". 파싱 후 property_text 정규화(lower+strip) 완전일치로 rubric 매핑 → 매칭 실패 rubric은 경고 후 드롭. 5샘플 다수결(동점=INVALID) → get_average_rubric_score → overall
필요 입력
RubricsBasedCriterion에 rubrics(도구 사용 관점 property) + threshold 필수. rubric 미지정 시 AssertionError("Rubrics are required."). intermediate_data(실제 tool 호출/응답), user_content, app_details(도구 선언).
모듈 / 클래스
google.adk.evaluation.rubric_based_tool_use_quality_v1.RubricBasedToolUseV1Evaluator
Enum: PrebuiltMetrics.RUBRIC_BASED_TOOL_USE_QUALITY_V1
기본 임계 / 출력
기본 임계 없음. 범위 [0,1]. PASSED / FAILED / NOT_EVALUATED(score=None 시) 3종.
⚠ 주의 · 한계
드롭 경로 2개: ① "Verdict: " 포맷 위반 시 파싱 실패 → None, ② judge가 property 텍스트를 바꿔써 정규화 매칭(lower+strip 완전일치) 실패 시 rubric 드롭 + 경고. 동점 다수결은 INVALID(보수적). AssertionError rubric 미지정. @experimental.
응답을 문장 단위로 분해(Segmenter) 후 각 문장을 context(tool 출력/문서) 대비 supported / unsupported / contradictory / not_applicable 등으로 라벨링(Validator). supported + not_applicable 비율이 점수(1 = 환각 없음). reference 정답 불필요.
채점 알고리즘
HallucinationsV1Evaluator(LlmAsJudge 미상속, 2단계 독립 파이프라인). ① Segmenter: _HALLUCINATIONS_V1_SEGMENTER_PROMPT로 응답을 문장 리스트로 분해. ② Validator: _HALLUCINATIONS_V1_VALIDATOR_PROMPT로 각 문장을 grounding context 대비 라벨링. supported+not_applicable = "correct" → accuracy = correct / total. num_samples 샘플링 집계 없이 1회만 실행.
필요 입력
user_content(질의), final_response(평가할 응답), grounding context(app_details의 developer instruction 또는 tool 결과). reference 답 불필요.
모듈 / 클래스
google.adk.evaluation.hallucinations_v1.HallucinationsV1Evaluator
Enum: PrebuiltMetrics.HALLUCINATIONS_V1
기본 임계 / 출력
기본 임계 없음(threshold 명시 필요). 범위 [0,1] = supported+not_applicable 비율. 1회 실행(num_samples 미사용) → 비결정성은 낮으나 여전히 judge 의존.
⚠ 주의 · 한계
grounding context 품질에 크게 의존 — context 자체가 부실하면 supported 판정이 과대/과소. 1회 실행이라 다수결 안정화 없음. 2회 LLM 호출(Segmenter + Validator) 비용. 문장 분해 오류 시 집계 왜곡. 영어 프롬프트 → 다국어 bias 가능.
Vertex Gen AI Eval SDK의 SAFETY 메트릭으로 응답 무해성 채점. ADK 자체 채점 로직 없이 GCP로 완전 위임 — GOOGLE_CLOUD_PROJECT + GOOGLE_CLOUD_LOCATION(또는 GOOGLE_API_KEY)이 없으면 ValueError.
채점 알고리즘
SafetyEvaluatorV1.evaluate_invocations()가 _SingleTurnVertexAiEvalFacade(metric_name=vertexai.types.PrebuiltMetric.SAFETY)로 완전 위임. 실제 채점 프롬프트·루브릭은 Vertex SDK 내부 — ADK 소스에서 접근 불가.
필요 입력
user_content(prompt)와 final_response(response)만으로 충분. reference·tool_uses 불필요. GCP credentials 필수.
모듈 / 클래스
google.adk.evaluation.safety_evaluator.SafetyEvaluatorV1 → vertex_ai_eval_facade._SingleTurnVertexAiEvalFacade
Enum: PrebuiltMetrics.SAFETY_V1
기본 임계 / 출력
기본 임계 없음(명시 필요). 범위 [0,1]. 높을수록 안전(무해). Vertex SDK 내부 판정 기준이라 세부 해석은 Vertex 문서 참조.
⚠ 주의 · 한계
GCP 종속·유료: GOOGLE_CLOUD_PROJECT + LOCATION 또는 GOOGLE_API_KEY 미설정 시 ValueError. 오프라인/로컬 전용 불가. 판정 로직이 Vertex SDK 내부라 ADK 소스만으로 완전 감사 불가. "v1 접미사는 다른 전략의 다른 버전이 나올 수 있음"을 docstring에 명시.
4 User Simulator · Multi-turn 메트릭 (4종)
이 4종은 멀티턴 User Simulation 기반 eval 파이프라인과 함께 동작. ConversationScenario / EvalCase.conversation_scenario 같은 멀티턴 전용 데이터 구조가 필요하며, multi-turn 3종(task_success / trajectory_quality / tool_use_quality)은 Vertex AI Eval SDK 위임 + GCP 의존.
멀티턴 eval에서 user simulator가 시나리오/페르소나를 제대로 따랐는지 검증하는 게이트 메트릭. 첫 턴: 문자열 완전일치(결정론) / 중간·종료 턴: LLM judge 5샘플 다수결. valid 턴 수 / 전체 평가 턴 수 = overall_score.
채점 알고리즘 (Hybrid)
첫 턴: int(get_text_from_content(first_invocation.user_content).strip() == conversation_scenario.starting_prompt.strip()) — LLM 미사용, 문자열 완전일치. 중간 턴: _SIMULATOR_MID_CONVERSATION_QUALITY_PROMPT로 judge가 시나리오/페르소나 준수 여부 판정(valid/invalid). 종료 턴: _SIMULATOR_END_OF_CONVERSATION_QUALITY_PROMPT로 시나리오 완료 여부 판정. 각 judge 5샘플 다수결. overall = num_valid / num_evaluated
필요 입력
EvalCase.conversation_scenario(ConversationScenario): starting_prompt, end_of_conversation_user_utterance, persona. 실제 user simulator 생성 멀티턴 대화 actual_invocations. reference 정답·expected tool_uses 불필요.
모듈 / 클래스
google.adk.evaluation.simulation.per_turn_user_simulator_quality_v1.PerTurnUserSimulatorQualityV1
Enum: PrebuiltMetrics.PER_TURN_USER_SIMULATOR_QUALITY_V1
기본 임계 / 출력
기본 임계 없음(명시 필요). 범위 [0,1] = valid 턴 비율. 첫 턴 문자열 불일치 시 자동 0.0(공백까지 strip 후 ==).
⚠ 주의 · 한계
첫 턴은 문자열 완전일치(strip ==) — simulator가 starting_prompt를 조금이라도 바꾸면 무조건 INVALID. 대화 길수록 judge 호출 폭증(중간/종료 턴마다 5회). judge 모델에 재현성 의존. per_turn_user_simulator_quality_v1이 낮으면 그 대화로 평가한 다른 메트릭 신뢰도도 낮아짐(simulator 오작동이 에이전트 평가를 오염시킴).
멀티턴 대화가 사용자 목표를 달성했는지 여부(task completion)를 Vertex LLM judge로 판정. 과정/경로 품질이 아닌 최종 성공 여부 측정 — 경로 품질은 multi_turn_trajectory_quality_v1로.
채점 알고리즘
MultiTurnTaskSuccessV1Evaluator → _MultiTurnVertexAiEvalFacade(metric_name=vertexai.types.PrebuiltMetric.MULTI_TURN_CHAT_QUALITY 등)로 위임. actual invocations 전체를 대화로 구성해 Vertex SDK의 멀티턴 평가 API에 넘김. overall_score = 마지막 turn 평가의 mean_score.
필요 입력
actual_invocations(멀티턴 대화 전체). reference·expected tool_uses 불필요. GCP credentials(GOOGLE_CLOUD_PROJECT + LOCATION 또는 GOOGLE_API_KEY) 필수.
모듈 / 클래스
google.adk.evaluation.multi_turn_task_success_evaluator.MultiTurnTaskSuccessV1Evaluator → vertex_ai_eval_facade._MultiTurnVertexiAiEvalFacade
Enum: PrebuiltMetrics.MULTI_TURN_TASK_SUCCESS_V1
기본 임계 / 출력
기본 임계 없음. 범위 [0,1]. Vertex SDK 내부 판정 기준이라 세부 루브릭은 Vertex 문서 참조.
⚠ 주의 · 한계
GCP 의존·유료. 실제 채점 루브릭이 ADK 소스에 없고 Vertex SDK 내부 — 판정 기준 감사 불가. 비결정적. threshold 미설정 시 PASS/FAIL 기준 없음.
멀티턴 세션 전체 에이전트 궤적(경로)의 효율성·효과성·논리성을 Vertex LLM judge로 정성 평가. reference-free — 정답 궤적 없이도 품질 측정 가능. 목표 달성 여부가 아닌 "어떻게 도달했는가"를 봄.
채점 알고리즘
MultiTurnTrajectoryQualityV1Evaluator → _MultiTurnVertexiAiEvalFacade(철자 주의: iAi)로 완전 위임. 실제 판정 루브릭은 Vertex SDK 내부. ADK는 대화를 직렬화해 Vertex API에 넘기고 점수를 받아 전달하는 역할만.
필요 입력
actual_invocations(멀티턴 대화). reference 불필요(reference-free). GCP credentials 필수.
모듈 / 클래스
google.adk.evaluation.multi_turn_trajectory_quality_evaluator.MultiTurnTrajectoryQualityV1Evaluator
Enum: PrebuiltMetrics.MULTI_TURN_TRAJECTORY_QUALITY_V1
기본 임계 / 출력
기본 임계 없음. 범위 [0,1]. PASSED/FAILED/NOT_EVALUATED. score >= threshold면 PASSED.
⚠ 주의 · 한계
GCP 의존·유료 + 비결정적. 클래스명 내 오타(_MultiTurnVertexiAiEvalFacade — "iAi"). Vertex 내부 루브릭 불투명. threshold 필수 지정. docstring이 safety_v1 것 복붙으로 보이는 잔재("safety metric") — 실제 동작은 trajectory quality.
멀티턴 대화 전반의 tool/function call 품질(선택 적절성·효율성·정확성)을 Vertex LLM judge로 평가. reference-free. 단일턴 rubric_based_tool_use_quality_v1의 멀티턴 대응판이지만 GCP 위임 방식으로 구현이 다름.
채점 알고리즘
MultiTurnToolUseQualityV1Evaluator → _MultiTurnVertexiAiEvalFacade로 완전 위임. 실제 tool-use 평가 루브릭은 Vertex SDK 내부. ADK는 대화 직렬화 + 점수 수신 역할만.
필요 입력
actual_invocations(멀티턴 대화, 각 턴의 intermediate_data 포함). reference tool_uses 불필요(reference-free). GCP credentials 필수.
모듈 / 클래스
google.adk.evaluation.multi_turn_tool_use_quality_evaluator.MultiTurnToolUseQualityV1Evaluator
Enum: PrebuiltMetrics.MULTI_TURN_TOOL_USE_QUALITY_V1
기본 임계 / 출력
기본 임계 없음. 범위 [0,1]. threshold 명시 필수.
⚠ 주의 · 한계
GCP 의존·유료 + 비결정적. 실제 tool-use 판정 기준 불투명(Vertex 내부). 단일턴 정밀 도구 검증이 필요하면 rubric_based_tool_use_quality_v1(ADK 자체, rubric 명세 가능)이 더 감사 가능. _MultiTurnVertexiAiEvalFacade 오타(iAi).
5 실무 선택 가이드
| 상황 | 추천 메트릭 | 이유 |
| 정해진 tool 시퀀스가 있고 엄격히 검증 | tool_trajectory_avg_score | 결정론·저비용. match_type으로 EXACT/IN_ORDER/ANY_ORDER 조절 |
| 응답이 정답 문자열과 비슷한지 빠른 회귀 테스트 | response_match_score | ROUGE-1, LLM 없음. 영어·고정 포맷 응답에 적합 |
| 표현은 달라도 의미만 맞으면 OK | final_response_match_v2 | LLM judge 의미 동치. 형식 차이 관대 |
| 다차원 품질 기준을 사람이 명세해 채점 | rubric_based_final_response_quality_v1 | rubric 리스트로 평가 기준 완전 제어. tool 근거 2단계 판정 |
| 도구 사용 로직·순서를 유연하게 검증 | rubric_based_tool_use_quality_v1 | reference-free, rubric으로 도구 사용 기준 명세 |
| RAG/tool 응답의 환각 여부 감지 | hallucinations_v1 | context 대비 faithfulness 측정. reference 불필요 |
| 안전성(무해성) 판정 | safety_v1 | Vertex SAFETY 메트릭. reference 불필요. GCP 필수 |
| 멀티턴 대화 eval 시 simulator 품질 게이트 | per_turn_user_simulator_quality_v1 | simulator 오작동이 다른 메트릭 오염 방지. 반드시 함께 실행 |
| 멀티턴 대화의 최종 목표 달성 여부 | multi_turn_task_success_v1 | GCP. 성공/실패 판정 전용 |
| 멀티턴 대화의 경로/과정 품질 | multi_turn_trajectory_quality_v1 | GCP. 어떻게 달성했는가(효율·논리성) |
| 멀티턴에서 tool 사용 방식 품질 | multi_turn_tool_use_quality_v1 | GCP. 대화 전반의 tool 선택·적절성 |
공통 주의사항.
① Programmatic 2종(tool_trajectory_avg_score, response_match_score)을 제외한 9종은 모두 LLM judge — 비용·비결정성이 있고 같은 입력에 점수가 달라질 수 있다.
② Vertex AI 위임 4종(safety_v1 + multi_turn 3종)은 GCP 유료 API + credentials 필수 — 로컬 전용 환경에서 사용 불가.
③ 대부분 BaseCriterion.threshold에 기본값이 없어 test_config.json의 criteria에 threshold를 명시하지 않으면 PASS/FAIL 판정 불가.
④ rubric 계열 5종은 @experimental — API가 변경될 수 있음.
⑤ Multi-turn 4종은 User Simulation 파이프라인 전용 — 단일턴 EvalCase에 직접 사용 불가.