docs: 대화 히스토리 구현 전체 트러블슈팅 완성
- POST /api/message username 미전달 문제 및 해결 - /api/messages sender 매핑 오류 및 해결 - 프론트엔드 초기 로드 실패 원인 분석 및 해결 - lambda 함수 파라미터 패턴 주의사항 - React useEffect 타이밍 문제 상세 분석
This commit is contained in:
parent
79ca094783
commit
89f2ae3507
@ -290,4 +290,80 @@ CREATE TABLE users (
|
||||
### 9. **상태 관리와 영속성 일치 필수**
|
||||
- React state에 저장한 값은 localStorage에도 동기화
|
||||
- API 요청 시 사용하는 값은 반드시 영속 저장소에 보관
|
||||
- 로그인/로그아웃 시 모든 관련 데이터 정리
|
||||
- 로그인/로그아웃 시 모든 관련 데이터 정리
|
||||
|
||||
## 오후 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 로드 기다리지 않고 기본값으로 진행
|
||||
Loading…
x
Reference in New Issue
Block a user