3.7. 열거형 출력 파서 (EnumOutputParser)

LangChain에서 날짜와 시간 데이터를 처리하는 데 유용한 도구 중 하나가 DatetimeOutputParser입니다. 이 파서는 언어 모델의 출력을 구조화된 날짜 및 시간 형식으로 EnumOutputParser는 LangChain 프레임워크에서 제공하는 출력 파서(output parser) 중 하나로, 언어 모델의 출력을 미리 정의된 열거형(enum) 값으로 변환하는 데 사용됩니다. 이를 통해 모델의 응답을 구조화하고, 특정 옵션 집합으로 제한된 결과를 얻을 수 있습니다. 주로 모델이 반환하는 텍스트를 애플리케이션에서 더 쉽게 처리할 수 있도록 파싱하는 데 유용합니다.

주요 특징

  • 열거형(Enum) 기반 파싱: EnumOutputParser는 Python의 enum 모듈을 사용해 정의된 열거형 값 중 하나로 출력을 매핑합니다.
  • 구조화된 출력: 모델의 자유로운 텍스트 응답을 특정 값으로 제한하여 일관성을 보장합니다.
  • 예외 처리: 정의되지 않은 값이 입력되면 오류를 발생시켜 잘못된 출력을 감지할 수 있습니다.

사용 방법

  1. 열거형 정의: 먼저 Python에서 Enum 클래스를 사용해 가능한 출력 값을 정의합니다.
  2. 파서 설정: EnumOutputParser를 초기화할 때 정의한 열거형을 전달합니다.
  3. 출력 파싱: 언어 모델의 응답을 파서에 전달하여 열거형 값으로 변환합니다.

예제

enum 모듈을 사용하여 Colors 클래스를 정의하고, Colors 클래스는 Enum을 상속받으며, RED, GREEN, BLUE 세 가지 색상 값을 가지는 예시입니다.

1) 열거형 클래스 정의

from enum import Enum
class Colors(Enum):
   RED = "빨간색"
   GREEN = "초록색"
   BLUE = "파란색"

from langchain.output_parsers.enum import EnumOutputParser

# EnumOutputParser 인스턴스 생성
parser = EnumOutputParser(enum=Colors)

from langchain_core.prompts import PromptTemplate

# 프롬프트 템플릿을 생성합니다.
prompt = PromptTemplate.from_template(
   """다음의 물체는 어떤 색깔인가요? 응답에는 주석이나 추가 텍스트는 포함시키지 마세요.
Object: {object}
Instructions: {instructions}"""
   # 파서에서 지시사항 형식을 가져와 부분적으로 적용합니다.
).partial(instructions=parser.get_format_instructions())

from langchain_ollama import OllamaLLM
llm_model = OllamaLLM(model="exaone3.5")

# 프롬프트와 ChatOllama, 파서를 연결합니다.
chain = prompt | llm_model | parser

response = chain.invoke({"object": "하늘"})
print(response)
Colors.BLUE

주요 활용 사례

  • 색상 식별 시스템: 이미지 설명 생성 시 RGB 값 대신 표준 색상 이름 사용
  • 분류 작업: 문서 분류에서 미리 정의된 카테고리(예: ‘긴급’, ‘일반’, ‘저장’)로 출력 제한
  • 다국어 지원: Enum 값에 다국어 레이블 매핑 후 언어별 동적 파싱

에러 처리 메커니즘

  • 유효성 검사: 출력이 Enum 값과 일치하지 않을 경우 OutputParserException 발생
  • 자동 수정: RetryOutputParser와 조합하면 잘못된 형식 자동 수정 가능

기타 출력 파서와의 비교

기능EnumOutputParserStructuredOutputParser
출력 타입Enum 값JSON 객체
유연성낮음높음
타입 검증강력함선택적
사용 사례고정 카테고리복잡한 구조

EnumOutputParser는 특히 제한된 옵션 집합 내에서 안정적인 출력이 필요한 시나리오에서 빛을 발합니다. 예를 들어 법률 문서 분석 시 ‘승인’, ‘거부’, ‘검토 필요’와 같은 상태 값을 처리할 때 효과적입니다.

이 글은 카테고리: 랭체인 (LangChain)에 포함되어 있습니다. 고유주소를 북마크하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다