CurrentRAG 평가 리포트 (n = 68)
실험 개요
- Run ID: 2025-09-19T21-06-32Z_CurrentRAG_seed42
- 샘플 수: 68
- 모델: gpt-4o-mini
- 평균 지연: 9,746.35 ms
- 총 토큰: 870,368 (= 프롬프트 848,975 + 응답 21,393)
- 총 비용(계산치): \rightarrow0.00206 $0.000161 / 1K tokens
- 호출 수: 68
1) KPI 요약
| metric | n | coverage | mean | 95% CI |
|---|---|---|---|---|
| answer_correctness | 68 | 1.000 | 0.599 | [0.546, 0.653] |
| answer_relevancy | 68 | 1.000 | 0.712 | [0.620, 0.803] |
| context_precision | 62 | 0.912 | 0.984 | [0.952, 1.000]* |
| context_recall | 60 | 0.882 | 0.820 | [0.742, 0.898] |
| faithfulness | 57 | 0.838 | 0.852 | [0.800, 0.905] |
| * 상한 1.0 클리핑 |
한줄 해석
- 정확도 0.60, 관련성 0.71: 생성된 품질은 “보통 이상”이며, 편차는 큼(케이스별 흔들림).
- 정밀도 0.984 vs 재현율 0.820: 검색은 “정확한 걸 잘 가져오되(precision ) 필요한 걸 늘 다 가져오진 못한다(recall )”
- coverage < 1: 약 9-16% 샘플은 context/faithfulness 계산 불가(컨텍스트 부재/전처리 이슈로 추정).
RAG에서의 정밀도와 재현율
정밀도(precision) 는 “가져온 컨텍스트 중에 진짜로 질문과 관련 있는 비율(=노이즈가 얼마나 적은가)”, 재현율(recall) 은 “세상에 존재하는 관련 컨텍스트 중에 우리가 얼마나 많이 건져 올렸는가(=빠뜨리지 않았는가)“라고 생각하면 된다.
- 정밀도 = 신호 대 잡음비
- 리트리버가 가져온 문서/청크 10개 중 9개가 질문과 딱 맞다면 정밀도 0.9.
- 정밀도가 낮으면 LLM 입력에 쓸데없는 텍스트가 섞여 토큰/지연 , 답도 산만해진다.
- 재현율 = 커버리지(빠뜨림 없는가)
- 실제로 필요한 근거가 5개인데, 그중 4개만 가져오면 재현율 0.8.
- 재현율이 낮으면 핵심 근거 누락 LLM이 틀리거나 확신 없는 답을 낸다.
2) 비용·지연 분석 (핵심 포인트)
- 프롬프트 토큰 비중 97.5% (848,975 / 870,368): 지연과 비용의 거의 전부가 컨텍스트 주입량에서 발생.
- 호출당 평균 토큰: 12.8K(프롬프트 12.49K, 응답 315)
- 비용 자체는 모델 단가가 낮아 $0.00206 / call로 매우 저렴하지만, 지연 ~9.7s는 사용자 체감에 불리.
- 결론: 컨텍스트 예산 통제가 성능·지연·비용을 동시에 잡는 지렛대.
3) 진단 (왜 이런 수치가 나왔나)
- 검색 재현율이 부족 답의 완결성/정확도에 직접 타격.
- 컨텍스트 과다·중복 주입 프롬프트 토큰 폭증 지연 증가, 때로는 모델이 핵심 근거를 놓침(정확도/관련성 흔들림).
- 케이스 간 편차 큼(관련성 = 0.385) 답안 형식·근거 제시가 일정치 않음.
- (추정) 리트리버 구현 이슈: 이전 코드 기준, 빈 쿼리로 대량 문서 선조회 + BM25 on-the-fly 등은 지연 · recall 양쪽 모두 유발 가능.
4) 즉시 적용 권고
A. 컨텍스트 예산 통제 (지연·비용 , 품질 )
- 후보군 융합 Rerank 최종 K 축소 파이프라인:
- Vector(MMR, fetch_k=200, k=50, 0.5)
- BM25(k=50)
- RRF 융합(Reciprocal Rank Fusion)
- Cross-Encoder Re-rank 상위 5-7개만 투입
- Chunk 길이 상한 300-500 tokens + 중복 제거 + 질의 중심 요약*(긴 문서는 salient sentences만)
- 토큰 가드: 컨텍스트 합계 6K tokens/call(현 12.5K 대비 -50% 목표).
- 기대 효과: 지연 ~50% , 비용 ~50% , correctness/faithfulness 미세 (핵심 근거 집중)
B. 리콜 보완 (정확도 )
- 빈/약한 매칭 시 threshold 완화 + k + multi-query 확장 자동 보정(Corrective RAG 스타일)
- 하위질 검색 품질 감지(간단 점수) fallback 전략 적용
C. 생성 단계 안정화 (편차 )
- 답안 스키마 고정: 결론 근거 bullet 인용(문서 iod/제목)
- 모호/불충분 상황 명시 규칙(추가 검색 유도, 불확실성 표시)
D. 관측성/캐시
- 그래프 결과에 retrieve_ms/generate_ms 타이밍 로그, retrieval_items(doc_id, score, rank, source) 기록
- 반복 실험/평가에 LangChain 캐시(sqlite) ON
5) 수치 목표 (다음 사이클)
- answer_correctness: 0.60 0.65-0.70
- context_recall: 0.82 0.92
- 무컨텍스트율: < 3%
- mean_latency_ms: 9,746ms 4,000ms
- 컨텍스트 예산: 6K tokens/call(이상적으론 3-4K)
6) 실행 로드맵(Phase 1 2)
Phase 1 - 하이브리드 정식화(지금)
- Fusion: Vector + BM25 RRF(Reciprocal Rank Fusion) 융합
- Diversity: Vector Retriever MMR*( 0.5, fetch_k=200, k=50) 적용
- Rerank(선택): 상위 50 cross-encoder re-rank로 최종 top 5~7 만 투입
- 컨텍스트 예산: chunk 300-500token, near-dup 제거, 질의 중심 요약 컨텍스트 6K token/call 가능
성공 게이트(통과 기준)
- context_recall 0.92, 무컨텍스트율 < 3%
- answer_correctness + 5pt 개선 또는 동일 수준에서 컨텍스트 토큰 -40%
- mean_latency_ms 4,000ms
Phase 1은 “검색 파이프라인의 공업화” 단계다. 여기서 기준선을 넘기면 이후 기법이 안정적으로 먹힌다.
Phase 2 - 권장 순서 기반 확장(해당 레포 흐름)
- Foundational: 청크 전략 재설계(semantic/proposition chunking), 인덱싱 품질 점검
- Query Enhancement: Query Transformation / HyDE / Multi-Query로 리콜 보강
- Context Enrichment/Compression: Contextual Header, salient-sentence 추출, 압축으로 **토큰
- Advanced / Iterative-Adapt: Corrective RAG(품질 저하 감지 시 재질의·threshold 완화·k↑), Self-RAG/Adaptive 루프
7) 실험 설계(작게·빨리·정확히)
A/B 매트릭스(권장)
| 축 | A | B | 비고 |
|---|---|---|---|
| Fusion | RRF | CC(가중합) | 작은 검증셋으로 우위 선택 |
| MMR λ | 0.4 | 0.5 / 0.7 | fetch_k=100/200 교차 |
| Rerank | off | on(topN=5/7) | 비용/지연 민감 시 룰 컷오프 대체 |
| 컨텍스트 | 기존 | chunk 400 + dedup + 요약 | 총 컨텍스트 ≤ 6K tok |
측정 지표
- correctness / context_recall / 무컨텍스트율 / mean_latency / 총·평균 토큰 / 호출당 비용
스톱·고정 규칙
- correctness 95% CI 반폭 ≤ 0.05 도달 시 설정 고정
- 동일/우월 성능에서 컨텍스트 토큰 -30% 이상 달성 시 비용 최적화안 고정
8) 계측 & 아티팩트(운영 가시성)
- 타이밍:
retrieve_ms,generate_ms분해 로깅 - 검색 메타:
retrieval_items[{doc_id, score, rank, source}]저장 → Hit@k/MRR@k/nDCG@k 계산 - 사용량/비용: 호출별 토큰·지연·비용 CSV + 모델별 요약(평균 지연/총비용)
- 매니페스트: 질문 세트 고정(
example_id)으로 쌍대 A/B 보장 - 락파일 스냅샷:
uv.lock/pyproject.toml해시 기록 → 재현 가능 실행 보장
9) 즉시 착수 체크리스트(Phase 1)
- RRF/CC, MMR 파라미터 외부화 및 스위치 추가
- Cross-encoder 리랭커 on/off 토글 및 topN(5/7) 실험
- chunk 300–500tok, near-dup 제거, salient 요약 적용
- 컨텍스트 ≤ 6K tok/call 토큰 가드 적용
- retrieve/generate 타이밍 & retrieval_items 로깅
- 매니페스트로 동일 질문 세트 고정 → 쌍대 비교
- 스톱·고정 규칙 적용(정확도 CI, 토큰 절감 기준)