3.6. 날짜 형식 출력 파서(DatetimeOutputParser)

LangChain에서 날짜와 시간 데이터를 처리하는 데 유용한 도구 중 하나가 DatetimeOutputParser입니다. 이 파서는 언어 모델의 출력을 구조화된 날짜 및 시간 형식으로 변환하여, 애플리케이션에서 일관된 데이터 처리를 가능하게 합니다.

DatetimeOutputParser는 LangChain의 출력 파서(output parser) 모듈 중 하나로, 언어 모델의 텍스트 출력을 Python의 datetime 객체로 변환합니다. 이는 날짜나 시간을 포함한 응답을 처리할 때 유용하며, 예를 들어 사용자 입력에서 “다음 주 월요일”이나 “2025년 4월 22일” 같은 표현을 표준화된 형식으로 변환할 수 있습니다.

주요 특징

  • 형식 지정 가능: 출력 형식을 사용자가 정의할 수 있습니다(예: %Y-%m-%d %H:%M:%S).
  • 유연한 입력 처리: 비정형 텍스트에서도 날짜 정보를 추출합니다.
  • EXAONE 3.5와의 호환성: EXAONE 3.5의 자연어 처리 능력과 결합하여 높은 정확도를 제공합니다.

다음은 DatetimeOutputParser를 사용하여 언어 모델의 출력을 파싱하는 간단한 예제입니다.

예제

LangChain에서 DatetimeOutputParser를 사용하는 간단한 예제를 설명하겠습니다

import re
from langchain.output_parsers import DatetimeOutputParser
from langchain.prompts import PromptTemplate
from langchain_ollama import ChatOllama
from datetime import datetime

# LLM 모델 초기화
llm = ChatOllama(model="exaone3.5")

# DatetimeOutputParser 초기화 및 포맷 지정
output_parser = DatetimeOutputParser()
output_parser.format = "%Y-%m-%d"

# 포맷 지침 생성
format_instructions = output_parser.get_format_instructions()

# 오늘 날짜를 프롬프트에 명시적으로 전달
today_str = datetime.today().strftime('%Y-%m-%d')

# 프롬프트 템플릿 정의 (포맷 지침 포함, 반드시 날짜만 출력하도록 강조)
prompt = PromptTemplate(
    template=(
        f"오늘은 {today_str}\n"
        "아래의 질문에 답할 때 반드시 '{format_instructions}'를 따르세요.\n"
        "반드시 날짜만 출력하고, 다른 설명이나 문장은 절대 추가하지 마세요.\n"
        "질문: {question}\n"
        "답변:"
    ),
    input_variables=["question"],
    partial_variables={"format_instructions": format_instructions}
)

# 날짜만 추출하는 함수
def extract_date(text):
    match = re.search(r"\d{4}-\d{2}-\d{2}", text)
    if match:
        return match.group(0)
    else:
        raise ValueError(f"날짜를 찾을 수 없습니다: {text}")

# 체인 구성
def run_chain(question):
    prompt_text = prompt.format(question=question)
    llm_response = llm.invoke(prompt_text)
    # LLM 응답에서 실제 텍스트 추출 (AIMessage 등 객체일 수 있음)
    if hasattr(llm_response, "content"):
        response_text = llm_response.content
    else:
        response_text = str(llm_response)
    # 날짜만 추출
    date_str = extract_date(response_text)
    # 파싱
    result = output_parser.parse(date_str)
    return result

# 질문 실행
question = "LG전자의 창립연도는?"
result = run_chain(question)

print(result)
2025-04-28 00:00:00

또 다른 질문:

# 질문 실행
question = "LG전자의 창립연도는?"
result = run_chain(question)

print(result)
1958-01-01 00:00:00

실제 활용 사례

DatetimeOutputParser는 다양한 애플리케이션에서 활용될 수 있습니다. 아래는 몇 가지 예입니다:

  • 일정 관리 챗봇: 사용자가 “다음 주 화요일 10시에 회의 예약”이라고 말하면, 이를 파싱하여 캘린더에 추가.
  • 데이터 분석: 로그 데이터에서 날짜 정보를 추출해 분석.
  • 여행 플래너: “6월 첫째 주에 파리 여행” 같은 요청을 처리해 정확한 날짜를 제공.

주의사항 및 최적화 팁

  • 프롬프트 명확성: 프롬프트에 출력 형식을 명확히 지정하면 더 정확한 결과를 얻을 수 있습니다.
  • 문화적 차이 고려: 날짜 형식은 지역에 따라 다를 수 있으므로, 대상 사용자에 맞는 형식을 지정하세요(예: %d/%m/%Y vs %Y-%m-%d).
  • 성능 최적화: 대량의 데이터를 처리할 때는 파싱 속도를 고려하여 배치 처리를 구현하는 것이 좋습니다.
이 글은 카테고리: 랭체인 (LangChain)에 포함되어 있습니다. 고유주소를 북마크하세요.

답글 남기기

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