docs: 대화 히스토리 구현 전체 트러블슈팅 완성
- POST /api/message username 미전달 문제 및 해결 - /api/messages sender 매핑 오류 및 해결 - 프론트엔드 초기 로드 실패 원인 분석 및 해결 - lambda 함수 파라미터 패턴 주의사항 - React useEffect 타이밍 문제 상세 분석
This commit is contained in:
parent
79ca094783
commit
89f2ae3507
@ -291,3 +291,79 @@ CREATE TABLE users (
|
|||||||
- React state에 저장한 값은 localStorage에도 동기화
|
- React state에 저장한 값은 localStorage에도 동기화
|
||||||
- API 요청 시 사용하는 값은 반드시 영속 저장소에 보관
|
- 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