LangChain에서 날짜와 시간 데이터를 처리하는 데 유용한 도구 중 하나가 DatetimeOutputParser입니다. 이 파서는 언어 모델의 출력을 구조화된 날짜 및 시간 형식으로 EnumOutputParser는 LangChain 프레임워크에서 제공하는 출력 파서(output parser) 중 하나로, 언어 모델의 출력을 미리 정의된 열거형(enum) 값으로 변환하는 데 사용됩니다. 이를 통해 모델의 응답을 구조화하고, 특정 옵션 집합으로 제한된 결과를 얻을 수 있습니다. 주로 모델이 반환하는 텍스트를 애플리케이션에서 더 쉽게 처리할 수 있도록 파싱하는 데 유용합니다.
주요 특징
- 열거형(Enum) 기반 파싱: EnumOutputParser는 Python의 enum 모듈을 사용해 정의된 열거형 값 중 하나로 출력을 매핑합니다.
- 구조화된 출력: 모델의 자유로운 텍스트 응답을 특정 값으로 제한하여 일관성을 보장합니다.
- 예외 처리: 정의되지 않은 값이 입력되면 오류를 발생시켜 잘못된 출력을 감지할 수 있습니다.
사용 방법
- 열거형 정의: 먼저 Python에서 Enum 클래스를 사용해 가능한 출력 값을 정의합니다.
- 파서 설정: EnumOutputParser를 초기화할 때 정의한 열거형을 전달합니다.
- 출력 파싱: 언어 모델의 응답을 파서에 전달하여 열거형 값으로 변환합니다.
예제
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와 조합하면 잘못된 형식 자동 수정 가능
기타 출력 파서와의 비교
기능 | EnumOutputParser | StructuredOutputParser |
출력 타입 | Enum 값 | JSON 객체 |
유연성 | 낮음 | 높음 |
타입 검증 | 강력함 | 선택적 |
사용 사례 | 고정 카테고리 | 복잡한 구조 |
EnumOutputParser는 특히 제한된 옵션 집합 내에서 안정적인 출력이 필요한 시나리오에서 빛을 발합니다. 예를 들어 법률 문서 분석 시 ‘승인’, ‘거부’, ‘검토 필요’와 같은 상태 값을 처리할 때 효과적입니다.