AIRAGLLMProduction

RAG 서비스 만들었는데 그래서 이제 뭐함_

·12 min read

서비스 만들었다고 개발이 끝나는건 아니다.

만들어진 성능에 대해서 테스트를 하고 검증을 해야하기 때문이다.

근데 난 그걸 발표전까지 안했다.(바빴다)

RAG에 대한 평가를 어떻게 할 것인가에 대해서 잘 모르기도 했다.

실제 내용을 기준으로 했는가를 어떻게 검수해야하는가,

직접하긴 귀찮은데 라는 생각이 있었기 때문이다.

[사용자 질문] 뭐먹지?

[참조 컨테스트] 사용자는 스테이크를 좋아한다.

[AI 답변] 샐러드 드세요

아무튼 이미 누군가 고민을 했을테니 라이브러리를 만들어두지 않았을까 찾아봤다.

RAGAS

https://docs.ragas.io/en/stable/

체계적인 평가 루프를 만들기 위한 라이브러리다.

RAG 시스템 만들고 답변 보면서 "음 괜찮네"라는 주관적인 평가를 객관화 시키기 위한 것이다.

사람도 주관적으로 느끼는데 어떻게 객관화 시키는지에 대해서는 차차 알아보자

주요 기능

RAGAS에서 제공하는 것은 단순히 일회성 테스트가 아닌 장기적 테스트 워크플로우다.

실행 우선 접근 방식이라 해서, Make Changes -> Run Evaluations -> Observe results로

변경이 발생하면 평가를 진행하고 결과를 관찰하는 과정을 반복한다.

평가 기준에 대해서도 기본적으로 제공하는 표준 지표 외에도 사용자 비즈니스 로직에 특화된 지표를 만들 수 있다.

주요 컨셉

RAGAS는 4가지 핵심 개념을 가지고 있다.

Experimentation(실험)

직관의 영역을 데이터 영역으로 전환시키는 개념이다.

실험 체계를 만들고 AI를 체계적으로 평가하는 방법들이다.

변경 사항을 추적하고 개선 사항을 측정하는 방식으로 버전 관리 체계를 만들어낸다.

Datasets 데이터셋

평가 데이터셋을 만들고, 관리하고, 사용하는 방법을 다루는 영역이다.

데이터셋 구조, 저장 백엔드를 정의하고

테스트 데이터를 유지하는 방식을 논의한다.

Ragas Metrics(Ragas 지표)

텍스트 생성 품질을 수치화하는 Scoring Function이 모여있다.

기존에 만들어진 지표를 사용해도 되고, 맞춤 지표를 만들 수 있다.

Test Data Generation(테스트 데이터 생성)

사람이 직접 만들기 어려운 평가 데이터를 원본 문서로부터 자동 생성하는 모듈이다.

실험

실험이란 테스트를 위해 애플리케이션을 의도적으로 변경하는 것이다.

예를 들어 RAG 시스템에서는 검색 모듈을 변경해서 새로운 임베딩 모델이 응답에 어떤 영향을 미치는지 평가 가능하다.

좋은 실험에는 몇가지 원칙이 있다.

측정 가능한 지표 정의하기: 정확도, 정밀도, 재현율 같은거

결과 저장 시스템화: 결과를 비교하고 추적하기 쉽도록 체계적으로 저장해두기

변경사항 분리: 한번에 하나의 변경 사항만 적용해서 혼란을 피하기

반복적 절차: 변경 -> 평가 -> 관찰의 구조화된 접근 방법을 따르기

실험을 위해서는 먼저 테스트 데이터 세트, 애플리케이션(모델), 성능 평가용 메트릭을 준비해야한다.

구성요소가 준비되면 다음의 실행 프로세스를 거친다.

Setup: 실험 매개변수 정의 및 테스트 데이터셋 로드

Run: 데이터셋의 각 샘플로 애플리케이션(모델) 실행

Evaluate: 성능 측정을 위해 메트릭 적용

Store: 분석 및 비교를 위해 결과를 저장

실험은 @experiment 데코레이터를 통해 진행이 가능하다.

배움일기 라인 박살나는걸 원하지는 않기에 소스코드는 생략한다.

데이터셋과 실험 결과

AI 시스템 평가시에 일반적으로 평가 데이터셋, 평가 결과 두 가지 데이터를 사용한다.

평가 데이터셋에는 기본적으로 시스템이 처리할 입력과

선택 사항으로 예상 출력과 메타데이터를 포함시킬 수 있다.

이 중 메타데이터는 데이터셋 분할 및 분석에 유용하고,

