번역 자료 / / 2025. 5. 19. 12:49

RAG 애플리케이션 평가하기(Evaluate a RAG application)

주요 개념

  • RAG 평가 | 평가자(Evaluators) | LLM-as-judge 평가자

Retrieval Augmented Generation(RAG)은 대형 언어 모델(LLM)에 외부의 관련 지식을 제공하여 성능을 향상시키는 기법입니다.
RAG는 LLM 애플리케이션을 구축할 때 가장 널리 사용되는 접근법 중 하나입니다.

이 튜토리얼에서는 LangSmith를 사용해 RAG 애플리케이션을 평가하는 방법을 안내합니다.
다음 내용을 배울 수 있습니다.

  1. 테스트 데이터셋 생성 방법
  2. 해당 데이터셋에서 RAG 애플리케이션 실행 방법
  3. 다양한 평가 지표로 애플리케이션 성능 측정 방법

개요(Overview)

일반적인 RAG 평가 워크플로우는 세 단계로 구성됩니다.

  1. 질문과 기대 답변이 포함된 데이터셋 생성
  2. 해당 질문에 대해 RAG 애플리케이션 실행
  3. 평가자를 사용해 애플리케이션의 성능 측정
    • 답변의 관련성(Answer relevance)
    • 답변의 정확성(Answer accuracy)
    • 검색 품질(Retrieval quality) 등

이 튜토리얼에서는 Lilian Weng의 블로그 글을 대상으로 질문에 답하는 챗봇을 만들고 평가합니다.


환경 설정(Setup)

환경 변수

Python

import os

os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = "YOUR LANGSMITH API KEY"
os.environ["OPENAI_API_KEY"] = "YOUR OPENAI API KEY"

TypeScript

process.env.LANGSMITH_TRACING = "true";
process.env.LANGSMITH_API_KEY = "YOUR LANGSMITH API KEY";
process.env.OPENAI_API_KEY = "YOUR OPENAI API KEY";

의존성 설치

Python

pip install -U langsmith langchain[openai] langchain-community

TypeScript

yarn add langsmith langchain @langchain/community @langchain/openai

애플리케이션(Application)

프레임워크 유연성
이 튜토리얼은 LangChain을 사용하지만, 여기서 소개하는 평가 기법과 LangSmith 기능은 어떤 프레임워크와도 사용할 수 있습니다.

인덱싱 및 검색(Indexing and retrieval)

  • 블로그 글을 불러와 벡터스토어에 인덱싱
  • 질문에 따라 관련 문서 조각을 검색
  • 질문과 검색된 문서를 LLM에 전달하여 답변 생성

Python 예시

from langchain_community.document_loaders import WebBaseLoader
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

urls = [
    "https://lilianweng.github.io/posts/2023-06-23-agent/",
    "https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/",
    "https://lilianweng.github.io/posts/2023-10-25-adv-attack-llm/",
]

docs = [WebBaseLoader(url).load() for url in urls]
docs_list = [item for sublist in docs for item in sublist]

text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=250, chunk_overlap=0
)
doc_splits = text_splitter.split_documents(docs_list)

vectorstore = InMemoryVectorStore.from_documents(
    documents=doc_splits,
    embedding=OpenAIEmbeddings(),
)

retriever = vectorstore.as_retriever(k=6)

데이터셋(Dataset)

  • 질문과 기대 답변 쌍으로 구성된 데이터셋을 생성합니다.
  • 예시: Lilian Weng 블로그 관련 Q&A

평가자(Evaluators)

RAG 평가에서는 다양한 관점에서 평가할 수 있습니다.

  • 정확성(Correctness): 생성된 답변 vs 기준 답변
  • 관련성(Relevance): 생성된 답변 vs 입력 질문
  • 근거성(Groundedness): 생성된 답변 vs 검색된 문서
  • 검색 관련성(Retrieval relevance): 검색된 문서 vs 입력 질문

각 평가자는 LLM을 활용한 자동화된 평가(LLM-as-judge)로 구현할 수 있습니다.


평가 실행(Run evaluation)

  • 정의한 평가자와 데이터셋, RAG 애플리케이션을 연결하여 평가를 실행합니다.
  • 평가 결과는 LangSmith UI에서 확인할 수 있습니다.

참고 코드(Reference code)

전체 예제 코드는 공식 문서에서 확인하실 수 있습니다.


이 번역은 [Cursor 웹사이트 번역 가이드]의 규칙을 준수하여 작성되었습니다.


참고:

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유