품질 지표가 포착하지 못한 실패: Vicquant의 라우터 테스트
요약
본 글은 Vicquant이라는 금융 AI 시스템의 라우터(쿼리 라우터) 테스트 결과를 다룹니다. 기존 품질 지표는 RAG 경로에서의 성능만 측정할 뿐, 질문이 올바른 경로로 전달되는지 여부를 포착하지 못하는 사각지대가 있었습니다. 글쓴이는 문서 기반 질문이 실수로 채팅 경로로 빠지는 비율을 추적하는 새로운 지표를 추가하여 라우터의 정확성을 개선했습니다.
핵심 포인트
- 기존 테스트는 RAG 성능만 측정할 뿐, 라우팅 오류(사각지대)를 놓쳤습니다.
- 문서 기반 질문은 확신이 없을 때 무조건 RAG 경로로 보내야 합니다.
- 새로운 지표로 '실수 라우팅 비율'을 추적하여 시스템의 안정성을 높였습니다.
이 문제는 독자 중 한 분이 저에게 알려주셔서 알게 되었습니다. 그분은 제가 라우터 경로를 확인해 보라고 말씀해주셨습니다.
시간을 들여 읽고, 제안을 남겨주시고, 제가 올바른 방향으로 나아갈 수 있도록 교정해주시는 독자 여러분께 진심으로 감사드립니다. 모두 감사합니다...
Vicquant이 금융 질문에 답하는 방식의 요약
Vicquant은 금융 질문에 답변하기 위해 두 가지 경로를 가지고 있습니다:
- RAG 경로 (rag_vault): 사용자가 업로드한 문서(예: 401(k) 명세서 또는 세금 요약)를 검색하고 정확한 출처를 인용합니다.
- 채팅 경로 (fast_chat): 모델의 일반적인 금융 학습 데이터로부터 답변을 제공합니다.
이 두 경로 중 어느 곳으로 들어오는 질문을 보낼지 결정하는 것이 작은 분류 휴리스틱(쿼리 라우터)입니다.
저는 25개의 골든 질문에 대해 네 가지 지표(충실도 및 컨텍스트 리콜 포함)로 품질 테스트를 수행했습니다. 이 모든 질문은 RAG 경로로 직접 들어갔습니다. 따라서 그 네 개의 수치는 질문이 이미 거기에 도착한 후에만 RAG만을 설명합니다. 라우터가 올바른 경로를 선택했는지에 대해서는 아무것도 말해주지 못했습니다.
그것이 사각지대였습니다. 제가 마침내 라우터를 감사해보니, 20개의 문서 기반 질문 중 18개가 아예 문서 볼트(document vault)에 도달하지 못한 것을 발견했습니다.
이것이 중요한 이유
사용자가 자신의 401(k) 명세서를 업로드하고
실패 비용이 완전히 한쪽으로 치우쳐 있기 때문에, 라우터는 검색(retrieval) 쪽으로 크게 기울어져야 합니다. 확신할 수 없을 때는 질문을 RAG로 보내야 합니다.
추가한 지표 (The Metric I Added)
지연 시간 벤치마크와 더불어, 저는 다음을 추적합니다:
문서 기반 문의 중 실수로 채팅 경로(chat path)로 라우팅되는 비율.
또한 역방향(일반 문의가 RAG로 라우팅되는 경우)도 추적하여 엔지니어링 트레이드오프가 투명하게 유지되도록 합니다.
테스트 실행 방법 (How the Check Was Run)
-
클린 벤치마크 세트: 40개의 질문(샘플 401(k) 명세서에 대한 문서 기반 문의 20개와 일반 개인 재정 질문 20개).
-
사전 레이블링 (Pre-Labelled): 벤치마크를 실행하기 전에 모든 질문의 예상 경로가 확정되었습니다.
-
자동화된 End-to-End 실행: 테스트 사용자가 샘플 문서를 업로드하고, 각 질의를 API를 통해 전송하며, 스트리밍 응답 메타데이터에서 직접 이동한 경로를 기록했습니다.
기준선 결과 (Baseline Results) (수정 전)
수정이 이루어지기 전의 결과입니다;
왜 문서 질문 18개가 볼트(Vault)를 놓쳤을까요?
-
개인 소유 대명사(Personal Possessive Pronouns) 누락 (8건): '제 고용주는 어떤 공식을 사용하나요?' 또는 '주된 수혜자로 누구가 기재되어 있나요?'와 같은 질문에서 개인 참조어('제 고용주', '제 잔액')를 일반 키워드가 아닌 방식으로 사용했습니다. 라우터는 이를 일반적인 대화 채팅으로 오인했습니다.
-
문서 명사 누락 (4건): '명세서(the statement)' 또는 '제 플랜 요약(my plan summary)'을 참조하는 질문들은 기존 키워드 목록에서 정확한 토큰 매칭이 부족했습니다.
-
미인식 플랜 용어 (6건): 운영상의 혜택 관련 용어('점진적 베스팅 일정(graded vesting schedule)', '재직 중 롤오버(in-service rollover)', '플랜 대출 개설 수수료(plan loan origination fee)')에 대한 휴리스틱 트리거가 없었습니다.
개선 사항: 기본값으로 검색 (Retrieval by Default)
'명시적인 키워드가 일치할 경우에만 RAG로 전송'하는 대신, 아키텍처는 '기본적으로 검색(retrieval by default)' 방식으로 전환되었습니다:
-
쿼리는 오직 명백하고 긍정적인 일반 금융 신호('복리 이자는 어떻게 작동하나요?' 또는 '50/30/20 예산은 무엇인가요?')와 일치할 경우에만 fast_chat으로 전송됩니다.
-
모호하거나, 경계선상에 있거나, 대명사로 기반한 질문은 자동으로 rag_vault로 기본 설정되었습니다.
-
사용자가 문서를 업로드하지 않은 경우, 밀리초 단위의 검색 확인은 0개의 일치하는 청크를 반환하며, 파이프라인은 실패하거나 빈 컨텍스트를 주입하지 않고 표준 답변을 우아하게 스트리밍합니다.
비교 및 개선: 두 세트 전반 검증 (Before and After: Validation Across Two Sets)
세트 1: 벤치마크 세트 (40개 질문)
세트 2: 신규 평가 세트 (30개 미확인 질문, 독립적이지 않음으로 표시)
새로운 구문에 대한 일반화 가능성을 테스트하기 위해, 두 번째로 30개의 질문(문서 기반 15개, 일반 15개) 세트를 한 번의 조정 없이 실행했습니다:
(참고: 15개 문항 샘플의 경우, 0개의 오답은 실제 오답률이 약 ~20%를 넘지 않는다는 것을 통계적으로 배제합니다. 더 큰 지속적인 테스트 코퍼스는 이 신뢰 구간을 좁힐 것입니다.)
폴백(Fallback)의 비용
-
로컬 컴퓨트: 무시할 만함. 로컬 하이브리드 BM25 및 벡터 검색은 평균 계산 시간으로 13.8ms가 소요됩니다.
-
컨텍스트 오버헤드: 폴백 질문 하나는 약 400개의 추가 검색 컨텍스트 토큰을 발생시키며, OpenRouter에서 대략 +$0.000015 USD의 비용이 발생합니다.
-
비대칭적 트레이드오프(Asymmetric Trade-Off): 모호한 일반 문의의 73%를 RAG 파이프라인을 통해 보내는 것은 의도적인 설계 선택입니다. 계산 시간 14ms와 소액의 비용을 지불하는 것이, 참가자의 은퇴 관련 질문이 그 진술 내용을 볼 수 없는 채팅 모델에 도달하도록 허용하는 것보다 비교할 수 없을 만큼 좋습니다.
제가 배운 점
품질 지표는 자신이 통과하는 것만 측정합니다.
저의 네 가지 RAG 평가 점수는 수학적으로 건전했지만, 파이프라인 시작 전에 실패가 발생했기 때문에 가장 위험한 실패 모드를 완전히 간과했습니다.
AI 시스템에 라우터(router), 분류기(classifier) 또는 의도 게이트(intent gate)가 RAG 파이프라인 앞에 서 있다면, 먼저 이 게이트를 평가하고 사용자에게 실제로 얼마의 비용을 발생시키는지에 따라 오류 가중치를 부여해야 합니다.
여가 시간에 vicquant(현재 베타 테스트 단계입니다)를 확인해 주시면 감사하겠습니다. 제가 도움을 필요로 하는 모든 것이니 피드백을 보내주세요. 그래야 개선하여 더 잘 작동하도록 만들 수 있습니다.
링크: https://budget-planner-advisor-rho.vercel.app/
감사합니다!
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기


