diff --git a/troubleshooting/250818_happybell80_대화히스토리구현.md b/troubleshooting/250818_happybell80_대화히스토리구현.md index 44d1b68..1bfb355 100644 --- a/troubleshooting/250818_happybell80_대화히스토리구현.md +++ b/troubleshooting/250818_happybell80_대화히스토리구현.md @@ -217,8 +217,83 @@ async def resolve_username(user_id: str) -> str: - Slack, 이메일, username 모든 형태 지원 - Auth 서버와 통합하여 중앙 관리 - 5단계 우선순위로 안정적 해석 + +## 오후 4시 50분 - 대화 히스토리와 메모리 검색 분리 + +### 근본 문제 발견 +- **설계 결함**: `/api/messages`가 히스토리 조회와 의미 검색을 같은 함수로 처리 +- **부적절한 의존성**: 단순 히스토리 조회에 LLM(Mistral) 필요 없음 +- **실수의 원인**: `search_memories()` 함수 재사용 시도 → 빈 query도 임베딩 생성 → LLM 호출 + +### 해결책: 완전 분리 +1. **`get_chat_history()` 함수 신규 개발** +```python +async def get_chat_history( + username: str, + limit: int = None, + before: Optional[str] = None, + after: Optional[str] = None +) -> List[Dict]: + """LLM 없이 ChromaDB에서 직접 대화 조회""" + # collection.get() 사용 (query 없음) + # timestamp 기준 정렬 + # 페이지네이션 지원 +``` + +2. **엔드포인트 교체** +- 삭제: `/api/messages` (잘못된 설계) +- 신규: `/api/history` (히스토리 전용) +- 유지: `/api/search` (의미 검색용 - 향후) + +3. **프론트엔드 수정** +```javascript +// 변경 전: /api/messages +// 변경 후: /api/history +const response = await fetch(`${ROBING_API_URL}/api/history?${params}`) +``` + +### 함수형 프로그래밍 원칙 준수 +- 환경변수 활용: `MESSAGE_BATCH_SIZE`, `SCROLL_THRESHOLD` +- 순수 함수: 부작용 없이 데이터만 조회 +- 의존성 주입: collection을 파라미터로 전달 - 비동기 처리로 성능 유지 +## 교훈 + +### 1. **"코드 재사용"의 함정** +- 목적이 다른 함수를 억지로 재사용하면 복잡도만 증가 +- 히스토리 조회 ≠ 의미 검색 (완전히 다른 레이어) +- 처음부터 전용 함수를 만드는 것이 더 깔끔 + +### 2. **LLM 의존성 최소화** +- 단순 CRUD 작업에 AI 불필요 +- 임베딩 생성은 검색이 필요할 때만 +- 대화 히스토리는 timestamp 정렬이면 충분 + +### 3. **명확한 책임 분리** +| 기능 | 엔드포인트 | LLM 필요 | 용도 | +|------|-----------|---------|------| +| 히스토리 | /api/history | X | 시간순 대화 조회 | +| 검색 | /api/search | O | 의미 기반 검색 | +| 대화 | /api/chat | O | 새 대화 생성 | + +### 4. **함수형 프로그래밍 효과** +- 환경변수로 설정 관리 → 하드코딩 제거 +- 순수 함수 구현 → 테스트 용이 +- 명확한 입출력 → 디버깅 간편 + +## 최종 결과 + +### 구현 완료 +- `get_chat_history()`: LLM 없는 순수 조회 함수 +- `/api/history`: 대화 히스토리 전용 엔드포인트 +- 프론트엔드 경로 수정 완료 + +### 개선 효과 +- **MISTRAL_API_KEY 없어도 정상 작동** +- 응답 속도 대폭 개선 (임베딩 생성 없음) +- 명확한 아키텍처로 유지보수 용이 + ## 오후 2시 07분 - 프론트엔드 localStorage 문제 해결 ### 문제 발견