DOCS/journey/troubleshooting/251122_calendar_mixed_time_format_parsing.md
Claude-51124 20f4412241 docs: 최근 수정 사항 문서 업데이트
- calendar_mixed_time_format_parsing: JSON 블록 제거 내용 추가
- naverworks_briefing_2stage: config 제거 및 설정 관리 원칙 추가
2025-11-22 13:54:12 +09:00

3.6 KiB

캘린더 혼합 시간 형식 파싱 실패 문제

날짜: 2025-11-22 작성자: Claude 관련 파일:

  • rb8001/app/router/calendar_handler.py
  • rb8001/app/llm/llm_service.py
  • rb8001/tests/test_calendar_mixed_time_format_parsing.py

문제 상황

사용자 시나리오

사용자: "11월 27일 검진 화성시 동탄산단4길 9-9 칸트론, 레이저셀, 원스 외 80명 08:40~약11시반"
로빙: "네, 11월 27일 검진 일정을 등록해 드릴게요. 구글 캘린더에 등록해드릴까요?"
사용자: "ㅇㅇ"
로빙: "✅ 구글 캘린더에 일정을 등록했습니다!
      일시: 2025-11-27 08:40 ~ 08:40" ❌

문제: 종료 시간이 시작 시간과 동일하게 등록됨 (08:40 ~ 08:40)


원인 분석

1. 시간 범위 파싱 실패

  • extract_time_range_generic()이 "08:40~약11시반" 같은 혼합 형식을 처리하지 못함
  • 기존 패턴:
    • HH:MM ~ HH:MM (정상 작동)
    • "오후 1시부터 4시까지" (정상 작동)
    • 혼합 형식 (HH:MM ~ 약X시반) 처리 불가

2. LLM 응답 구조화 부족

  • LLM이 자연어만 반환하여 정규식으로 재파싱 필요
  • 구조화된 JSON 형식 미사용

해결 방안

1. 혼합 시간 형식 파싱 추가

파일: rb8001/app/router/calendar_handler.py:674-690

혼합 형식 패턴 추가:

# 4. 혼합 형식: "08:40~약11시반", "08:40~11시반" 등
mixed_pattern = r"(\d{1,2}):(\d{2})\s*[~-]\s*(약)?\s*(\d{1,2})시\s*(반|(\d{1,2})분)?"

2. LLM 구조화된 JSON 응답 요구

파일: rb8001/app/llm/llm_service.py:156-180

프롬프트 수정:

  • JSON 형식으로 구조화된 정보 반환 요구
  • 시간 범위 파싱 규칙 명시 ("08:40~약11시반" → "08:40 ~ 11:30")

3. JSON 파싱 로직 추가

파일: rb8001/app/router/calendar_handler.py:570-600

parse_llm_json_response() 함수 추가:

  • json { ... } 패턴 파싱
  • { ... } 패턴 파싱

4. calendar_handler에서 JSON 우선 사용

파일: rb8001/app/router/calendar_handler.py:118-125

우선순위 변경:

  1. JSON 형식 (새로 추가)
  2. 구조화된 필드 (기존)
  3. 자연어 파싱 (기존)

5. LLM 응답에서 JSON 블록 제거

파일: rb8001/app/router/router.py:821-830

사용자에게는 자연어 메시지만 표시:

  • json { ... } 패턴 제거
  • { ... } 패턴 제거
  • JSON은 파싱용으로만 사용, 사용자 응답에는 포함하지 않음

구현 완료 (2025-11-22)

수정된 파일

  • rb8001/app/router/calendar_handler.py: 혼합 시간 형식 파싱, JSON 파싱 로직 추가
  • rb8001/app/llm/llm_service.py: 구조화된 JSON 응답 요구 프롬프트 수정
  • rb8001/app/router/router.py: calendar_confirm 응답에서 JSON 블록 제거
  • rb8001/tests/test_calendar_mixed_time_format_parsing.py: TDD 테스트 작성

검증 방법

cd /home/admin/ivada_project/rb8001
docker exec -it rb8001 python3 tests/test_calendar_mixed_time_format_parsing.py

교훈

1. 시간 형식 다양성 대응

  • 사용자가 입력하는 시간 형식은 매우 다양함 (HH:MM, 자연어, 혼합 형식)
  • 정규식 패턴을 하나씩 추가하는 것보다, 시작/종료 시간을 각각 독립적으로 파싱하는 방식이 확장 가능

2. LLM 구조화된 응답 활용

  • LLM이 자연어만 반환하면 정규식으로 재파싱해야 하는 한계
  • 구조화된 JSON 형식을 요구하면, 파싱 로직이 단순해지고 정확도 향상

3. TDD 접근

  • 실패하는 테스트를 먼저 작성하여 문제를 명확히 정의
  • 구현 후 테스트 통과로 검증