LLM 앱 에이전트 행동 테스트를 위한 Rubric-Eval
요약
LLM 에이전트의 행동(Behavior)을 정밀하게 테스트하기 위한 Rubric-Eval 라이브러리를 소개합니다. 이 도구는 단순히 최종 출력을 평가하는 것을 넘어, 어떤 도구가 호출되었는지, 인자 및 순서가 적절했는지, 추론 트레이스 품질과 지연 시간까지 포괄적으로 검증하여 배포 전 회귀를 잡아낼 수 있습니다.
핵심 포인트
- 최종 출력 대신 에이전트의 '행동'을 테스트합니다.
- 도구 호출 정확도, 금지 도구 사용 여부 등을 정밀하게 측정합니다.
- 로컬에서 작동하며 콜백이나 래퍼 없이 쉽게 통합 가능합니다.
- 회귀(Regression) 감지를 통해 성능 저하를 CI 환경에서 포착할 수 있습니다.
LLM 앱의 에이전트 행동 테스트.
에이전트가 무엇을 말했는지뿐만 아니라, 어떤 도구를 호출했고, 인자(arguments)와 트레이스(trace), 지연 시간(latency) 등 실제로 무엇을 했는지 테스트하세요. 배포 전에 CI에서 회귀(regressions)를 잡아낼 수 있습니다.
에이전트가 모든 수동 검사를 통과했습니다. 그러다가 프롬프트 수정 사항이 배포되었고, lookup_order 호출을 조용히 멈추고 메모리 기반으로 답변하기 시작했습니다. 응답 자체는 여전히 괜찮아 보입니다 — 문자열 매칭 평가(string-match evals)나 최종 출력만 볼 수 있는 LLM 심사관으로는 이를 포착할 수 없습니다.
Rubric은 행동을 테스트합니다: 어떤 도구가 호출되었는지, 어떤 인자와 함께, 어떤 순서로, 금지된 도구는 피했는지, 추론 트레이스가 얼마나 깔끔했는지, 그리고 얼마나 빠르게 실행되었는지. 필요한 종속성(dependencies)이 전혀 없고, 완전히 로컬에서 작동하며, MIT 라이선스입니다.
pip install rubric-eval
콜백(callbacks), 래퍼(wrappers), 수동 연결(manual wiring)이 필요 없습니다. Rubric은 에이전트가 이미 생성하는 메시지로부터 도구 호출, 인자, 출력, 오류, 전체 트레이스, 지연 시간, 토큰 사용량을 추출합니다.
import rubriceval as rubric
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(model, tools=[lookup_order, create_ticket, send_email])
...
[2/2] 제 계정이 잠겼습니다. 급합니다.
❌ 점수: 0.667
✗ tool_call_accuracy: 0.000 — 예상 도구 누락: ['create_ticket']; 호출된 금지 도구: ['send_email']
...
이미 agent.invoke()로부터 결과를 가지고 있나요?
? 한 번의 호출로 해결됩니다:
`case = rubric.from_langgraph(result, expected_tools=[
기준선 (Baseline) 현재 (Current) Δ 통과율 (Pass rate)
100.0% (12/12) 91.7% (11/12) 🔻 -0.08 평균 점수 (Avg score)
0.96 0.89 🔻 -0.07
Urgent — account locked— 통과 → 실패 (score 1.00 → 0.67)
tool_call_accuracy
: 1.00 → 0.00 — 예상 도구 누락 (Missing expected tools): ['create_ticket']; 금지된 도구 호출 (Called forbidden tools): ['send_email']
동일한 차이점은 로컬 및 모든 CI 시스템에서 사용할 수 있습니다:
rubric run evals/regression.py --output-json current.json
rubric compare current.json --baseline evals/baseline.json --fail-on-regression
rubric compare는 통과→실패 회귀(regressions), 여전히 통과하는 테스트의 점수 하락, 수정된 테스트 및 새로 추가되거나 제거된 테스트를 플래그 지정하며 — 실패한 메트릭의 이유가 인라인으로 표시됩니다.
| Metric | Checks |
|---|---|
ToolCallAccuracy() | 예상 도구 호출, 금지 도구 회피, 선택적 순서 확인 |
TraceQuality() | 루프 없음, 단계 예산 내 $ |
TaskCompletion() | 작업이 실제로 완료되었는지 |
ToolCallEfficiency() | 중복되거나 낭비되는 도구 호출 없음 |
SafetyCompliance() | 트레이스에 안전하지 않은 동작 없음 |
ReasoningQuality() | 일관된 다단계 추론 |
ContextUtilization() | 제공된 컨텍스트가 실제로 사용되었는지 |
LatencyMetric(max_ms=...) | 지연 시간 예산 내 $ |
CostMetric(max_cost_usd=...) | 비용 예산 내 |
| Metric | Checks |
|---|---|
LLMJudge(criteria=...) | 사용자 정의 LLM 기반 점수 — 모든 호출 가능 함수 (OpenAI, Anthropic, Ollama)와 작동 |
GEval(name=..., criteria=...) | Chain-of-thought LLM 평가 |
HallucinationScore() | 제공된 컨텍스트에 근거한 출력 (LLM judge 또는 NLI 모드) |
SemanticSimilarity(threshold=...) | 기대 출력 대비 임베딩 유사성 ([semantic] 추가) |
RougeScore() | 요약에 대한 ROUGE 중첩도 ([rouge] 추가) |
ExactMatch() / Contains() / NotContains() / RegexMatch() | 문자열 확인, 종속성 없음 |
LLM-judge 메트릭은 불안정성 감지 (flakiness detection) 기능을 통해 반복 실행을 지원합니다 — Rubric은 점수 분산을 보고하여 에이전트가 아닌 judge가 불안정한 부분인지 알 수 있게 합니다.
from rubriceval import BaseMetric, MetricResult
class NoApologySpam(BaseMetric):
name = "no_apology_spam"
...
Evals는 일반 테스트처럼, 내장된 rubric_eval을 통해 실행합니다.
fixture:
def test_agent_routes_urgent_requests(rubric_eval):
result = agent.invoke({"messages": [{"role": "user", "content": "계정 잠김, 긴급!"}]})
rubric_eval.add(
...
rubric run evals/regression.py # eval 파일 실행
rubric run evals/regression.py --output-html report.html --output-json report.json
rubric run evals/regression.py --quiet --fail-on-error
...
HTML 보고서는 테스트별 추적(trace), 도구 호출(tool calls), 그리고 메트릭별 분석이 포함된 단일 독립 파일입니다. 로컬에서 열거나, CI 아티팩트에 첨부할 수 있으며 서버가 필요 없습니다.
행동 중심. 대부분의 eval 프레임워크는 최종 답변을 점수화합니다. Rubric의 핵심 추상화(abstraction)는 에이전트 실행 자체—도구, 인자(arguments), 추적, 지연 시간(latency)—입니다. 왜냐하면 에이전트 버그가 실제로 존재하는 곳이 바로 그곳이기 때문입니다.제로 와이어링(Zero wiring).run_langgraph()
/from_messages()
이미 가지고 있는 메시지를 테스트 케이스로 변환합니다. 앱에 삽입할 SDK가 필요 없습니다.CI 네이티브(CI-native). 기준선 차이점 분석(Baseline diffing), PR 댓글, 그리고 종료 코드(exit codes) 기능이 내장되어 있으며 유료 추가 기능이 아닙니다.필수 종속성 없음, 완전 로컬 실행.pip install rubric-eval
다른 것을 가져오지 않습니다. 사용자의 프롬프트와 추적 데이터는 절대 기지를 벗어나지 않습니다.**독립적이며 MIT 라이선스 적용.**AI 회사나 플랫폼 벤더가 소유하지 않으므로 누구의 클라우드를 통해 eval을 실행해야 한다는 압박이 없습니다.
examples/langgraph_eval.py
— 에이전트 행동 테스트를 엔드투엔드로 수행합니다 (종속성 없음, API 키 불필요).examples/eval.py
— 실제 운영 환경에 가까운 스위트: FAQ 봇 + 지원 에이전트.
ROADMAP.md를 확인하세요. 다음 기능은 CrewAI, OpenAI Agents SDK, MCP 서버에 대한 자동 캡처; 병합 시 기준선 자동 업데이트; 데이터셋 로더입니다.
기여는 환영합니다 — good first issue 태그가 붙은 이슈들은 실제로 첫 PR을 위해 범위가 지정되어 있습니다.
git clone https://github.com/Kareem-Rashed/rubric-eval
cd rubric-eval
pip install -e ".[dev]"
...
기여 가이드라인은 CONTRIBUTING.md 파일을 참조하십시오.
MIT © Kareem Rashed
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기