Skip to main content
Failproof AI Observability는 완료된 모든 에이전트 실행을 자동으로 품질 점수화할 수 있습니다: 소규모 점수화 서비스를 제공하면 Observability가 나머지를 처리합니다. 이를 통해 관심 있는 차원(유용성, 도구 효율성, 사실성, 안전성 등 원하는 항목을 선택)을 추적하고, 회귀를 조기에 감지하며, 에이전트나 환경을 한눈에 비교할 수 있습니다. 점수화는 선택 사항입니다: 서버에 EVALUATOR_ENDPOINT를 설정하기 전까지는 파이프라인이 아무것도 수행하지 않습니다.
참고: 점수 차원은 직접 정의합니다. 평가자는 원하는 숫자형 키를 반환할 수 있으며, Observability는 전송된 값을 저장, 추세 분석, 표시합니다.

개요

  1. 점수화 서비스를 작성합니다. 세션 트랜스크립트를 읽고 점수를 반환하는 소규모 HTTP 서비스를 구축합니다. Observability에는 복사하여 사용할 수 있는 참조 구현이 포함되어 있습니다. SDK를 이용한 평가자 작성을 참조하세요.
  2. Observability가 해당 서비스를 가리키도록 설정합니다. 서버 프로세스에 EVALUATOR_ENDPOINT(및 공유 EVALUATOR_TOKEN)를 설정합니다.
  3. 점수가 기록되는 것을 확인합니다. 완료된 모든 세션은 자동으로 점수화되며, 결과는 세션 상세 페이지, 세션 그리드, 저장된 대시보드에 표시됩니다.
평가 요약, 차원별 점수 바, 오른쪽 패널의 추론 텍스트가 포함된 세션 상세 보기 평가자를 구성하면 완료된 각 실행이 점수화되고 결과가 세션의 오른쪽 패널에 표시됩니다: 상단의 요약, 그 아래 추론이 포함된 차원별 점수 바.

작동 방식

Observability SDK가 세션에 대한 agent_end 이벤트를 전송하면, 서버는 평가를 예약합니다. 그런 다음 전체 이벤트 트랜스크립트를 평가자 서비스에 POST하며, 평가자 서비스는 다음 중 하나를 수행할 수 있습니다:
  • 인라인으로 결과를 반환합니다: {"status":"done", "scores":{...}, "reasoning":{...}, "summary":"..."}. 결과는 세션의 평가 타임라인에 추가됩니다. reasoningsummary는 선택 사항입니다.
  • 지연합니다: {"status":"pending", "job_id":"abc-123"}. 그러면 Observability는 평가자가 {"status":"done", ...} 또는 {"status":"error", "error":"..."}를 반환할 때까지 GET {EVALUATOR_ENDPOINT}/evaluate/abc-123을 호출합니다. 폴링 주기는 작업별로 설정됩니다: pending 응답에 next_poll_secs를 포함하여 재정의할 수 있으며, 그렇지 않으면 Observability는 GET /configdefault_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-evaluator SDK는 관례에 따라 EVALUATOR_TOKEN을 읽음)
EVALUATOR_TOKEN이 설정되지 않은 경우 서버는 Authorization 헤더를 전송하지 않습니다; 평가자는 익명 요청을 수락할 수 있으며, 내부 전용 네트워크에서는 괜찮지만 공개 인터넷에서는 권장하지 않습니다.

평가자가 제공해야 하는 라우트

서버가 전송하는 EvalRequest 바디

응답 형태

동기 (완료):
reasoning(점수별 근거 맵)과 summary(전체 단락 서술)는 모두 선택 사항입니다. reasoning의 키는 scores의 키와 일치해야 합니다; 대시보드는 각 항목을 해당 점수 바 아래에 인라인으로 렌더링합니다. scores만 반환하는 이전 평가자는 변경 없이 계속 작동합니다; reasoningsummary는 단순히 null로 읽히고 해당 UI 요소는 생략됩니다. 비동기 (지연):
next_poll_secs는 선택 사항입니다; 생략하면 서버는 /config의 평가자 default_poll_interval_secs로 대체하고, 그다음에는 자체 EVALUATOR_POLLING_INTERVAL_SECS 환경 변수로 대체합니다. 평가자 측 최종 오류:
서버는 다른 2xx 바디를 프로토콜 오류로 처리하고 세션에 대한 최종 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 /evaluationsstatus: "done" 및 평가자가 생성한 점수가 포함된 행을 반환합니다.

