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).
- 성능 최적화: 대량의 데이터를 처리할 때는 파싱 속도를 고려하여 배치 처리를 구현하는 것이 좋습니다.