오늘은 RAG(Retrieval-Augmented Generation) 서비스 테스트에 대해 이야기해보려고 합니다. 특히 LangSmith를 활용한 효과적인 테스트 방법에 대해 알아보겠습니다.
RAG 서비스 테스트의 특별한 접근법: LLM-as-a-Judge
RAG(Retrieval-Augmented Generation) 서비스를 테스트할 때, 우리는 일반적인 소프트웨어 테스트와는 다른 접근이 필요합니다. 단순히 '맞다/틀리다'의 이분법적 판단으로는 RAG 시스템의 성능을 제대로 평가하기 어렵습니다. 대신, 우리는 '평가(evaluation)'의 개념으로 접근해야 하며, 이를 위해 'LLM-as-a-Judge' 방식을 활용할 수 있습니다.
LLM-as-a-Judge 개념
LLM-as-a-Judge는 대규모 언어 모델(Large Language Model, LLM)을 활용하여 RAG 시스템의 출력을 평가하는 방식입니다. 이 접근법은 인간 평가자의 주관적 판단을 보완하고, 대규모 평가를 자동화할 수 있는 장점이 있습니다.
LLM-as-a-Judge의 작동 원리
평가 기준 설정: 먼저 RAG 시스템의 출력을 평가할 기준을 명확히 정의합니다. 예를 들어, 정확성, 관련성, 일관성, 유용성 등의 기준을 설정할 수 있습니다.
프롬프트 설계: LLM에게 평가 작업을 지시하는 프롬프트를 설계합니다. 이 프롬프트에는 평가 기준, 점수 체계, 예시 등이 포함됩니다. 예를들어 정확도를 평가하는 LangSmith의 기본 프롬프트는 아래와 같습니다.
You are a teacher grading a quiz.
You are given a question, the context the question is about, and the student's answer. You are asked to score the student's answer as either CORRECT or INCORRECT, based on the context.
Write out in a step by step manner your reasoning to be sure that your conclusion is correct. Avoid simply stating the correct answer at the outset.
Example Format:
QUESTION: question here
CONTEXT: context the question is about here
STUDENT ANSWER: student's answer here
EXPLANATION: step by step reasoning here
GRADE: CORRECT or INCORRECT here
Grade the student answers based ONLY on their factual accuracy. Ignore differences in punctuation and phrasing between the student answer and true answer. It is OK if the student answer contains more information than the true answer, as long as it does not contain any conflicting statements. Begin!
QUESTION:
CONTEXT:
STUDENT ANSWER:
EXPLANATION:
RAG 출력 평가: RAG 시스템이 생성한 응답을 LLM에 입력으로 제공하고, 설계된 프롬프트를 통해 평가를 요청합니다.
결과 분석: LLM이 제공한 평가 결과를 수집하고 분석합니다. 이를 통해 RAG 시스템의 성능을 다각도로 파악할 수 있습니다.
LLM-as-a-Judge의 장점
객관성: 일관된 기준으로 대량의 응답을 평가할 수 있습니다.
효율성: 인간 평가자에 비해 빠르게 대규모 평가를 수행할 수 있습니다.
다양한 관점: 다양한 평가 기준을 동시에 적용할 수 있어, 종합적인 성능 평가가 가능합니다.
세밀한 피드백: 단순한 점수뿐만 아니라, 개선점에 대한 구체적인 피드백도 얻을 수 있습니다.
LangSmith와 LLM-as-a-Judge의 결합
LangSmith 플랫폼은 LLM-as-a-Judge 방식을 쉽게 구현할 수 있는 환경을 제공합니다. LangSmith를 통해 다음과 같은 작업을 수행할 수 있습니다:
평가 워크플로우 설정: LLM-as-a-Judge 프로세스를 자동화된 워크플로우로 설정할 수 있습니다.
커스텀 평가자 구현: LangSmith의 API를 활용하여 LLM 기반의 커스텀 평가자를 구현할 수 있습니다.
결과 시각화: 평가 결과를 그래프, 차트 등으로 시각화하여 직관적으로 분석할 수 있습니다.
버전 관리: 다양한 버전의 RAG 시스템을 비교 평가하고, 성능 변화를 추적할 수 있습니다.
LangSmith 소개
LangSmith는 LangChain에서 제공하는 강력한 개발 및 평가 플랫폼입니다. 이 도구는 RAG 시스템을 포함한 다양한 언어 모델 애플리케이션의 개발, 테스트, 평가, 모니터링을 위해 설계되었습니다.
주요 특징:
- 상세한 실행 추적
- 다양한 평가 메트릭 제공
- 데이터셋 관리 기능
- 협업 도구
LangSmith 사용 방법
1. 설정 및 연동
먼저 LangSmith 계정을 만들고, API 키를 발급받습니다. 그 후 아래와 같이 Python 환경에서 LangSmith를 설정합니다.
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key-here"
2. RAG 파이프라인 구축
LangChain을 사용하여 RAG 파이프라인을 구축합니다. 이 과정에서 LangSmith는 자동으로 각 단계를 추적합니다.
3. 데이터셋 생성
LangSmith 웹 인터페이스나 API를 통해 테스트용 데이터셋을 생성합니다. 이 데이터셋은 다양한 질문과 예상 답변을 포함해야 합니다.
실질적으로 평가를 진행할 땐 질문과 답변을 설정하는 데이터셋 영역이 가장 중요하다고 볼 수 있습니다. 어떤 질문을 평가할 것인가와 질문의 모범 답안을 정하는 것이 평가 퀄리티를 결정합니다.
4. 평가 실행
from langsmith import Client, evaluate
client = Client()
dataset = client.create_dataset("RAG 평가 데이터셋")
for question, expected_answer in test_data:
client.create_example(
inputs={"question": question},
outputs={"answer": expected_answer},
dataset_id=dataset.id
)
# 평가 실행
experiment_result = evaluate(
self.agent.run,
data="RAG 평가 데이터셋",
evaluators=[{평가 Agent}],
metadata={"":"", ...},
...,
)
5. 결과 분석
LangSmith 대시보드에서 평가 결과를 확인하고 분석합니다. 정확성, 관련성, 응답 시간 등 다양한 메트릭을 검토할 수 있습니다.
결론
RAG 서비스의 결과물은 일률적이지 않고 다양하게 생성되기 때문에 사람이 직접 결과물을 판단하기에는 한계가 있습니다. 서비스에서 도출되는 결과물을 계속해서 확인하기 어렵기 때문이죠. 이런 작업을 대량으로 확인하고 평가해야하기 때문에 RAG 서비스는 LLM을 이용해 평가하며 이 작업을 자동화하여 대량으로 서비스의 결과물을 확인해야합니다.LangSmith는 이 과정을 보다 쉽게 적용할 수 있도록 도와주며 대시보드와 같이 시각화를 해줄 수 있습니다. 무료 플랜도 있기 때문에 RAG서비스를 도입하는 곳에서 시도해보기 좋은 툴이라고 생각됩니다.
'AI' 카테고리의 다른 글
LangChain을 이용한 RAG 서비스 개발 (1) | 2024.11.04 |
---|---|
LLM과 성능향상 방법 (3) | 2024.10.28 |