서버 구성

서버 프로세스에 설정: 자동 점수화를 활성화하려면 서버에 EVALUATOR_ENDPOINTEVALUATOR_TOKEN을 모두 설정하고 서버를 재시작하여 변경 사항을 적용하세요. EVALUATOR_ENDPOINT가 설정되지 않으면 파이프라인은 아무런 동작도 하지 않습니다. 위의 조정 항목은 선택 사항입니다; 기본값을 재정의해야 하는 경우에만 서버에 해당 환경 변수를 설정하세요.

API 참조

점수 범위로 필터링: score_filters

GET /evaluationsscores 객체 내부의 숫자 값으로 결과를 좁히는 선택적 score_filters 파라미터를 허용합니다. 이 파라미터는 key:min..max 항목의 쉼표로 구분된 목록입니다; 어느 쪽 경계도 생략할 수 있습니다. 여러 항목은 논리 AND로 결합됩니다. 명명된 키가 없거나 숫자가 아닌 행은 제외됩니다. 요청에는 최대 20개의 필터 항목이 포함될 수 있으며, 이를 초과하면 HTTP 400이 반환됩니다. 예시:
/evaluations 응답 객체에는 다음 필드가 있습니다:

권한

부트스트랩 관리자(ADMIN_KEY, ADMIN_EMAIL)는 이 모든 권한을 자동으로 받습니다.

결과 보기

  • /sessions/<id>: 이벤트 타임라인 + 세션의 점수와 디스패치 시도 오류를 보여주는 오른쪽 패널. 키에 evaluations:trigger 권한이 있으면 내보내기 버튼 옆에 재평가 버튼이 나타나며, agent_end를 전송하지 않은 세션이나 새 평가자를 배포한 후 점수를 새로 고칠 때 유용합니다. 대시보드는 새 결과를 폴링하고 결과가 도착하면 오른쪽 패널을 업데이트합니다.
  • /sessions: 필터링 가능한 세션 그리드; 점수 열에는 각 세션의 평가 상태와 점수가 한눈에 표시됩니다.
  • /dashboards: 저장된 평가 상태 뷰(아래 대시보드 참조).
세션별 평가 상태 필과 색상으로 구분된 점수 배지(helpfulness, factuality, tool_efficiency, safety, coherence)가 있는 세션 그리드 세션 그리드는 각 실행의 평가 상태와 점수를 한눈에 보여줍니다; 빨간색/주황색/녹색 배지로 낮은 점수가 눈에 띄게 표시됩니다.

대시보드

대시보드 페이지(/dashboards)를 통해 평가 필터 조합을 이름이 지정된 재사용 가능한 뷰로 저장하고 해당 평가 슬라이스의 상태를 한눈에 모니터링할 수 있습니다. 대시보드는 조직 전체에서 공유됩니다; dashboards:read 권한이 있는 모든 사람이 동일한 세트를 볼 수 있습니다. 각 대시보드에는 다음이 고정됩니다:
  • 필터: 세션 페이지와 동일한 컨트롤: 환경, 상태, 에이전트, 롤링 시간 창, 점수 범위 필터(key:min..max).
  • 표시 구성: 특성화할 점수 키, 녹색/주황색/빨간색 상태 임계값, 표시할 패널, 세션별 최신 평가로 축소할지 여부.
각 카드에는 일치하는 세션 수, 완료/오류/타임아웃 분류, 각 특성화된 점수의 평균, 소형 추세 스파크라인이 표시됩니다. 대시보드를 열면 전체 크기 패널이 표시되며; **“세션에서 열기”**를 누르면 정확히 해당 슬라이스로 미리 필터링된 세션 페이지로 이동합니다. 메트릭은 전체 일치 집합에 대해 서버 측에서 계산됩니다(GET /evaluations/aggregate 사용), 따라서 숫자는 샘플링이 아닌 정확한 값입니다. 평가자 차원별 평균 점수 바, 도구 성공/오류 분류, 상위 도구, 시간당 이벤트 추세가 있는 평가 상태 대시보드 권한: 보기에는 dashboards:readevaluations: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:readevaluations:trigger 권한.
  • 감사: 정책 기반 검토를 위한 Observability의 또 다른 자동화된 품질 기능.