---
name: skill-rag-file
description: PDF·DOCX·스프레드시트·텍스트 등 문서 파일을 RAG로 처리·검색한다. 사용자가 문서 파일을 첨부했거나 "이 문서 분석해줘", "계약서 위험 조항 찾아줘", "IR 자료 요약해줘" 등 문서 기반 요청을 할 때 사용한다. 텍스트가 거의 없어도 첨부 메타가 문서면 이 스킬이 1차 후보다.
---

# skill-rag-file

RAG(Retrieval-Augmented Generation) 파일 처리 스킬. 포트 8508.

## Trigger

- `document_analysis`: 문서 분석, 파일 요약, 계약서/IR 자료 정리
- `companyx-rag`: Company X 내부 문서 근거 검색 (별도 SKILL 참조)
- 첨부 파일 조건 (확장자): `.pdf`, `.docx`, `.doc`, `.xlsx`, `.xls`, `.pptx`, `.ppt`, `.txt`, `.md`, `.csv`, `.tsv`, `.json`, `.xml`, `.html`, `.htm`
- 첨부 파일 조건 (MIME): `application/pdf`, `application/vnd.openxmlformats-officedocument.*`, `application/msword`, `application/vnd.ms-excel`, `application/vnd.ms-powerpoint`, `text/*`, `application/json`, `text/csv` 등 문서·텍스트 상위군
- 무텍스트·단문: 본문이 비어 있거나 짧아도 첨부 메타가 문서군이면 1차 후보
- 오디오·이미지 단독 첨부는 이 스킬의 1차 후보가 아님

## Do

- PDF, DOCX, TXT 텍스트 추출
- ChromaDB 벡터 저장 및 의미 검색
- 팀별 문서 격리
- skill-embedding(8515) 연동

## Do Not

- 팀 경계 밖 문서 검색 금지
- 원본 파일 무단 외부 노출 금지
- 오디오 미지원: `.m4a`, `.mp3`, `.wav`, `.aac`, `.ogg`, `.flac`, `.opus`, `.webm` 등 오디오 파일 전사·분석·RAG 처리 금지. 이 역할은 `whisper`가 담당
- 이미지 단독 미지원: `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif` 등 이미지만 첨부된 경우 비대상
- 실행·스크립트·압축 파일 및 알 수 없는 바이너리 처리 금지

## 연계 (선행 스킬)

- `whisper`로 전사된 텍스트를 사용자가 붙여 넣었거나 직전 턴 전사 결과를 인용하면서 문서 기반 요청을 하면, 문서 파일 첨부가 없어도 본 스킬 후보가 될 수 있다.
- 사용자가 오디오 파일을 첨부한 채 분석을 요청하면 오디오는 `whisper`가 먼저 처리하고, 본 스킬은 오디오 바이너리를 직접 받지 않는다.

## API

- `POST /upload` - 파일 업로드 및 처리
- `POST /search` - RAG 검색
- `GET /healthz` - 헬스체크

## OCR

- 모델: `OCR_MODEL=gemini-2.0-flash` (runtime.env SSOT)
- 용도: 이미지 기반 PDF 텍스트 추출 (text_length 부족 시 선별 적용)
- 벤치마크: 3.4초/페이지, 2.3초/MB — 속도+품질 최적 ([리서치](../../journey/research/rag/260320_OCR_모델_벤치마크_리서치.md))
- IR덱 평가 시 텍스트 추출 실패 → OCR fallback 자동 동작 (`ir_deck_workflow.py`)

## 환경변수

- `DATABASE_URL`, `CHROMA_HOST`, `EMBEDDING_SERVICE_URL`, `DOCUMENT_BASE_PATH`
- `OCR_MODEL` — OCR 모델 (기본: gemini-2.0-flash)
