DeepEval
DeepEval (DeepEval)
DeepEval은 Confident AI가 만든 LLM 시스템 테스트용 오픈소스 프레임워크예요. Pytest가 코드를 테스트한다면, DeepEval은 LLM 출력을 테스트한다고 생각하면 돼요. G-Eval, 환각(hallucination), 답변 관련성(answer relevancy) 같은 지표를 평가해요.
DeepEval은 Qdrant와 통합해서 RAG 파이프라인을 평가할 수 있어요. 벡터 검색으로 가져온 문맥을 바탕으로 LLM 애플리케이션이 관련성 있고, 근거가 있고, 충실한 답변을 내는지 확인하는 데 써요.
동작 방식 (How it works)
DeepEval에서 테스트 케이스(test case)는 LLM 출력을 유닛 테스트하기 위한 설계도(blueprint)예요. DeepEval에는 두 종류의 테스트 케이스가 있어요.
LLMTestCase — 하나의 입력-출력 쌍을 평가할 때 써요. RAG 응답이나 에이전트의 행동이 대표적이에요.
ConversationalTestCase — LLM 시스템과의 주고받는 대화처럼 LLMTestCase 턴들의 연속을 나타내요. 챗봇이나 어시스턴트를 테스트할 때 특히 유용해요.
지표 개요 (Metrics Overview)
DeepEval은 LLM 출력의 다양한 측면을 평가하는 지표 묶음을 제공해요.
- Answer Relevancy — LLM 출력이 주어진 입력 쿼리에 얼마나 관련 있는지 측정해요.
- Faithfulness — LLM 응답이 제공된 문맥에 근거하고 있는지 평가해서 사실적 정확도를 확인해요.
- Contextual Precision — 가장 관련 있는 문맥 조각이 덜 관련 있는 조각보다 더 높게 순위가 매겨졌는지 판단해요.
- G-Eval — LLM-as-a-judge와 chain-of-thought 추론을 결합해, 커스텀 기준에 따라 출력을 평가하는 다재다능한 지표예요.
- Hallucination — LLM이 출처 문맥에 없는 정보를 생성하는 사례를 탐지해요.
- Toxicity — 해롭거나 공격적인 콘텐츠가 출력에 있는지 평가해요.
- Bias — 출력에 의도하지 않은 편향이 있는지 평가해요.
- Summarization — 생성된 요약의 품질과 정확도를 측정해요.
사용 가능한 모든 지표의 전체 목록과 자세한 설명은 DeepEval metrics reference를 참고해요. (원문이 명시적 URL 없이 "DeepEval metrics reference"로만 언급하고 있어요 — 확인 필요)
Qdrant와 DeepEval 사용하기
클라이언트 라이브러리를 설치해요.
$ pip install deepeval qdrant-client
$ deepeval login
Qdrant로 RAG 시스템을 구성하고, 쿼리에 관련 문서를 검색해 프롬프트에 넣은 뒤 DeepEval로 생성 결과를 평가하는 흐름이에요.
from deepeval.test_case import LLMTestCase, ConversationalTestCase
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric, ...
# 1. Query context from Qdrant
context = qdrant_client.query_points(...)
# 2. Construct prompt using query + retrieved context
prompt = build_prompt(query, context)
# 3. Generate response from your LLM
response = llm.generate(prompt)
# 4. Create a test case for evaluation
test_case = LLMTestCase(
input=query,
actual_output=response,
expected_output=ground_truth_answer,
retrieval_context=context
)
# 5. Evaluate the output using DeepEval
evaluate(
test_cases=[test_case],
metrics=[
AnswerRelevancyMetric(),
FaithfulnessMetric(),
ContextualPrecisionMetric(),
...
],
)
흐름을 정리하면 이래요. Qdrant에서 검색한 문맥(context)으로 LLMTestCase를 만들고, 그 안에 입력 쿼리, 실제 출력, 기대 출력, 그리고 retrieval_context(검색 문맥)를 담아요. 마지막으로 evaluate()에 지표들을 넘겨 각 측면을 평가해요. retrieval_context에 Qdrant에서 가져온 실제 문맥을 넣는 것이 faithfulness나 hallucination 같은 지표가 정확히 동작하는 핵심이에요.