비전 모드는 기본적으로 자동입니다. 구성한 모델에 비전 지원이 활성화되어 있으면, 업로드된 문서는 해당 형식에 사용 가능한 가장 풍부한 처리 파이프라인을 사용합니다.
형식 지원 매트릭스
각 문서 형식에는 전용 처리 파이프라인이 있습니다. 모델이 비전을 지원하는지 여부에 따라 동작이 변경됩니다.| 형식 | 텍스트 추출 | 비전 모드 (supports_vision=ON) | 폴백 (supports_vision=OFF) |
|---|---|---|---|
| pdfplumber (페이지별 텍스트) | 스마트 처리: 텍스트가 풍부한 페이지는 텍스트 + 임베드된 이미지 추출 (토큰 효율적); 스캔/이미지 전용 페이지는 PyMuPDF를 통해 전체 페이지 PNG로 렌더링 | 텍스트 추출만 수행; 에이전트가 read_uploaded_file 도구를 통해 읽음 | |
| DOCX / DOC | markitdown (마크다운 변환) | python-docx를 통해 [Figure N] 위치 마커로 임베드된 이미지 추출 | 텍스트 추출만 수행; 이미지 손실 |
| PPTX / PPT | markitdown (각 슬라이드의 텍스트) | python-pptx를 통해 [Figure N] 마커 및 슬라이드 구분자로 임베드된 이미지 추출 | 텍스트 추출만 수행; 슬라이드 시각 자료 손실 |
| XLSX / XLS | markitdown (테이블 구조 보존) | 텍스트 모드와 동일 (테이블은 비전의 이점을 얻지 못함) | 동일 |
| 이미지 (JPG, PNG, GIF, WebP) | 해당 없음 | image_url 비전 콘텐츠 블록으로 전송 | [Attached image: filename]으로 주석 처리됨 — 모델이 인식하지만 콘텐츠를 볼 수 없음 |
| 텍스트 파일 (TXT, MD, PY, JS, HTML, CSV, JSON) | 직접 읽기 / 파싱 | 해당 없음 (텍스트는 텍스트) | 동일 |
작동 방식
사용자가 대화에 문서를 업로드하면 FIM One은 파일 유형과 모델 기능을 기반으로 처리 파이프라인을 실행합니다:파일 유형 감지
시스템은 파일 확장자와 MIME 유형으로 문서 형식을 식별한 후 적절한 추출 파이프라인을 선택합니다. 업로드된 각 파일에는 UUID
file_id가 태그되며, 이는 메시지 컨텍스트에 주입되어 에이전트가 read_uploaded_file 도구를 통해 직접 접근할 수 있습니다.텍스트 추출
비전 지원 여부와 관계없이 시스템은 항상 텍스트 콘텐츠를 추출합니다. PDF는 페이지별 텍스트 추출을 위해 pdfplumber를 사용합니다. Office 형식은 Markdown 변환을 위해 markitdown을 사용합니다. 텍스트 파일은 직접 읽습니다.
비전 처리 (지원되는 경우)
모델이
supports_vision=true를 가지고 있고 문서가 지원되는 유형인 경우:- PDF (스마트 처리): 각 페이지를 분석합니다 — 텍스트가 풍부한 페이지는 텍스트와 포함된 이미지를 별도로 추출하고(토큰 절약), 스캔되거나 이미지만 있는 페이지는 최대 충실도를 위해 구성된 DPI에서 전체 페이지 PNG로 렌더링합니다
- DOCX / PPTX: 포함된 이미지를 문서 XML에서
[Figure N]위치 마커와 함께 추출합니다 - 이미지: 비전 콘텐츠 블록으로 직접 전달됩니다
비전 모드 구성
문서 처리 방식을 제어하는 세 가지 방법이 있으며, 가장 구체적인 것부터 가장 일반적인 것 순서로 나열되어 있습니다.1. 모델별 토글
Admin > Models > Edit > Advanced로 이동하여 Vision Support 체크박스를 토글합니다. 이것이 주요 제어 방식입니다 — 특정 모델이 이미지 콘텐츠를 수락할 수 있는지 여부를 시스템에 알립니다.2. 전역 환경 변수
환경에서DOCUMENT_PROCESSING_MODE를 설정하여 시스템 전체의 기본 동작을 재정의합니다:
3. 요청별 매개변수
채팅 API에서doc_mode 매개변수를 전달하여 단일 요청에 대한 처리를 제어합니다:
auto 모드(기본값)는 모델이 supports_vision=true를 가지고 있고 문서가 비전 처리의 이점을 얻는 유형일 때 비전을 사용합니다. 이것은 대부분의 배포에 권장되는 설정입니다.환경 변수
| 변수 | 기본값 | 설명 |
|---|---|---|
DOCUMENT_PROCESSING_MODE | auto | 처리 전략: auto (사용 가능할 때 비전 사용), vision (항상 렌더링), text (렌더링 안 함) |
DOCUMENT_VISION_DPI | 150 | PDF 렌더링 해상도(인치당 도트 수). 높은 값은 더 나은 품질을 제공하지만 더 많은 토큰을 소비합니다 |
DOCUMENT_VISION_MAX_PAGES | 20 | 이미지로 렌더링할 최대 PDF 페이지 수. 이 한계를 초과하는 페이지는 텍스트 추출로 대체됩니다 |
토큰 비용 고려사항
비전 콘텐츠는 일반 텍스트보다 훨씬 더 많은 토큰을 소비합니다. 비용 트레이드오프를 이해하면 시스템을 적절하게 구성하는 데 도움이 됩니다. 대략적인 추정:| 시나리오 | 대략적인 토큰 비용 |
|---|---|
| 150 DPI의 PDF 한 페이지 | 1,000 — 2,000 토큰 |
| 비전 모드의 10페이지 PDF | 10,000 — 20,000 토큰 |
| 동일한 10페이지 PDF (텍스트만) | 2,000 — 5,000 토큰 |
| 포함된 DOCX 이미지 하나 | 500 — 1,500 토큰 |
비용 최적화 팁
DOCUMENT_VISION_MAX_PAGES를 합리적인 수준(예: 10)으로 설정 - 일반적인 사용에 적합합니다DOCUMENT_VISION_DPI를 150에서 100으로 낮추기 - 이미지 품질이 허용 가능한 경우, 토큰 소비를 약 40% 줄입니다- 레이아웃이 중요하지 않은 문서에는
text모드 사용 (예: 일반 텍스트 보고서, 스프레드시트) - 레이아웃이 중요한 문서에는
vision모드 선택적 사용 (예: 송장, 양식, 다이어그램)
설계 결정 사항 및 제한 사항
LibreOffice를 전체 페이지 렌더링에 사용하지 않는 이유
LibreOffice는 DOCX 및 PPTX 파일의 픽셀 완벽한 페이지 렌더링을 생성할 수 있지만, Docker 이미지에 약 4GB를 추가합니다. 대신 FIM One은 python-docx 및 python-pptx를 사용하여 문서 XML에서 직접 임베드된 이미지를 추출합니다. 이 두 라이브러리는 이미 markitdown의 전이적 종속성이므로 추가 설치 오버헤드가 없습니다. 트레이드오프: 실제 임베드된 이미지를 전체 품질로 얻을 수 있지만 페이지 레이아웃 컨텍스트는 손실됩니다.[Figure N] 위치 표시자는 LLM이 텍스트와 이미지를 연관시키는 데 도움이 되지만, 공간 관계는 정확하기보다는 대략적입니다.
LibreOffice 없이 손실되는 것
| 손실 요소 | 영향 |
|---|---|
| 텍스트 서식 (굵게, 기울임, 글꼴 크기) | LLM이 일반 텍스트만 수신 |
| 이미지-텍스트 공간 배치 | [Figure N] 마커가 근사하지만 정확한 배치를 표시하지 않음 |
| Office에서 생성한 차트 (이미지로 포함되지 않음) | XML 정의 차트가 추출되지 않음 |
| DOCX의 페이지 머리글 및 바닥글 | markitdown에 의해 부분적으로 보존됨 |
PDF Vision vs. DOCX/PPTX Vision
비전 처리의 품질은 형식에 따라 다릅니다:- PDF — 스마트한 페이지별 처리. 텍스트가 풍부한 페이지는 텍스트 콘텐츠와 포함된 이미지를 별도로 추출하므로 토큰 효율성이 훨씬 높습니다. 스캔되거나 이미지만 있는 페이지(예: 촬영된 문서, 스캔된 계약서)는 최대 시각적 충실도를 위해 전체 페이지 PNG 이미지로 렌더링됩니다. 이 적응형 접근 방식은 품질과 토큰 비용의 균형을 자동으로 맞춥니다.
- DOCX / PPTX — 텍스트 콘텐츠와 추출된 포함 이미지. 대부분의 비즈니스 문서에 적합하지만 페이지 레이아웃과 형식은 보존되지 않습니다.
자동 폴백
모델이 비전 지원으로 구성되었지만 런타임에 실제로 이미지 콘텐츠를 거부하는 경우, 시스템은 자동으로 문서 이미지 없이 요청을 다시 시도합니다. 사용자가 업로드한 이미지(예: 사용자가 첨부한 스크린샷)는 재시도 시 유지되며, 문서에서 파생된 이미지만 제거됩니다.이 폴백 메커니즘은 잘못 구성된 비전 설정으로 인한 작업 실패를 방지합니다. 모델이 지속적으로 폴백되는 것을 확인하면 Admin > Models에서 해당 비전 지원 구성을 확인하세요.
안전 가드레일
파일 무결성 보호
에이전트가 파일을 읽을 수 없을 때(예: 비전이 활성화되지 않은 이미지 기반 PDF), 시스템 수준의 보호장치는 에이전트가 다른 파일의 콘텐츠를 대체하는 것을 방지합니다. 이 보호 없이는 에이전트가 접근 가능한 다른 파일을 읽고 그 콘텐츠를 대상 문서에서 온 것처럼 제시할 수 있습니다. 보호장치는 파일을 읽을 수 없을 때 에이전트가 관련 없는 출처에서 답변을 만들어내는 대신 제한 사항을 정직하게 보고하도록 보장합니다.설명적 오류 안내
read_uploaded_file 도구로 파일을 읽을 수 없을 때 오류 메시지에는 다음이 포함됩니다:
- 감지된 파일 유형 및 처리할 수 없는 이유
- 파일이 이미지 기반인 경우 모델에서 비전을 활성화하도록 제안
- 사용자가 시도할 수 있는 대체 접근 방식 (예: 다른 형식으로 내보내기)
모범 사례
관리자용
-
선택적으로 비전 활성화.
supports_vision을 실제로 이미지 입력을 지원하는 모델에만 활성화하세요. 잘못된 구성은 폴백 재시도 사이클에서 토큰을 낭비합니다. -
auto모드로 시작. 기본 동작은 대부분의 배포에 적합합니다 — 비전은 유용하고 사용 가능할 때 사용됩니다. -
토큰 사용량 모니터링. 비전을 활성화한 후 토큰 소비 대시보드를 확인하세요. 비용이 예상치 않게 급증하면
DOCUMENT_VISION_MAX_PAGES또는DOCUMENT_VISION_DPI를 조정하세요. -
미리 빌드된 샌드박스 이미지 사용.
Dockerfile.sandbox는 문서에 대한 AI 코드 실행에 필요한 일반적인 데이터 과학 패키지(pdfplumber, Pillow, pandas 등)를 포함합니다.docker compose를 통해 또는docker build -f Dockerfile.sandbox -t fim-sandbox .로 수동으로 빌드하여--network=none컨테이너에서 코드 실행이 작동하는지 확인하세요.
최종 사용자용
- PDF가 최고의 결과를 제공합니다. 시각적 충실도가 중요한 경우 Office 문서를 PDF로 내보낸 후 업로드하세요.
- 스프레드시트는 그대로 사용해도 됩니다. XLSX 파일은 구조화된 테이블로 추출되므로 비전이 추가 이점을 제공하지 않습니다.
- 큰 PDF는 잘릴 수 있습니다. 문서가
DOCUMENT_VISION_MAX_PAGES제한을 초과하면 처음 N개 페이지만 이미지로 렌더링됩니다. 나머지 페이지는 여전히 추출된 텍스트로 사용 가능합니다. - 이미지 품질이 중요합니다. 독립형 이미지 업로드의 경우 가능하면 고해상도 원본을 사용하세요. 압축되거나 저해상도 이미지는 모델의 세부 정보 추출 능력을 감소시킵니다.