diff --git a/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md b/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md index 8be0a45..11f310d 100644 --- a/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md +++ b/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md @@ -4,79 +4,101 @@ ## 작성자: Claude (51123 서버 관리자) ## 1. 현재 상황 -- skill-rag-file: 구조만 생성, 미구현 상태 -- rb8001: Slack 메시지 수신 중 (파일 처리 로직 없음) -- team_document 테이블: 스펙만 존재, 실제 미생성 -## 2. 구현 필요 플로우 +### 확인된 상태 +- **team_document 테이블**: 생성 완료 (51123 PostgreSQL) + - processing_status, chunk_count, mime_type, file_size 컬럼 포함 + - idx_team_doc_hash 유니크 인덱스 생성됨 +- **파일 저장 디렉터리**: /mnt/hdd/data/documents/ 생성 완료 +- **slack_workspace**: 2개 팀 등록, bot_token 보유 + - Robeing (T0925SXPS4D) + - Company-X Team (T09C98KB933) +- **Slack 스코프**: files:read 포함 (설치 URL에서 확인) -### Slack 파일 수신 → rb8001 → skill-rag-file +### 미구현 상태 +- **rb8001**: 파일 수신은 하지만 처리 로직 없음 + - slack_handler.py:244에서 `files = event.get("files", [])` 추출만 + - context에 파일 정보 포함 후 전달만 함 +- **skill-rag-file**: API 엔드포인트만 있고 실제 구현 없음 + +## 2. 실제 메시지 플로우 (확인됨) + +### 현재 Slack 메시지 처리 경로 ``` -Slack 파일 업로드 - ↓ (Event API) -rb8001:8001 /slack/events - ↓ (파일 타입 확인) -rb8001 file_handler - ↓ (HTTP POST) -skill-rag-file:8508 /upload +Slack Event API ↓ -파일 저장 + DB 기록 + ChromaDB 벡터화 -``` +nginx (51123) + ↓ +robeing-gateway (51123) + - team_id에서 bot_token 조회 (slack_workspace 테이블) + - Slack user ID → UUID 변환 + - 헤더 추가: X-Slack-Bot-Token, X-User-Id + ↓ +rb8001:8001 (51124) + /api/slack/events + - slack_endpoint.py → slack_handler.py + - handle_slack_events()에서 파일 추출 + - background_process_request()로 비동기 처리 + ↓ +brain_service/llm_service (파일 처리 없이 텍스트만 처리) -## 3. rb8001 수정 필요사항 +## 3. rb8001 파일 처리 현황 (51124) -### 파일 이벤트 핸들러 추가 -- 위치: rb8001/app/api/slack_events.py -- Slack file_shared 이벤트 처리 -- files:read 스코프 확인 필요 +### 현재 코드 위치 및 상태 +- **파일 추출**: rb8001/app/router/slack_handler.py:244 + ```python + files = event.get("files", []) # 파일 추출만 함 + ``` +- **context 전달**: 265행에서 context에 files 포함 +- **처리 로직**: 없음 (파일 다운로드, skill-rag-file 호출 코드 없음) -### 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 - } - ) -``` +### 수정 필요 위치 +- **rb8001/app/router/slack_handler.py**: 244행 이후 파일 처리 추가 +- skill-rag-file:8508 호출 구현 필요 +- bot_token 활용한 Slack 파일 다운로드 필요 -## 4. skill-rag-file 구현 필요사항 +## 4. skill-rag-file 현황 (51124) -### 엔드포인트 -- POST /upload: 파일 수신 및 처리 -- POST /search: 벡터 검색 +### API 엔드포인트 (구현은 되어 있으나 기능 미완성) +- POST /api/upload: 파일 업로드 +- GET /api/search: 검색 +- GET /api/search/collections: 컬렉션 목록 - GET /healthz: 헬스체크 -### 주요 기능 -- Slack 파일 다운로드 (bot_token 사용) -- 텍스트 추출 (PyPDF2, python-docx) -- PostgreSQL team_document 저장 -- ChromaDB rb8001_{team_id}_documents 벡터화 +### 네트워크 연결 상태 +- rb8001 → skill-rag-file:8508: 연결 가능 (확인됨) +- 컨테이너 네트워크: host 모드 사용 -## 5. 테이블 생성 (51123) +## 5. 데이터베이스 상태 (51123 PostgreSQL) + +### team_document 테이블 (생성 완료) ```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 -); +-- 실제 생성된 테이블 구조 +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 +file_size BIGINT +mime_type VARCHAR(100) +storage_path TEXT NOT NULL +text_content TEXT +chunk_count INTEGER DEFAULT 0 +processing_status VARCHAR(20) DEFAULT 'pending' +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); +-- 인덱스 +idx_team_doc_hash UNIQUE (team_id, file_hash) ``` -## 6. 확인 사항 -- [ ] rb8001 Slack 앱 files:read 스코프 -- [ ] skill-rag-file Git 레포 실제 구현 -- [ ] 51124 서버 Docker 컨테이너 배포 -- [ ] /mnt/51123data/documents/ 마운트 확인 \ No newline at end of file +## 6. 확인 완료 사항 +- ✅ team_document 테이블 생성됨 +- ✅ /mnt/hdd/data/documents/ 디렉터리 생성됨 +- ✅ Slack bot_token 2개 팀 보유 (Robeing, Company-X Team) +- ✅ files:read 스코프 포함 (설치 URL에서 확인) +- ✅ rb8001 → skill-rag-file:8508 네트워크 연결 가능 + +## 7. 로컬 개발자 작업 필요 +- rb8001/app/router/slack_handler.py:244 이후 파일 처리 코드 추가 +- skill-rag-file 전체 구현 (Slack 파일 다운로드, 텍스트 추출, DB 저장) \ No newline at end of file