# rb8001-skill-rag-file Slack 파일 처리 연동 구조 ## 작성일: 2025-09-16 ## 작성자: Claude (51123 서버 관리자) ## 1. 현재 상황 - skill-rag-file: 구조만 생성, 미구현 상태 - rb8001: Slack 메시지 수신 중 (파일 처리 로직 없음) - team_document 테이블: 스펙만 존재, 실제 미생성 ## 2. 구현 필요 플로우 ### Slack 파일 수신 → rb8001 → skill-rag-file ``` Slack 파일 업로드 ↓ (Event API) rb8001:8001 /slack/events ↓ (파일 타입 확인) rb8001 file_handler ↓ (HTTP POST) skill-rag-file:8508 /upload ↓ 파일 저장 + DB 기록 + ChromaDB 벡터화 ``` ## 3. rb8001 수정 필요사항 ### 파일 이벤트 핸들러 추가 - 위치: rb8001/app/api/slack_events.py - Slack file_shared 이벤트 처리 - files:read 스코프 확인 필요 ### skill-rag-file 호출 함수 ```python # rb8001/app/services/rag_service.py (신규) async def upload_to_rag(file_url, filename, team_id, user_id): response = await httpx.post( "http://localhost:8508/upload", json={ "file_url": file_url, "filename": filename, "team_id": team_id, "uploaded_by": user_id } ) ``` ## 4. skill-rag-file 구현 필요사항 ### 엔드포인트 - POST /upload: 파일 수신 및 처리 - POST /search: 벡터 검색 - GET /healthz: 헬스체크 ### 주요 기능 - Slack 파일 다운로드 (bot_token 사용) - 텍스트 추출 (PyPDF2, python-docx) - PostgreSQL team_document 저장 - ChromaDB rb8001_{team_id}_documents 벡터화 ## 5. 테이블 생성 (51123) ```sql CREATE TABLE team_document ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), team_id UUID NOT NULL REFERENCES team(id), filename VARCHAR(255) NOT NULL, file_hash VARCHAR(64) NOT NULL, storage_path VARCHAR(500), text_content TEXT, metadata JSONB DEFAULT '{}', created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP ); CREATE UNIQUE INDEX idx_team_doc_hash ON team_document(team_id, file_hash); ``` ## 6. 확인 사항 - [ ] rb8001 Slack 앱 files:read 스코프 - [ ] skill-rag-file Git 레포 실제 구현 - [ ] 51124 서버 Docker 컨테이너 배포 - [ ] /mnt/51123data/documents/ 마운트 확인