LangChain 테스트코드를 위한 Fake LLM

034179·2024년 12월 22일

개요

LangChain의 Fake LLM 클래스를 활용하여 실제 언어 모델 호출 없이 테스트 환경을 구축하는 방법을 소개합니다.
이를 통해 LangChain 기반 애플리케이션 개발 과정에서 비용을 절감하고, 체인 로직의 안정성을 효과적으로 검증할 수 있습니다.


Fake LLM이란?

Fake LLM은 실제 언어 모델을 호출하지 않고, 미리 정의된 응답을 반환하도록 설계된 테스트용 언어 모델입니다. 이를 활용하면 아래와 같은 이점과 제한점을 확인할 수 있습니다:

장점

  • LangChain 체인 로직, 프롬프트 작성, 데이터 결합 로직 등이 제대로 동작하는지 확인 가능.
  • OpenAI와 같은 실제 LLM 호출 없이 테스트를 수행하므로 비용 절감.
  • 서비스 로직에서 LLM 호출의 동작 검증 가능.

제한점

  • Fake LLM은 LangChain의 체인 로직을 테스트할 수 있지만, 체인의 내부 로직(예: 프롬프트 결합, 문서 검색 등)은 테스트 대상에서 제외.
  • 실제 LLM의 동작을 완벽히 대체하지 못하며, 구조적 검증만 가능.

Fake LLM 적용 예제

개발 환경에서 Fake LLM 활용

개발 환경에서는 Fake LLM을 사용하고, 배포 환경에서는 실제 OpenAI API가 호출되도록 설정합니다.

이를 통해
1. 서비스 개발 단계에서 OpenAI API 사용 비용을 절감할 수 있습니다.
2. LangChain 기반 RAG(Retrieval-Augmented Generation) 구조 개선 시 기존 API 동작을 검증할 수 있습니다.

Fake LLM을 활용한 코드 예제

  • LLM 설정 함수
    환경 변수에 따라 Fake LLM과 실제 LLM을 반환하도록 구성된 함수입니다.
from langchain_community.llms.fake import FakeListLLM
from ..tools.generators.llm import get_OPENAI_llm
import json
import os

def get_llm():
    env = os.getenv("ENV", "production")
    if env == "development":
        # Fake LLM 생성 및 반환
        responses = json.loads(os.getenv("FAKE_LLM_RESPONSES"))
        return FakeListLLM(responses=responses)
    elif env == "production":
        # 실제 OpenAI API LLM 반환
        return get_OPENAI_llm(model="gpt-4o-mini", temperature=0.7)
    else:
        raise ValueError("Invalid ENV value. Must be 'development' or 'production'.")
  • 환경 변수 설정 예시
    .env 파일에 Fake LLM의 응답 데이터를 정의합니다:
FAKE_LLM_RESPONSES=[
    {"answer": "This is a fake response", "context": ["Fake context"]}
]
  • LLM 호출 예제
    환경에 따라 적절한 LLM을 호출합니다.
# 개발 환경에서는 Fake LLM을 사용
llm = get_llm()

# 배포 환경에서는 실제 OpenAI LLM 호출
llm = get_OPENAI_llm(model="gpt-4o-mini", temperature=0.7)

Fake LLM의 한계점

Fake LLM은 미리 정의된 응답을 반환하는 단순한 테스트 도구입니다. 이는 실제 LLM의 성능을 평가하거나 복잡한 데이터 처리를 검증하는 데는 적합하지 않습니다.

따라서 다음 사항을 염두에 두어야 합니다:

  • Fake LLM은 실제 모델의 응답과 동일한 형식으로 설정되어야 합니다.
  • 테스트 결과는 실제 LLM과 상이할 수 있습니다.
  • 복잡한 체인 로직이나 문맥 기반 결과를 평가할 때는 실제 LLM을 호출하는 테스트가 필요합니다.

0개의 댓글