EVALUATOR_ENDPOINT를 설정하기 전까지는 파이프라인이 아무것도 수행하지 않습니다.
참고: 점수 차원은 직접 정의합니다. 평가자는 원하는 숫자형 키를 반환할 수 있으며, Observability는 전송된 값을 저장, 추세 분석, 표시합니다.
개요
- 점수화 서비스를 작성합니다. 세션 트랜스크립트를 읽고 점수를 반환하는 소규모 HTTP 서비스를 구축합니다. Observability에는 복사하여 사용할 수 있는 참조 구현이 포함되어 있습니다. SDK를 이용한 평가자 작성을 참조하세요.
- Observability가 해당 서비스를 가리키도록 설정합니다. 서버 프로세스에
EVALUATOR_ENDPOINT(및 공유EVALUATOR_TOKEN)를 설정합니다. - 점수가 기록되는 것을 확인합니다. 완료된 모든 세션은 자동으로 점수화되며, 결과는 세션 상세 페이지, 세션 그리드, 저장된 대시보드에 표시됩니다.

작동 방식
Observability SDK가 세션에 대한agent_end 이벤트를 전송하면, 서버는
평가를 예약합니다. 그런 다음 전체 이벤트 트랜스크립트를 평가자 서비스에 POST하며,
평가자 서비스는 다음 중 하나를 수행할 수 있습니다:
-
인라인으로 결과를 반환합니다:
{"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. 결과는 세션의 평가 타임라인에 추가됩니다.reasoning과summary는 선택 사항입니다. -
지연합니다:
{"status":"pending", "job_id":"abc-123"}. 그러면 Observability는 평가자가{"status":"done", ...}또는{"status":"error", "error":"..."}를 반환할 때까지GET {EVALUATOR_ENDPOINT}/evaluate/abc-123을 호출합니다. 폴링 주기는 작업별로 설정됩니다:pending응답에next_poll_secs를 포함하여 재정의할 수 있으며, 그렇지 않으면 Observability는GET /config의default_poll_interval_secs값을 사용하고, 그것도 없으면 서버는EVALUATOR_POLLING_INTERVAL_SECS(기본값 10초)로 대체합니다. 모든 값은 [1초, 1시간] 범위로 제한됩니다.
agent_end를 전송하지 않는 세션(예: 충돌한 에이전트 프로세스)도 처리할 수 있습니다: 평가자의 GET /config는 {"inactivity_timeout_secs": 1800}을 반환할 수 있으며, Observability는 해당 시간 동안 유휴 상태인 세션을 평가합니다. 이 폴백을 비활성화하려면 해당 필드를 null로 설정하거나 생략하세요.
EVALUATOR_ENDPOINT가 설정되지 않은 경우 파이프라인은 완전히 아무런 동작도 하지 않습니다.
세션은 시간이 지남에 따라 여러 개의 최종 평가를 누적할 수 있습니다: 각 agent_end 이벤트(및 대시보드에서의 수동 재평가)는 새로운 평가 행을 추가합니다. 이는 재개된 대화를 평가하는 공식 방법입니다: 사용자가 에이전트를 종료하고 나중에 돌아와 더 많은 이벤트를 전송하고 에이전트를 다시 종료하면, 두 번째 평가가 전체 업데이트된 트랜스크립트에 대해 실행됩니다. 대시보드는 가장 최근 평가를 헤드라인으로 렌더링하고 이전 평가는 접을 수 있는 타임라인으로 표시합니다. 세션에 대한 평가가 실행 중인 동안, 해당 세션의 추가 agent_end 이벤트는 무시됩니다; 실행 중인 평가가 완료된 후 다음 이벤트가 평소와 같이 새로운 평가를 큐에 추가합니다.
비활성 폴백은 재개된 세션에도 다시 적용됩니다: 이전 최종 평가 이후 새 이벤트가 도착하고 세션이 inactivity_timeout_secs를 초과하여 유휴 상태가 되면 새로운 평가가 큐에 추가됩니다.
일시적인 오류(5xx, 429, 타임아웃, 네트워크 오류)는 EVALUATOR_MAX_ATTEMPTS까지 지수 백오프로 재시도됩니다; 4xx 응답은 최종 오류로 처리됩니다. Observability는 여러 수평 확장된 서버 인스턴스와 함께 안전하게 실행됩니다; 작업이 분산되어 동일한 세션이 동시에 두 번 처리되지 않습니다.
HTTP 계약
모든 인증된 라우트는 베어러 토큰 인증을 사용합니다. 양쪽에 동일한 값이 구성되어야 합니다:- Observability 서버: 환경 변수
EVALUATOR_TOKEN - 평가자 서비스: 동일한 방식으로 구성 (
agenteye-evaluatorSDK는 관례에 따라EVALUATOR_TOKEN을 읽음)
EVALUATOR_TOKEN이 설정되지 않은 경우 서버는 Authorization 헤더를 전송하지 않습니다; 평가자는 익명 요청을 수락할 수 있으며, 내부 전용 네트워크에서는 괜찮지만 공개 인터넷에서는 권장하지 않습니다.
평가자가 제공해야 하는 라우트
서버가 전송하는 EvalRequest 바디
응답 형태
동기 (완료):reasoning(점수별 근거 맵)과 summary(전체 단락 서술)는 모두 선택 사항입니다. reasoning의 키는 scores의 키와 일치해야 합니다; 대시보드는 각 항목을 해당 점수 바 아래에 인라인으로 렌더링합니다. scores만 반환하는 이전 평가자는 변경 없이 계속 작동합니다; reasoning과 summary는 단순히 null로 읽히고 해당 UI 요소는 생략됩니다.
비동기 (지연):
next_poll_secs는 선택 사항입니다; 생략하면 서버는 /config의 평가자 default_poll_interval_secs로 대체하고, 그다음에는 자체 EVALUATOR_POLLING_INTERVAL_SECS 환경 변수로 대체합니다.
평가자 측 최종 오류:
error를 기록합니다.
SDK를 이용한 평가자 작성
HTTP 계약을 직접 구현할 필요가 없습니다.agenteye-evaluator
Python 패키지는 인증, 라우팅, 요청/응답 형태를 자동으로 처리하는 타입이 지정된 FastAPI 래퍼를 제공합니다.
Failproof AI Observability는 트랜스크립트 형태에서 helpfulness, tool_efficiency, factuality를 점수화하는 작동하는 참조 평가자도 함께 제공합니다. 이를 시작점으로 복사하고 LLM 판단자, 규칙 엔진 등 품질 기준에 맞는 자체 로직으로 교체하세요.
최소 실행 가능한 평가자:
app 인스턴스는 모든 ASGI 서버에서 실행되므로 uvicorn module:app으로 시작할 수 있습니다.
비용이 많이 드는 작업을 지연해야 하는 평가자의 경우 대신 JobPending을 반환하고 @app.job_lookup 핸들러를 등록하세요; Observability 서버는 평가자가 최종 상태를 반환하거나 EVALUATOR_MAX_POLL_DURATION_SECS 제한(기본값 1시간)이 경과할 때까지 GET /evaluate/{job_id}를 폴링합니다.
전체 API 참조, 비동기 패턴, 이벤트 스키마는 agenteye-evaluator SDK의 README에 문서화되어 있습니다.
평가자 실행
평가자는 사용자의 서비스입니다 — Failproof AI Observability는 기본 평가자를 제공하지 않으므로, 자체 서비스를 실행하는 곳에서 구축하고 실행해야 합니다. 모든 ASGI 서버에서 실행됩니다(예:uvicorn my_evaluator:app); HTTP 계약의 /health, /config, /evaluate 라우트를 제공한 다음 서버가 해당 서비스를 가리키도록 설정합니다(서버 구성 참조).
평가자에 접근할 수 있으면 GET /health는 {"status":"ok"}를 반환합니다. 에이전트가 엔드-투-엔드 실행을 완료한 후, 서버의 GET /evaluations는 status: "done" 및 평가자가 생성한 점수가 포함된 행을 반환합니다.
서버 구성
서버 프로세스에 설정:
자동 점수화를 활성화하려면 서버에
EVALUATOR_ENDPOINT와 EVALUATOR_TOKEN을 모두 설정하고 서버를 재시작하여 변경 사항을 적용하세요. EVALUATOR_ENDPOINT가 설정되지 않으면 파이프라인은 아무런 동작도 하지 않습니다.
위의 조정 항목은 선택 사항입니다; 기본값을 재정의해야 하는 경우에만 서버에 해당 환경 변수를 설정하세요.
API 참조
점수 범위로 필터링: score_filters
GET /evaluations는 scores 객체 내부의 숫자 값으로 결과를 좁히는 선택적 score_filters 파라미터를 허용합니다. 이 파라미터는 key:min..max 항목의 쉼표로 구분된 목록입니다; 어느 쪽 경계도 생략할 수 있습니다. 여러 항목은 논리 AND로 결합됩니다. 명명된 키가 없거나 숫자가 아닌 행은 제외됩니다. 요청에는 최대 20개의 필터 항목이 포함될 수 있으며, 이를 초과하면 HTTP 400이 반환됩니다.
예시:
/evaluations 응답 객체에는 다음 필드가 있습니다:
권한
부트스트랩 관리자(
ADMIN_KEY, ADMIN_EMAIL)는 이 모든 권한을 자동으로 받습니다.
결과 보기
/sessions/<id>: 이벤트 타임라인 + 세션의 점수와 디스패치 시도 오류를 보여주는 오른쪽 패널. 키에evaluations:trigger권한이 있으면 내보내기 버튼 옆에 재평가 버튼이 나타나며,agent_end를 전송하지 않은 세션이나 새 평가자를 배포한 후 점수를 새로 고칠 때 유용합니다. 대시보드는 새 결과를 폴링하고 결과가 도착하면 오른쪽 패널을 업데이트합니다./sessions: 필터링 가능한 세션 그리드; 점수 열에는 각 세션의 평가 상태와 점수가 한눈에 표시됩니다./dashboards: 저장된 평가 상태 뷰(아래 대시보드 참조).

대시보드
대시보드 페이지(/dashboards)를 통해 평가 필터 조합을 이름이 지정된 재사용 가능한 뷰로 저장하고 해당 평가 슬라이스의 상태를 한눈에 모니터링할 수 있습니다. 대시보드는 조직 전체에서 공유됩니다; dashboards:read 권한이 있는 모든 사람이 동일한 세트를 볼 수 있습니다.
각 대시보드에는 다음이 고정됩니다:
- 필터: 세션 페이지와 동일한 컨트롤: 환경, 상태, 에이전트, 롤링 시간 창, 점수 범위 필터(
key:min..max). - 표시 구성: 특성화할 점수 키, 녹색/주황색/빨간색 상태 임계값, 표시할 패널, 세션별 최신 평가로 축소할지 여부.
GET /evaluations/aggregate 사용), 따라서 숫자는 샘플링이 아닌 정확한 값입니다.

