From 9a7004d288866b1aac99f8091fe72a3cbfcf002d Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 6 Aug 2025 11:53:03 +0900 Subject: [PATCH] =?UTF-8?q?Phase=204=20=ED=8A=B8=EB=9F=AC=EB=B8=94?= =?UTF-8?q?=EC=8A=88=ED=8C=85=20=EC=B6=94=EA=B0=80:=20=EC=BA=90=EC=8B=9C?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - current_user_id 설정 누락 문제 해결 - ChromaDB TTL 필터링 오류 수정 (Python 후처리) - 캐시 히트 성공 및 성과 달성 - 교훈: user_id 전달 경로, ChromaDB 제약사항, 단계별 디버깅 --- ...5-06_happybell80_AI응답개선Phase1-5.md | 138 +++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) diff --git a/troubleshooting/250805-06_happybell80_AI응답개선Phase1-5.md b/troubleshooting/250805-06_happybell80_AI응답개선Phase1-5.md index 2a59dcf..9921f89 100644 --- a/troubleshooting/250805-06_happybell80_AI응답개선Phase1-5.md +++ b/troubleshooting/250805-06_happybell80_AI응답개선Phase1-5.md @@ -404,4 +404,140 @@ if settings.USE_CONVERSATION_CACHE: ✅ **운영 준비 완료** - cleanup.py 크론잡 준비 - 모니터링 로그 추가 -- 안전한 에러 처리 \ No newline at end of file +- 안전한 에러 처리 + +--- + +# 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 비용 절감 시작 +- 응답 속도 대폭 개선 +- 일관된 품질의 응답 제공 + +✅ **안정적 운영** +- 캐시 미스 시 자동 폴백 +- 에러 처리 완벽 +- 디버그 로깅 충실 \ No newline at end of file