복잡한 질의의 비교나 다양한 환경에서 조건을 줄 떄 유용하다.

예를 들어 난이도나 주제 같은 항목이 있으면 특정 난이도에서 어려운 난이도에서 처리 성능이나, 범률 금융 등의 주제에 대한 평가를 분석할 수 있다.

실험 결과는 일반적으로 다음의 항목을 포함한다.

데이터셋의 모든 속성, 평가된 시스템의 응답, Metrics 지표의 결과, 선택적 메타데이터

Ragas에서 데이터셋을 사용하는 방법

Ragas에서는 Dataset이라는 클래스를 기준으로 데이터셋 호출이 가능하다

Dataset 구조는 유연하게 변경이 가능하고 일반적으로는 다음 항목을 포함한다.

  • id: 샘플 구분용

  • query 또는 input: 입력

  • expected_output 또는 ground_truth: 예상되는 응답으로 선택항목이다.

  • metadata: 샘플에 대한 추가 정보

데이터셋 생성에 대해서도 권장사항이 있다.

표현적인 샘플: AI 시스템이 마주하게 될 실제 시나리오 반영

균형 잡힌 분포: 가급적 다양한 난이도 수준, 주제, 경계 사례에 걸쳐 샘플을 포함

질보단 양: 데이터는 많을 수록 좋음

메타데이터 풍부: 해당 데이터는 표현이 다양할수록 다양한 분석이 가능

버전 관리: 데이터셋 변경 사항을 추적 가능하도록 해서 재현성 보장

지표 개요

측정하지 않은 것이나 주관적인 것은 개선할 수 없다.

그렇기에 지표는 반복을 가능하게 만든다.

지표 유형
End-to-End Metrics

사용자 관점에서 느끼는 서비스의 품질을 측정한다.

AI 시스템을 블랙 박스로 취급하고,

최종 출력에만 기반해서 결과를 평가하는 지표다.

예시로는 답변 정확성과 참조 정확성이 있다.

답변 정확성: 답변이 정답과 일치하는가?

참조 정확성: 답변에 달린 출처 각주가 정확한가?

Component-Level Metrics

디버깅과 같은 개발자 관점으로 구성 요소를 독립적으로 평가하는 방식이다.

예시로는 검색 정확도가 있으며,

관련 정보를 얼마나 효과적으로 검색하는지 측정해서 검색 모듈에 대한 품질을 측정하는 방식이다.

Business Metrics

실제 서비스가 제공하는 비즈니스 영역과 관련되어 있다.

기술적 성능이 사업 성과로 이어지는지 확인하듯이,

예를들어 AI 챗봇으로 일반적인 요청을 인간 삼당원에게 안넘기고 자체적으로 처리한 비율 등이 있다.

지표 설계 원칙

효과적인 지표를 설계하기 위해서는 신뢰성, 해석 가능성, 관련성을 보장해야한다.

ragas에서는 지표를 설계할 때 5가지 주요 원칙을 따른다.

Single-Aspect Focus: 하나의 지표는 오직 한 가지 측면만 측정

Intutive and Interpretable: 직관적이고 해석 가능한 지표는 이해하고 해석하기 쉽게 설계(왜 그렇게 나왔는가 설명이 가능해야함)

Effective Prompt Flows: 복잡한 작업을 특정 프롬프트로 더 작은 하위 작업으로 분해

Robustness: LLM 기반 지표는 기대되는 결과를 반영하는 충분한 few 샷 예제를 포함해야함

Consistent Scoring Ranges: 지표 점수 값은 정규화 되거나 특정 범위 내에 있어야 함

Ragas에서 제공되는 다양한 지표들은 아래에서 확인하자(너무 많다)

https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/

이상적인 테스트 데이터셋의 특징

AI에 기본이 데이터이듯이 테스트의 꽃 또한 테스트 데이터셋이다.

이상적인 테스트 데이터셋는 다음의 특징을 가지고 있다.

  • 고품질 데이터 샘플을 포함함

  • 실제 세계에서 관찰 가능한 시나리오를 다룸

  • 통계적으로 유의미한 결론을 도출할 만큼 충분한 수의 샘플을 포함함

  • 데이터를 지속적으로 업데이트함(drift 방지)

나머지는 직접 해보자

일단 아직 실구현 테스트 단계까지는 가지 못해서

오늘은 공식 문서에 개념 정리로만 하고 끝내겠다.

RAG 테스트에 대한 개념과 사용이 궁금하다면 직접 해보자.

← Previous
구글 TPU랑 엔비디아
Next →
메타의 AI 전략