주요 개념
- RAG 평가 | 평가자(Evaluators) | LLM-as-judge 평가자
Retrieval Augmented Generation(RAG)은 대형 언어 모델(LLM)에 외부의 관련 지식을 제공하여 성능을 향상시키는 기법입니다.
RAG는 LLM 애플리케이션을 구축할 때 가장 널리 사용되는 접근법 중 하나입니다.
이 튜토리얼에서는 LangSmith를 사용해 RAG 애플리케이션을 평가하는 방법을 안내합니다.
다음 내용을 배울 수 있습니다.
- 테스트 데이터셋 생성 방법
- 해당 데이터셋에서 RAG 애플리케이션 실행 방법
- 다양한 평가 지표로 애플리케이션 성능 측정 방법
개요(Overview)
일반적인 RAG 평가 워크플로우는 세 단계로 구성됩니다.
- 질문과 기대 답변이 포함된 데이터셋 생성
- 해당 질문에 대해 RAG 애플리케이션 실행
- 평가자를 사용해 애플리케이션의 성능 측정
- 답변의 관련성(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 웹사이트 번역 가이드]의 규칙을 준수하여 작성되었습니다.
참고:
반응형