docs: reflect current OCR fallback with quality heuristics; augment troubleshooting with OCR step and quality metrics
This commit is contained in:
parent
76f4da4d97
commit
f9342c8279
@ -12,7 +12,10 @@
|
|||||||
- 운영 표준: `/healthz` 헬스체크 일관화(main.py/Dockerfile/compose/workflows), 로그 30일 롤링(`/mnt/hdd/logs/`)
|
- 운영 표준: `/healthz` 헬스체크 일관화(main.py/Dockerfile/compose/workflows), 로그 30일 롤링(`/mnt/hdd/logs/`)
|
||||||
|
|
||||||
## 1) 아키텍처 개요
|
## 1) 아키텍처 개요
|
||||||
- 흐름: 업로드 → (PDF/이미지 분기) → skill-ocr HTTP 호출 → 텍스트/블록/메타 → RAG(ChromaDB) 저장 → 응답
|
- 흐름(현재 적용 상태): 업로드 → (PDF/이미지 분기)
|
||||||
|
1) skill-rag-file 내장 추출(PyPDF2 등) 시도 → 품질 휴리스틱 검사(len, garbage_ratio, unique_chars)
|
||||||
|
2) 품질이 낮으면 강제 OCR(pytesseract+pdf2image) 재추출 → RAG(ChromaDB) 저장 → 응답
|
||||||
|
3) LangGraph: 업로드 실패/저품질 감지 시 안전 파일명 재시도 및 스니펫 주입
|
||||||
- 컴포넌트
|
- 컴포넌트
|
||||||
- rb*: 클라이언트 요청 처리, 파일 유형 판별, skill-ocr 호출만 담당
|
- rb*: 클라이언트 요청 처리, 파일 유형 판별, skill-ocr 호출만 담당
|
||||||
- skill-ocr(8506): OCR 파이프라인 수행(PDF: OCRmyPDF, 이미지: PaddleOCR 등)
|
- skill-ocr(8506): OCR 파이프라인 수행(PDF: OCRmyPDF, 이미지: PaddleOCR 등)
|
||||||
@ -20,7 +23,8 @@
|
|||||||
- Vector DB: ChromaDB(텍스트 조각) + PostgreSQL(메타)
|
- Vector DB: ChromaDB(텍스트 조각) + PostgreSQL(메타)
|
||||||
|
|
||||||
## 2) 1단계 — MVP(즉시)
|
## 2) 1단계 — MVP(즉시)
|
||||||
- PDF: OCRmyPDF + Tesseract 5(kor+eng)
|
- PDF: OCRmyPDF + Tesseract 5(kor+eng) (로드맵)
|
||||||
|
- 현재: skill-rag-file 내장 pytesseract OCR 폴백 + 품질 휴리스틱으로 강제 전환 적용
|
||||||
- 장점: 자동 전처리(회전/디스큐/노이즈), 검색가능 PDF 생성, 안정/단순
|
- 장점: 자동 전처리(회전/디스큐/노이즈), 검색가능 PDF 생성, 안정/단순
|
||||||
- 권장 옵션: `--rotate-pages --deskew --optimize 3 --jobs N`
|
- 권장 옵션: `--rotate-pages --deskew --optimize 3 --jobs N`
|
||||||
- 이미지/모바일: PaddleOCR(PP-OCR 계열, det+cls+rec_korean)
|
- 이미지/모바일: PaddleOCR(PP-OCR 계열, det+cls+rec_korean)
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
- 파일: `rb8001/app/router/slack_handler.py`
|
- 파일: `rb8001/app/router/slack_handler.py`
|
||||||
- 스레드별 문서 고정: `thread_ts → {team_id, document_ids}` 캐시 저장, 후속 질의 RAG 검색 결과를 해당 문서로 제한.
|
- 스레드별 문서 고정: `thread_ts → {team_id, document_ids}` 캐시 저장, 후속 질의 RAG 검색 결과를 해당 문서로 제한.
|
||||||
- 파일: `rb8001/app/router/thread_doc_cache.py`, `rb8001/app/router/slack_handler.py`
|
- 파일: `rb8001/app/router/thread_doc_cache.py`, `rb8001/app/router/slack_handler.py`
|
||||||
|
- PDF 추출 품질 개선: 품질 휴리스틱(len, garbage_ratio, unique_chars)로 저품질 텍스트 시 강제 OCR(pytesseract) 후 재청킹/인덱싱, 메타 기록(ocr_used, quality)
|
||||||
|
- 파일: `skill-rag-file/app/api/upload.py`, `skill-rag-file/app/services/text_extractor.py`
|
||||||
- (선행) 윤리 노출/모델 고정/메모리 위생:
|
- (선행) 윤리 노출/모델 고정/메모리 위생:
|
||||||
- 윤리 설명 사용자 비노출, 공정성 오탐 감소, 정적 대안 제거.
|
- 윤리 설명 사용자 비노출, 공정성 오탐 감소, 정적 대안 제거.
|
||||||
- `gemini-2.5-flash-lite` 단일 모델 고정 및 중복 초기화 제거.
|
- `gemini-2.5-flash-lite` 단일 모델 고정 및 중복 초기화 제거.
|
||||||
@ -45,6 +47,7 @@
|
|||||||
- 기대 로그 흐름:
|
- 기대 로그 흐름:
|
||||||
- “파일 분석 중…” → “로빙 중…” 진행 메시지 표시
|
- “파일 분석 중…” → “로빙 중…” 진행 메시지 표시
|
||||||
- LangGraph 업로드/인덱싱 완료 후 `[Graph] Injected … snippet(s)` 로그
|
- LangGraph 업로드/인덱싱 완료 후 `[Graph] Injected … snippet(s)` 로그
|
||||||
|
- PDF 저품질 케이스: 업로드 로그에 `ocr_used: true`, `quality.garbage_ratio` 개선 확인
|
||||||
- Router result의 content가 문서 스니펫 기반 분석으로 생성
|
- Router result의 content가 문서 스니펫 기반 분석으로 생성
|
||||||
|
|
||||||
2) 비텍스트/변경 이벤트 무시 확인
|
2) 비텍스트/변경 이벤트 무시 확인
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user