250806 트러블슈팅 업데이트 - 캐시 제거 및 대화 연속성

- 캐시 시스템 전면 개편 과정
- 대화 연속성 문제 해결
- 교훈 정리
This commit is contained in:
happybell80 2025-08-06 17:11:26 +09:00
parent a45642368b
commit d6428feb44

View File

@ -247,6 +247,86 @@ if data.get('user_name') and data['user_name'] != "null":
- Redis → 새 의존성, 복잡도 증가 - Redis → 새 의존성, 복잡도 증가
- ChromaDB identity → 이미 있는 것 활용 - ChromaDB identity → 이미 있는 것 활용
## 오후 5시 10분
### 캐시 시스템 전면 개편
**문제 발견**:
- 캐시 임계값 0.1~0.3 너무 낮음 (업계 표준 0.8)
- 3회 사용 제한 임의적 (TTL 기반이 표준)
- 템플릿 응답이 Gemini 응답과 충돌
**해결 과정**:
1. **캐시 최적화 (실패)**:
- 임계값 0.8로 상향
- TTL 5분 기반 전환
- 결과: 여전히 문제 지속
2. **캐시 완전 제거**:
```python
# config.py
USE_CONVERSATION_CACHE: bool = False # 비활성화
CACHE_DISTANCE_THRESHOLD: float = 0.95 # 사실상 무효
CACHE_TTL_SECONDS: int = 10 # 극단축
```
3. **템플릿 응답 제거**:
- 모든 하드코딩된 응답 삭제
- 100% Gemini API 사용
### 대화 연속성 문제
**증상**:
```
로빙: "세 가지 제안해볼까요?"
사용자: "그래"
로빙: "무엇을 도와드릴까요?" ❌ (문맥 손실)
```
**원인**:
- `should_store` 조건이 많은 대화 필터링
- 로빙 응답이 메모리에 저장 안됨
**해결**:
```python
# brain.py - 모든 대화 무조건 저장
# 사용자 메시지
await self.memory.store_memory(
content=f"User: {message}",
user_id=user_id,
memory_type="episodic",
metadata={"role": "user"}
)
# 로빙 응답 (필수)
await self.memory.store_memory(
content=f"Robing: {final_response}",
user_id=user_id,
memory_type="episodic",
metadata={"role": "assistant"}
)
```
## 교훈
1. **캐시는 만병통치약이 아니다**
- 잘못된 캐시는 오히려 문제 악화
- 초기에는 캐시 없이 시작
2. **대화 연속성 = 모든 발화 저장**
- User만 저장하면 반쪽짜리
- Assistant 응답도 필수
3. **템플릿 vs LLM**
- 혼용하면 일관성 파괴
- 하나로 통일 필요
4. **업계 표준 존중**
- 유사도 임계값: 0.8
- TTL 기반 만료
- 사용 횟수보다 시간 기반
--- ---
작성자: happybell80 & Claude 작성자: happybell80 & Claude