docs: 대화 히스토리 문제 해결 과정 업데이트
- /api/messages → /api/history 교체 과정 추가 - LLM 의존성 제거 해결책 문서화 - 함수형 프로그래밍 원칙 적용 사례 - 교훈 섹션 대폭 보강
This commit is contained in:
parent
2d8bb456da
commit
1e66ec541d
@ -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 문제 해결
|
||||
|
||||
### 문제 발견
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user