dashboards:read와 evaluations:read 모두 필요합니다; 생성 및 편집에는 dashboards:write가 필요합니다; 삭제에는 dashboards:delete가 필요합니다. 부트스트랩 관리자는 이 모든 권한을 자동으로 받습니다.
문제 해결
세션은 존재하지만 평가가 생성되지 않습니다. 서버 프로세스에EVALUATOR_ENDPOINT가 설정되어 있는지, 서버와 평가자가 동일한 EVALUATOR_TOKEN 값을 공유하는지, 평가자의 /health 엔드포인트가 서버에서 접근 가능한지 확인하세요. EVALUATOR_ENDPOINT가 설정되지 않으면 파이프라인은 아무런 동작도 하지 않습니다.
진행 중인 평가가 쌓입니다. GET /evaluation-jobs를 조회하여 진행 중인 큐를 확인하세요. 각 행의 attempt_count, next_attempt_at, last_error를 검사하세요. 일반적인 원인: 평가자 서비스에 접근할 수 없거나 5xx를 반환하는 경우(백오프로 재시도), 잘못된 EVALUATOR_TOKEN(401은 최종 오류), 또는 무기한 pending을 반환하는 비동기 평가자(아래 참조).
세션이 완료되었지만 최종 평가가 없습니다. GET /evaluation-jobs?status=polling을 조회하세요; 결과가 아직 진행 중일 수 있습니다. 작업이 pending 상태에 멈춰 있으면 서버가 평가자에 접근하는 데 문제가 있는 것입니다; 평가자가 실행 중이고 EVALUATOR_TOKEN이 일치하는지 확인하세요.
HTTP 401 from evaluator: invalid bearer token. 서버의 EVALUATOR_TOKEN이 평가자 서비스에 구성된 값과 일치하지 않습니다. 두 값이 동일해야 합니다.
비동기 평가자가 계속 pending을 반환합니다. 서버는 평가자가 done 또는 error를 반환하거나 EVALUATOR_MAX_POLL_DURATION_SECS(기본값 1시간)가 경과할 때까지 GET /evaluate/{job_id}를 폴링합니다. 제한에 도달하면 평가는 timeout으로 기록되고 진행 중인 큐에서 제거됩니다. 평가자가 기본값보다 더 긴 시간이 실제로 필요한 경우 EVALUATOR_MAX_POLL_DURATION_SECS를 늘리세요.
다음 단계
- 평가자 에이전트 스킬: 코딩 에이전트가 실제 세션을 바탕으로 차원을 설계하고 이 서비스를 구축하도록 합니다.
- Python SDK: 점수화를 트리거하는
agent_end이벤트를 전송합니다. - API 키:
evaluations:read및evaluations:trigger권한. - 감사: 정책 기반 검토를 위한 Observability의 또 다른 자동화된 품질 기능.

