DOCS/plans/250831_rb8001_postgresql_context_integration.md
happybell80 b57e8b8a5f docs: PostgreSQL 통합 위험성 완화 방안 추가
- 성능: 캐싱/비동기 처리
- UUID 오류: try-except 및 slack_user_id 폴백
- 토큰 한계: 5개 제한, 200자 truncate
- 로직 충돌: 역할 분리 (최근 vs 장기)
- 점진적 적용: 환경변수 토글
2025-08-31 15:08:35 +09:00

57 lines
2.4 KiB
Markdown

# rb8001 PostgreSQL 대화 기록 LLM 컨텍스트 통합 계획
**작성일**: 2025-08-31
**작성자**: 51123 서버 관리자
**상태**: 🟡 계획 수립
**목표**: ChromaDB 벡터 검색과 PostgreSQL 최근 대화를 모두 LLM 프롬프트에 포함
---
## 1. 현재 문제
- **현상**: rb8001이 ChromaDB 벡터 검색만 참조하여 엉뚱한 답변
- **원인**: PostgreSQL conversation_logs의 최근 대화 미참조
- **영향**: 직전 대화 컨텍스트 손실, 일관성 없는 응답
## 2. 기술 분석
### 현재 구조 (확인 완료)
- `router.py` 라인 115-119: context에 user_id, channel, robeing_id만 포함
- `_save_conversation()`: PostgreSQL, ChromaDB 둘 다 저장 (구현됨)
- PostgreSQL 조회 함수: 없음 (ConversationLog 모델만 정의)
### 수정 필요 부분
- **파일**: `/home/heejae/rb8001/app/router/router.py`
- **함수**: `route_message()` 내 LLM 컨텍스트 구성 부분
## 3. 구현 계획
### 3.1 PostgreSQL 조회 함수 추가 (신규 구현)
- 파일: `/home/happybell80/ivada_project/rb8001/app/state/database.py`
- 함수명: `get_recent_conversations(user_id, limit=10)`
- 쿼리: `SELECT message, response, timestamp FROM conversation_logs WHERE user_id = %s ORDER BY timestamp DESC`
### 3.2 중요: gemini_handler.py 수정 필요
- **문제**: router.py에서 전달한 context 딕셔너리는 무시됨 (gemini_handler.py:87)
- **해결**: gemini_handler.py에서 context['recent_conversations'] 사용하도록 수정
- **프롬프트**: `{system}{memory}{recent_chats}\n\n사용자: {message}`
## 4. 주의사항
- **UUID 처리**: Frontend(UUID) vs Slack(변환 필요) 구분
- **성능**: PostgreSQL 조회 추가로 인한 지연 고려
- **순서**: 최근 대화를 먼저, 벡터 검색을 보조로
## 5. 추가 이슈
- ChromaDB telemetry 오류 발생 중 → `ANONYMIZED_TELEMETRY=false` 설정 필요
- user_id UUID 타입 처리 필요 (Frontend=UUID, Slack=변환)
- LLM: Gemini 2.5 Flash Lite (DEFAULT_LLM_MODEL=gemini-2.5-flash-lite)
## 6. 위험성 완화 방안
- **성능**: 캐싱 레이어 추가 또는 비동기 처리로 지연 최소화
- **UUID 오류**: try-except로 UUID 검증, 실패 시 slack_user_id 폴백
- **토큰 한계**: 최근 5개로 제한, 각 대화 200자 truncate
- **로직 충돌**: PostgreSQL은 최근 사실, ChromaDB는 장기 기억으로 역할 분리
- **점진적 적용**: 환경변수 `USE_POSTGRES_CONTEXT=true`로 기능 토글