4개월의 노력 끝에 CI 평가 시스템을 구축했습니다. 실제로 살아남은 것들을 공유합니다.
We finally have eval in CI after 4 months of trying. Here is what actually stayed.
핵심 요약
LLM 에이전트의 CI 평가 시스템 구축 경험과 시행착오, 그리고 최종적으로 정착한 도구 스택을 공유합니다.
- 평가 지표 — 전체 합산 점수 대신 기준별 개별 지표를 추적하여 문제점을 명확히 파악함.
- 판단 모델 검증 — 인간이 라벨링한 데이터와 비교하여 LLM 판정 모델의 일관성을 상시 검증함.
- 도구 스택 — Promptfoo, LangSmith, fi.evals, Datadog 등을 조합하여 비용 효율적인 평가 파이프라인 구축.
- 핵심 조언 — 프롬프트 최적화보다 판정 모델(Judge)의 신뢰성을 먼저 확보하는 것이 중요함.
우리 프로덕션에서 에이전트 돌리는 중인데, 제일 바쁜 파이프라인은 프롬프트가 일주일에 두 번은 바뀜. 4개월 전만 해도 상황이 어땠냐면, 엔지니어 한 명이 머지하기 전에 수동으로 평가 돌리고, 노션에 '이거 망함' 리스트 공유하고, 슬랙 채널은 그냥 "야 또 프롬프트 수정하다 뭐 터짐" 하는 수준이었음.
지금은 CI 평가 게이트가 있어서 기준별 통과율 떨어지면 머지 아예 막아버림. 여기까지 오면서 뭘 했고, 뭘 버렸는지 정리해 봄.
처음에 잘못 생각했던 거: 통과율을 하나로 퉁친 거
전체 통과율이라는 숫자 하나만 봤는데, 이게 3주 동안 진짜 문제를 가리고 있었음. 어떤 기준은 0.95에서 0.62로 떡락했는데 다른 게 올라버리니까 전체 평균은 0.91로 계속 유지된 거임. 에이전트는 정확도를 버리고 포맷팅에만 신경 쓰고 있었는데, 합산 수치만 보면 다 잘 돌아가는 줄 알았던 거지.
해결책: 기준별로 메트릭 따로 태깅함. 이제 기준마다 따로 노는 게 보임. 덕분에 "뭐가 문제냐" 찾을 때 45분씩 디버깅하던 거, 이제 Datadog 시계열 그래프만 보면 끝남.
판사(Judge) 보정 문제:
LLM-as-judge가 확장성 면에선 유일한 답인데, 판사 자체를 검증 안 하면 그냥 노이즈만 그래프로 그리는 꼴임. 우리는 프롬프트마다 사람이 직접 라벨링한 200개짜리 홀드아웃 세트를 유지함. 평가 돌릴 때마다 이걸로 점수 매기고 sklearn 써서 판사랑 사람 라벨 간의 Cohen's kappa 값을 계산함. 카파 계수 0.6 밑으로 떨어지면 그 위에 있는 통과율 그래프는 그냥 아무 의미 없는 쓰레기 데이터임.
CI에서 돌리는 평가 템플릿은 Future AGI의 fi.evals를 Promptfoo 게이트랑 같이 쓰고 있음. 이걸 선택한 이유는 하이브리드 실행 모드 때문임. 휴리스틱 메트릭(BLEU, ROUGE, 문자열 일치, 임베딩 유사도)은 API 호출 없이 로컬에서 돌고, LLM 기반 판사 메트릭만 클라우드로 보냄. 프롬프트 건드릴 때마다 PR 날리는데, 비용 차이 무시 못 함. Braintrust, DeepEval, Confident AI도 다 써봤는데 다 괜찮음. Braintrust는 트레이스 UI가 제일 깔끔하고, DeepEval은 기본 제공 메트릭이 제일 많음. CI 게이트(Promptfoo)랑 평가 레이어(fi.evals)를 오픈소스로 쓰니까 메트릭 정의를 우리가 직접 관리할 수 있고, 계약 다시 맺을 필요도 없어서 좋음.
지금 스택 구성:
- Promptfoo: CI 게이트. 임계값 밑으로 떨어지면 머지 차단.
- LangSmith: 런타임 트레이싱. 장애 터졌을 때 트레이스랑 평가 같이 보는 게 꿀임.
- fi.evals: CI용 LLM 평가 템플릿. 하이브리드 모드로 휴리스틱 체크는 로컬에서 처리. GitHub Actions에서 Promptfoo 다음에 실행됨.
- Datadog: 평가 결과 커스텀 메트릭. 기준별 시계열 데이터, 3번 연속 떨어지면 알람 뜸.
- sklearn: 사람 홀드아웃이랑 비교해서 카파 계수 계산. 코드 두 줄이면 끝남.
버린 것들: 사내에서 직접 만든 평가 대시보드(기준 바뀔 때마다 아무도 업데이트 안 함), 그리고 하루 세팅하면 오픈소스로 다 되는 기능인데 월 400달러씩 쳐먹던 유료 평가 SaaS.
시작하는 사람들한테 딱 하나만 말해주자면:
프롬프트보다 판사부터 제대로 세팅해라. 판사가 사람이랑 생각이 같은지 모르면, 그 판사가 그려내는 그래프는 다 의심해 봐야 함.
다른 팀들은 어떻게 하는지 궁금함. 특히 프롬프트 범위가 바뀔 때 사람 홀드아웃 데이터를 어떻게 최신으로 유지하는지 노하우 있는 사람 있음? 우리 건 자꾸 썩어가는데, 언제 썩었는지 알 방법이 마땅치가 않네.

