- router._call_internal_llm() 대신 handle_message() 호출 - 이미 모든 기능 구현됨 (최근 대화, 스킬 라우팅, 저장) - main.py에서 2줄 수정으로 완료
3.2 KiB
3.2 KiB
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/main.py - 엔드포인트 실제 구조:
/api/message(라인 51-103): Frontend용,router._call_internal_llm()직접 호출/api/slack/events(라인 157-160): Slack용,slack_handler()호출/complete(라인 106-140): skill-slack용,router._call_internal_llm()직접 호출
- 핵심 문제: router.handle_message()는 아무도 호출 안 함, 최근 대화 조회 코드가 실행 안 됨
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 최종 해결 방안 - 기존 handle_message() 활용
- 최적 방안: main.py 엔드포인트에서
router.handle_message()호출# main.py /api/message (Frontend) result = await router.handle_message(request.text, user_id, "frontend") # main.py /api/slack/events (Slack) result = await router.handle_message(message, user_id, "slack")- 장점: 이미 구현된 모든 기능 활용 (최근 대화 조회, 스킬 라우팅, 저장)
- 수정: 단 2줄로 완료
- 안전성: 기존 테스트된 코드, channel 파라미터로 구분
3.3 주의사항
- Gmail 처리: "이메일" 키워드 감지 시 자동 처리 (의도된 기능)
- 슬래시 명령어: Frontend는
/명령어 사용 안함 - thread_ts: Frontend는 None 전달
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로 기능 토글