diff --git a/troubleshooting/250818_happybell80_대화히스토리구현.md b/troubleshooting/250818_happybell80_대화히스토리구현.md index 72da213..44d1b68 100644 --- a/troubleshooting/250818_happybell80_대화히스토리구현.md +++ b/troubleshooting/250818_happybell80_대화히스토리구현.md @@ -290,4 +290,80 @@ CREATE TABLE users ( ### 9. **상태 관리와 영속성 일치 필수** - React state에 저장한 값은 localStorage에도 동기화 - API 요청 시 사용하는 값은 반드시 영속 저장소에 보관 -- 로그인/로그아웃 시 모든 관련 데이터 정리 \ No newline at end of file +- 로그인/로그아웃 시 모든 관련 데이터 정리 + +## 오후 2시 15분 - POST /api/message 엔드포인트 username 미전달 + +### 문제 +- GET /api/messages (조회)는 정상 작동 +- POST /api/message (저장)가 default 컬렉션에 저장 +- think_functional 호출 시 username 전달 안됨 + +### 해결 +```python +# endpoints.py 수정 +username = await resolve_username(request.user_id) + +# lambda 함수 수정 - brain.py 호출 패턴과 일치 +search_memories_fn=lambda query, user_id: search_memories( + query, user_id, username=username +), +``` + +### 주의사항 +- brain.py가 keyword arguments로 호출 (`query=`, `user_id=`) +- lambda 파라미터 순서가 호출 패턴과 일치해야 함 +- 예전에도 같은 실수 반복 - 트러블슈팅 문서 확인 필수 + +## 오후 2시 20분 - /api/messages sender 매핑 오류 + +### 문제 +- ChromaDB에 role: "assistant"로 저장 +- 프론트엔드는 sender: "robing" 기대 +- 모든 메시지가 sender: "user"로 표시 + +### 해결 +```python +# endpoints.py 수정 +role = metadata.get('role', 'user') +sender = 'robing' if role == 'assistant' else 'user' +messages.append({ + "sender": sender, # role을 sender로 변환 +}) +``` + +## 오후 2시 30분 - 프론트엔드 초기 로드 실패 + +### 문제 분석 +- 백엔드는 정상 (94개 대화 반환) +- 프론트엔드가 페이지 로드 시 getMessages 호출 안함 +- historyLoaded 플래그가 너무 일찍 true 설정 + +### 근본 원인 +```javascript +// 문제의 코드 +useEffect(() => { + if (historyLoaded) return; // user 로드 전에 실행되면 영원히 막힘 + // ... +}, [isAuthenticated, user]); +``` + +### 해결 +```javascript +// 1. 중복 체크 개선 +if (messages.length > 0 && historyLoaded) return; + +// 2. 로그인 확인 강화 +} else if (user && isAuthenticated) { + +// 3. user_id 우선순위 수정 +const userId = localStorage.getItem('user_id') || user.id || 'default'; + +// 4. config 대기하지 않음 +const batchSize = config?.message_batch_size || 30; +``` + +### 타이밍 문제 해결 +- user가 null일 때 historyLoaded 설정 방지 +- localStorage의 user_id 우선 사용 +- config 로드 기다리지 않고 기본값으로 진행 \ No newline at end of file