docs: 캘린더 혼합 시간 형식 파싱 문제 트러블슈팅 문서 추가
This commit is contained in:
parent
414a4daf97
commit
b37e33f8e6
@ -0,0 +1,105 @@
|
|||||||
|
# 캘린더 혼합 시간 형식 파싱 실패 문제
|
||||||
|
|
||||||
|
**날짜**: 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`
|
||||||
|
|
||||||
|
혼합 형식 패턴 추가:
|
||||||
|
```python
|
||||||
|
# 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. 자연어 파싱 (기존)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 구현 완료 (2025-11-22)
|
||||||
|
|
||||||
|
### 수정된 파일
|
||||||
|
- `rb8001/app/router/calendar_handler.py`: 혼합 시간 형식 파싱, JSON 파싱 로직 추가
|
||||||
|
- `rb8001/app/llm/llm_service.py`: 구조화된 JSON 응답 요구 프롬프트 수정
|
||||||
|
- `rb8001/tests/test_calendar_mixed_time_format_parsing.py`: TDD 테스트 작성
|
||||||
|
|
||||||
|
### 검증 방법
|
||||||
|
```bash
|
||||||
|
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 접근
|
||||||
|
- 실패하는 테스트를 먼저 작성하여 문제를 명확히 정의
|
||||||
|
- 구현 후 테스트 통과로 검증
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user