Phase 4 트러블슈팅 추가: 캐시 검색 구현 및 디버깅

- current_user_id 설정 누락 문제 해결
- ChromaDB TTL 필터링 오류 수정 (Python 후처리)
- 캐시 히트 성공 및 성과 달성
- 교훈: user_id 전달 경로, ChromaDB 제약사항, 단계별 디버깅
This commit is contained in:
happybell80 2025-08-06 11:53:03 +09:00
parent 30e47105f6
commit 9a7004d288

View File

@ -404,4 +404,140 @@ if settings.USE_CONVERSATION_CACHE:
✅ **운영 준비 완료**
- cleanup.py 크론잡 준비
- 모니터링 로그 추가
- 안전한 에러 처리
- 안전한 에러 처리
---
# Phase 4: 정밀 캐시 검색 + 다중 가중치
**날짜**: 2025-08-06
**시작 시간**: 오전 11시 30분
## 오전 11시 30분
### Phase 4 구현
**목표**: 저장된 캐시 활용으로 API 비용 절감 및 응답 속도 개선
**구현 내용**:
1. **search_conversation_cache 메서드**
- 다중 가중치 기반 검색
- 의미 유사도 60%, 감정 20%, 시간 20%
- 종합 점수 계산 및 필터링
2. **brain.py 캐시 우선 검색**
```python
# Phase 4: 캐시 우선 검색
if settings.USE_CONVERSATION_CACHE and hasattr(self, 'current_user_id') and self.current_user_id:
cached_results = await self.memory.search_conversation_cache(...)
if cached_results:
return cached_response
```
3. **usage_count 추적**
- 캐시 사용 횟수 기록
- 백그라운드 업데이트
## 오전 11시 40분
### Phase 4 캐시 히트 미작동 문제
**증상**:
- 캐시 저장은 정상 (Phase 3)
- 캐시 검색이 작동하지 않음
- cache_hit 로그 전혀 없음
**원인 분석**:
1. API 엔드포인트 차이 의심 → 확인 결과 동일
2. **실제 원인: current_user_id 설정 누락**
```python
# think() 메서드는 user_id를 받지만
user_id = input_data.get("user_id", "unknown")
# 캐시 검색은 self.current_user_id를 확인
if hasattr(self, 'current_user_id') and self.current_user_id:
```
**해결**:
```python
# think() 메서드에 추가
self.current_user_id = user_id
```
## 오전 11시 45분
### ChromaDB TTL 필터링 오류
**오류 메시지**:
```
Expected operand value to be an int or a float for operator $gte,
got 2025-08-06T02:41:04.090339 in query
```
**문제**:
- ChromaDB의 `$gte` 연산자는 숫자만 지원
- datetime 문자열을 비교하려 해서 오류
**해결 방안 검토**:
1. TTL을 타임스탬프로 저장 → 기존 데이터 호환성 문제
2. **Python 후처리로 TTL 필터링** → 채택 ✅
3. TTL 체크 제거 → 만료된 캐시 사용 위험
**구현**:
```python
# ChromaDB 쿼리에서 TTL 필터 제거
results = self.conversation_cache.query(
query_texts=[query],
n_results=20, # 더 많이 가져옴
where={"user_id": user_id}
)
# Python에서 TTL 체크
ttl_date = datetime.fromisoformat(ttl_date_str)
if ttl_date < current_time:
continue # 만료된 캐시 스킵
```
## 오전 11시 52분
### Phase 4 성공
**테스트 결과**:
- ✅ 캐시 히트 정상 작동
- ✅ 유사한 질문에 동일 응답 반환
- ✅ API 비용 절감 확인
- ✅ 응답 속도 개선 확인
## Phase 4 교훈
1. **user_id 전달 경로 확인**
- 각 메서드에서 필요한 변수 설정 확인
- self.current_user_id 같은 인스턴스 변수 주의
2. **ChromaDB 제약사항 이해**
- 문자열 비교 연산자 미지원
- 숫자 타입만 비교 가능
- 필요시 Python 후처리 활용
3. **단계별 디버깅**
- 로그로 각 단계 실행 여부 확인
- 조건문 체크 포인트 추가
- 에러 메시지 정확히 분석
## Phase 4 성과
✅ **캐시 검색 시스템 완성**
- 다중 가중치 기반 정밀 검색
- TTL 만료 캐시 자동 필터링
- usage_count로 인기도 추적
✅ **실질적 효과 달성**
- API 비용 절감 시작
- 응답 속도 대폭 개선
- 일관된 품질의 응답 제공
✅ **안정적 운영**
- 캐시 미스 시 자동 폴백
- 에러 처리 완벽
- 디버그 로깅 충실