# rb8001 PostgreSQL 대화 기록 통합 및 Frontend-Slack 연동 **작성일**: 2025-08-31 **작성자**: 51123 서버 관리자 **상태**: ✅ 구현 완료 **목표**: ChromaDB 벡터 검색과 PostgreSQL 최근 대화를 모두 LLM 프롬프트에 포함 --- ## 1. 문제 상황 - **현상**: rb8001이 ChromaDB 벡터 검색만 참조하여 엉뚱한 답변 - **원인**: PostgreSQL conversation_logs의 최근 대화 미참조 - **영향**: 직전 대화 컨텍스트 손실, 일관성 없는 응답 - **테스트**: "내 이름은 김종태" → "내 이름은?" → "모릅니다" 응답 ## 2. 원인 분석 ### 발견된 문제점 - `router.py` 라인 115-119: context에 user_id, channel, robeing_id만 포함 - PostgreSQL 조회 함수 없음 (ConversationLog 모델만 정의) - `/api/message` 엔드포인트가 `router._call_internal_llm()` 직접 호출 - route_message()는 존재하지만 아무도 호출하지 않음 - Frontend는 UUID, Slack은 Slack ID 사용으로 사용자 분리 ## 3. 구현 완료 내역 ### 3.1 대화 컨텍스트 통합 - **database.py**: `get_recent_conversations()` 함수 추가 - PostgreSQL에서 최근 10개 대화 조회 - **gemini_handler.py**: context['recent_conversations'] 활용하여 프롬프트에 포함 - **router.py**: 최근 대화 조회 및 context 전달 구현 ### 3.2 엔드포인트 통합 (근본 해결) - **문제 발견**: handle_message() 존재하지 않음, 실제는 route_message() - **main.py 수정**: `/api/message` 엔드포인트가 route_message() 호출하도록 변경 - **slack_handler.py 수정**: 모든 Slack 요청도 route_message() 통합 - **결과**: Frontend/Slack 모두 동일한 로직 사용으로 일관성 확보 ### 3.3 Frontend 응답 형식 수정 - **문제**: results 배열 구조에서 bot_response 추출 실패 - **main.py 수정**: results[0].content 추출 로직 및 디버그 로깅 추가 ### 3.4 PostgreSQL 저장 오류 해결 - **문제**: HTTP Response 객체를 DB에 직접 저장 시도 - **_save_conversation() 수정**: Response 객체를 문자열로 변환 (response.text 또는 str()) ### 3.5 Slack-Frontend 통합 달성 - **Slack ID → UUID 자동 변환**: slack_user_mapping 테이블 활용 - **route_message() 진입점**: Slack ID 감지 시 UUID 조회 및 변환 - **이중 저장**: user_id(UUID)와 slack_user_id(원본) 모두 저장 - **결과**: 김종태, 이고은 등 사용자가 어느 채널에서든 대화 연속성 유지 ## 4. 성과 - **총 5개 커밋**: 약 200줄 코드 수정 - **Frontend ↔ Slack 완전 통합**: 크로스 채널 대화 공유 - **대화 기록 영속성**: PostgreSQL과 ChromaDB 모두 정상 저장 - **사용자 경험 개선**: "내 이름은?" 질문에 정확한 답변 가능 ## 5. 기술 세부사항 ### 수정된 파일 - `database.py`: get_recent_conversations() 함수 추가 - `gemini_handler.py`: recent_conversations 컨텍스트 활용 - `router.py`: Slack ID → UUID 변환 로직 - `main.py`: route_message() 호출로 통합 - `slack_handler.py`: route_message() 통합 ### 데이터베이스 스키마 - `conversation_logs.user_id`: UUID (Frontend 사용자) - `conversation_logs.slack_user_id`: VARCHAR (Slack ID 보존) - `slack_user_mapping`: Slack ID ↔ UUID 매핑 테이블 활용