From 44896f1b1e4bd71215e998f3ffca06a1ce57a772 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 16 Sep 2025 23:54:13 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20skill-rag-file=20=EC=97=B0=EB=8F=99=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 중복 코드 제거 - 미해결 문제 추가 (파일 활용, 볼륨 마운트) - ChromaDB 검색 구조 설명 추가 --- ...916_rb8001_skill-rag-file_연동_구조.md | 67 ++++++++++--------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md b/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md index 01032f2..5ca51e4 100644 --- a/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md +++ b/troubleshooting/250916_rb8001_skill-rag-file_연동_구조.md @@ -72,30 +72,9 @@ brain_service/llm_service (파일 처리 없이 텍스트만 처리) ## 5. 데이터베이스 상태 (51123 PostgreSQL) ### team_document 테이블 상태 -**PostgreSQL 실제 테이블** (file_size, mime_type, chunk_count, processing_status 포함): -```sql -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 -``` - -**skill-rag-file 코드 모델** (app/models/database.py - 수정 완료): -```python -# 실제 테이블과 동기화됨 -id, team_id, filename, file_hash, file_size, mime_type, -storage_path, text_content, chunk_count, processing_status, -metadata, created_at, updated_at -``` +- 테이블과 모델 동기화 완료 +- file_size, mime_type, chunk_count, processing_status 컬럼 포함 +- 유니크 인덱스: idx_team_doc_hash (file_hash) ## 6. 확인 완료 사항 - ✅ team_document 테이블 생성됨 (코드 모델 동기화 완료) @@ -138,10 +117,36 @@ metadata, created_at, updated_at - API 응답: 200 OK ### 비동기 병렬 처리 구현 (2025-09-16) -- **문제**: 큰 파일(XLSX 10분) 처리 중 작은 파일(PDF) 대기 -- **해결**: asyncio.Semaphore(3)로 최대 3개 동시 처리 -- **구현**: - - process_single_file() 함수로 개별 파일 처리 분리 - - asyncio.gather()로 모든 파일 병렬 처리 - - 각 파일이 독립적으로 처리되어 작은 파일 빠른 응답 -- **결과**: 전체 처리 시간 단축, 사용자 경험 개선 \ No newline at end of file +- 문제: 큰 파일 처리 중 작은 파일 대기 +- 해결: asyncio.Semaphore(3)로 최대 3개 동시 처리 +- 결과: 전체 처리 시간 단축 + +## 9. 미해결 문제 (2025-09-16) + +### 파일 처리 후 로빙 활용 문제 +- **현상**: 파일이 skill-rag-file로 저장되지만 로빙이 파일 내용 모름 +- **원인**: process_slack_files_async와 process_slack_message_async가 독립 실행 +- **필요**: 파일 처리 완료 후 검색 결과를 LLM context에 포함 + +### ChromaDB 볼륨 마운트 불일치 +- **rb8001**: /home/admin/ivada_project/rb8001/chroma_db → /code/chroma_db (영구 저장) +- **skill-rag-file**: 볼륨 마운트 없음 (컨테이너 재시작 시 데이터 손실) +- **해결 필요**: skill-rag-file에도 영구 볼륨 마운트 추가 + +### 대화와 문서 분리 저장 구조 +- **설계 의도**: + - rb8001: 사용자 대화 임베딩 (짧고 자주 변경) + - skill-rag-file: 문서 임베딩 (크고 고정적) +- **장점**: 검색 성능 최적화, 용도별 처리 분리 +- **단점**: 두 컬렉션 간 연동 복잡도 증가 + +### ChromaDB 검색 구조 (API 통신) +- **현재 구조**: + - rb8001: 자체 ChromaDB에서만 검색 + - skill-rag-file: 자체 ChromaDB에서만 검색 + - 서로 직접 폴더 참조 없음 +- **문서 검색 플로우**: + 1. rb8001 → skill-rag-file API 호출 (http://localhost:8508/api/search) + 2. skill-rag-file이 자체 ChromaDB 검색 후 결과 반환 + 3. rb8001이 API 응답 받아서 LLM context에 포함 +- **결론**: API 통신으로 분리된 구조, 직접 폴더 참조 불필요 \ No newline at end of file