본문 바로가기

AI·LLM 엔지니어링

〈LangChain 기반 RAG 시스템 구축〉 5편: RAG 평가 자동화 + QA 데이터셋 생성

반응형

 

🔥 LangChain 기반 RAG 시스템 구축 

5편. RAG 평가 자동화 + QA 데이터셋 생성 편

(LangChain + Python + LLM·지표 기반 완전 자동화)

RAG 시스템을 만들었다고 끝이 아니다.
“실제로 잘 답하는가?”를 측정하는 정량 평가 체계가 있어야 운영이 가능하다.

이번 편에서는 다음을 전부 자동화한다.

  • QA 데이터셋 생성
  • 평가 파이프라인 구축
  • 지표(Accuracy / Recall / F1 / Faithfulness / Relevance) 계산
  • LangChain + 파이썬 기반 스크립트 예제
  • 운영 중 자동 평가까지 연결하는 방법

 1. RAG 성능 평가가 필요한 이유

RAG는 “검색 → 생성” 두 단계를 거친다.
그래서 문제가 생기면 원인을 찾기 어렵다.

  • 검색이 잘못된 건지
  • 생성 모델이 잘못 답한 건지
  • 프롬프트 구조가 이상한 건지

정량 평가 지표 없이 운영하면 계속 감으로 튜닝하게 된다.

그래서 QA 데이터셋 + 자동 평가 스크립트가 필수다.


 2. QA 데이터셋 생성 전략

2.1. QA 데이터셋은 어떻게 만들어야 하나?

✓ 방법 1: LLM을 활용한 자동 생성(추천)

문서에서 요약 → 질문 생성 → 정답 생성을 자동화한다.

✓ 방법 2: SME(도메인 전문가)와 공동 작업

정확도는 올라가지만 속도가 느리다.

✓ 방법 3: 기존 Q&A 기록 활용(사내 FAQ 등)

운영 중인 Q&A 기록이 있다면 최고의 데이터셋이 된다.


 3. 문서 기반 QA 데이터셋 자동 생성 워크플로우

문서 → 청킹 → 요약 생성 → 질문 생성 → 정답 생성 → JSON 저장

아래는 바로 실행 가능한 코드이다.


🧩 LangChain 기반 QA 생성 코드 예시

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
import json

# 1. 문서 로드
with open("docs/company_policy.txt", "r", encoding="utf-8") as f:
    text = f.read()

# 2. 청킹
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1200,
    chunk_overlap=200
)
chunks = splitter.split_text(text)

llm = ChatOpenAI(model="gpt-4o-mini")

# 3. 프롬프트
prompt = PromptTemplate.from_template("""
다음 문서를 기반으로 질문 3개와 각 질문의 정답을 JSON 배열로 출력하세요.

문서 내용:
{context}

출력 예:
[
    {"question": "...", "answer": "..."},
    ...
]
""")

qa_dataset = []

# 4. 자동 질문/정답 생성
for chunk in chunks:
    res = llm.invoke(prompt.format(context=chunk))
    qa_dataset.extend(json.loads(res.content))

# 5. 저장
with open("qa_dataset.json", "w", encoding="utf-8") as f:
    json.dump(qa_dataset, f, indent=2, ensure_ascii=False)

 4. RAG 평가 지표 설계

RAG 평가는 두 파트로 나뉜다.

4.1. 검색 성능 평가(Recall 중심)

  • Precision@k
  • Recall@k
  • HitRate
  • MMR 점수

4.2. 생성 성능 평가

  • Faithfulness(근거 일치 정도)
  • Relevance(질문과 얼마나 맞는지)
  • Answer Similarity(정답 유사도)

 5. LangChain 기반 RAG 평가 스크립트

Python 코드: 검색 + 생성 평가 자동화

from langchain.evaluation import load_evaluator
from langchain.vectorstores import Chroma
from langchain_openai import ChatOpenAI
import json

# 1. 벡터 DB 로드
db = Chroma(persist_directory="vector_db")
retriever = db.as_retriever(search_kwargs={"k": 3})

# 2. 생성 모델
llm = ChatOpenAI(model="gpt-4o-mini")

# 3. 평가기 로드
faith_eval = load_evaluator("labeled_criteria", criteria="faithfulness")
rel_eval = load_evaluator("labeled_criteria", criteria="relevance")

qa_data = json.load(open("qa_dataset.json", encoding="utf-8"))

results = []

for item in qa_data:
    q = item["question"]
    a = item["answer"]

    docs = retriever.get_relevant_documents(q)
    context = "\n".join([d.page_content for d in docs])

    # 모델 답변 생성
    response = llm.invoke(f"문서 기반으로 답하세요:\n{context}\n\n질문: {q}")

    generated = response.content

    # 평가
    faith_score = faith_eval.evaluate_strings(
        prediction=generated,
        reference=a,
        input=context,
    )

    rel_score = rel_eval.evaluate_strings(
        prediction=generated,
        reference=a
    )

    results.append({
        "question": q,
        "answer": a,
        "generated": generated,
        "faithfulness": faith_score["score"],
        "relevance": rel_score["score"]
    })

# 결과 저장
json.dump(results, open("evaluation_result.json", "w", encoding="utf-8"), indent=2, ensure_ascii=False)

 6. 평가 결과 해석

평가 결과를 보면 다음을 확인할 수 있다.

✔ Faithfulness 낮음 → 검색된 문서가 부족함

검색 파라미터 튜닝 / 임베딩 재생성 필요

✔ Relevance 낮음 → 프롬프트 구조 문제

질문 재작성, 체인 개선

✔ Answer Similarity 낮음 → 모델 자체 한계

더 큰 모델 필요 or 프롬프트 강화


 7. 운영 환경에서 “자동 평가” 연결하기

운영 환경에서는 다음처럼 자동화할 수 있다.

1) 매주 새 문서 업데이트 → 자동 QA 생성

2) 새 QA 데이터로 RAG 평가 자동 수행

3) 점수가 기준치 이하 → 알람 발송

4) 검색 파라미터 / 임베딩 품질 재점검

즉, RAG 시스템을 지속적 평가(CI/CD) 구조로 운영하게 된다.


⭐ 실전 팁 3개

① QA 데이터셋은 최소 200문항 이상 확보

그래야 평가가 흔들리지 않는다.

② 검색 평가와 생성 평가를 분리해서 분석

어디가 문제인지 정확히 알 수 있다.

③ 평가 결과는 매주 자동 리포트로 발송

운영 중 성능 저하를 즉시 발견할 수 있다.


8. 다음 편 예고

5편에서는 RAG 운영의 핵심이라 할 수 있는
QA 데이터 자동 생성 + 성능 평가 자동화 시스템을 구성했다.

다음 편에서는:

📌 6편. RAG 파이프라인 속도 최적화 & 캐싱 전략 편
으로 이어진다.


🔖 추천 태그

RAG, LangChain, QA데이터셋,
LLM평가, RAG평가, 임베딩,
정보검색, AI시스템운영, MLOps,
AIOps, AI엔지니어링, 검색최적화,
문서기반QA, RAG튜닝, RAG자동화


 

반응형