- ChromaDB metadata None 값 필터링 해결 완료 - conversation_logs channel_id 구분 문제 문서화 - Slack DM이 'web'으로 저장되는 문제 발견 - Frontend/Slack 채널 구분 개선안 제시
55 lines
1.6 KiB
Markdown
55 lines
1.6 KiB
Markdown
# ChromaDB metadata None 값 에러
|
|
|
|
**날짜**: 2025-08-28
|
|
**서비스**: rb8001
|
|
**상태**: ✅ 해결 완료
|
|
|
|
## 문제
|
|
- Frontend 접속 시 ChromaDB 저장 실패
|
|
- 에러: "Expected metadata value to be a str, int, float or bool, got None which is a NoneType"
|
|
- PostgreSQL은 None 허용하여 정상 저장됨
|
|
|
|
## 확인된 원인
|
|
```python
|
|
# rb8001/app/router/router.py:358-364
|
|
metadata = {
|
|
"user_id": user_id, # UUID (정상)
|
|
"slack_user_id": slack_user_id, # Frontend일 때 None ✅ 확인됨
|
|
"channel": channel, # Frontend일 때 None 가능성
|
|
"intent": intent # None 가능성
|
|
}
|
|
```
|
|
|
|
## 해결책
|
|
```python
|
|
# None 값 필터링 추가
|
|
metadata = {
|
|
k: v for k, v in {
|
|
"user_id": user_id,
|
|
"slack_user_id": slack_user_id,
|
|
"channel": channel,
|
|
"intent": intent
|
|
}.items() if v is not None
|
|
}
|
|
```
|
|
|
|
## 수정 위치
|
|
- 파일: `rb8001/app/router/router.py`
|
|
- 라인: 358-364
|
|
- 메소드: `store_conversation()`
|
|
|
|
## 검증 데이터
|
|
- **51124 로그**: ChromaDB 에러 메시지 확인됨
|
|
- **PostgreSQL**: slack_user_id=None 저장 확인됨
|
|
- **사용자**: happybell80 (UUID: 1e16e9d5-59f3-54da-a661-8abeabff4230)
|
|
|
|
## 테스트 결과 ✅
|
|
1. Frontend 대화 → ChromaDB 저장 성공 (컬렉션: rb8001_1e16e9d5-59f3-54da-a661-8abeabff4230)
|
|
2. PostgreSQL → 정상 저장 확인
|
|
3. None 값 필터링 → 정상 작동
|
|
4. 메모리 ID: 7c751907f061cb588b95b1ec6cae7b78 생성 확인
|
|
|
|
## 해결 완료
|
|
- 수정 커밋: 454fddf
|
|
- 배포: Gitea Actions 자동 배포 완료
|
|
- 검증: "Conversation saved to both storages" 확인 |