문서 처리 (AI_EXTRACT, AI_PARSE_DOCUMENT, Document AI 종료)
2026년 3월 Document AI 화면과 PREDICT 메서드가 종료된 뒤의 문서 처리 방법, AI_PARSE_DOCUMENT 로 텍스트와 레이아웃을 뽑고 AI_EXTRACT 로 필드를 추출하는 파이프라인, 스테이지 준비, 비용과 한계를 정리합니다.
Document AI 는 끝났습니다
Snowflake 는 2026년 3월 16일 Document AI 의 화면(UI)과 <모델 빌드 이름>!PREDICT 메서드를 종료했습니다. 기존 모델 빌드는 화면에서 볼 수 없고, Model Registry 로 옮기지 않은 모델은 추론에 쓸 수 없습니다. 대신 문서 추출은 arctic-extract 모델 기반의 AI_EXTRACT 함수로 옮겨 왔습니다.
| 예전 (Document AI) | 지금 |
|---|---|
| 화면에서 모델 빌드, 주석 달기, 학습 | Document Processing Playground (2026-01 GA) 에서 프롬프트 시험, 필요하면 arctic-extract 미세 조정 (2026-04 GA) |
model!PREDICT(GET_PRESIGNED_URL(...)) | AI_EXTRACT(file => TO_FILE(...), responseFormat => ...) |
| Document AI 의 기존 과금 방식 | 토큰 단위 과금 (공식 문서도 비용이 달라진다고 안내) |
주의 Model Registry 로 옮긴 예전 모델은
AI_EXTRACT의 Document AI 레거시 모델 방식으로 추론은 되지만 새로 미세 조정할 수는 없습니다. 장기적으로는 프롬프트 기반 추출이나 arctic-extract 미세 조정으로 다시 만드는 편이 낫습니다.
도구 고르기
| 함수 | 결과 | 쓰임 |
|---|---|---|
AI_PARSE_DOCUMENT (OCR 모드) | 텍스트 | 스캔 문서 글자 뽑기 |
AI_PARSE_DOCUMENT (LAYOUT 모드) | 표와 제목 구조를 살린 Markdown | RAG 용 청크, 표 보존 |
AI_PARSE_DOCUMENT 이미지 추출 | 문서 안 그림 | 그림 설명, 멀티모달 검색 (2026-04 GA) |
AI_EXTRACT | 정해진 질문에 대한 값 (JSON) | 송장 번호, 금액, 계약 당사자 |
AI_COMPLETE 문서 입력 | 자유 생성 | 문서 요약, 질의응답 (2026-04 GA) |
AI_CLASSIFY 문서 분류 | 범주 | 문서 종류 나누기 (2026-05 PuPr) |
스테이지 준비
CREATE STAGE docs.invoices
DIRECTORY = (ENABLE = TRUE)
ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE'); -- 서버 측 암호화
-- 파일 올리기 (Snowflake CLI 예)
-- snow stage copy ./invoices/*.pdf @docs.invoices --overwrite
ALTER STAGE docs.invoices REFRESH; -- 디렉터리 테이블 갱신
SELECT relative_path, size FROM DIRECTORY(@docs.invoices);예전에는 내부 스테이지가 서버 측 암호화여야 했지만, 2026년 8월부터 클라이언트 측 암호화 스테이지와 네트워크가 제한된 계정에서도 AI_EXTRACT 와 AI_PARSE_DOCUMENT 를 쓸 수 있습니다 (GA).
텍스트와 레이아웃 뽑기
CREATE OR REPLACE TABLE docs.parsed AS
SELECT relative_path,
AI_PARSE_DOCUMENT(TO_FILE('@docs.invoices', relative_path),
{'mode': 'LAYOUT', 'page_split': TRUE}) AS parsed
FROM DIRECTORY(@docs.invoices);- 2026년 4월 페이지 한도가 2,000 페이지로 늘었고, OCR 품질 개선이 5월에 반영되었습니다.
- 페이지 필터로 필요한 페이지만 처리하면 토큰을 아낍니다.
- LAYOUT 결과를 청크로 나눠 Cortex Search 에 넣으면 문서 검색과 RAG 가 됩니다.
필드 추출 (AI_EXTRACT)
SELECT relative_path,
AI_EXTRACT(
file => TO_FILE('@docs.invoices', relative_path),
responseFormat => {
'invoice_no': '송장 번호는?',
'issue_date': '발행일은? YYYY-MM-DD 로',
'total': '부가세 포함 총액은? 숫자만',
'vendor': '공급자 회사 이름은?'
}
) AS fields
FROM DIRECTORY(@docs.invoices);
-- 결과 꺼내기
SELECT fields:response:invoice_no::STRING AS invoice_no,
TRY_TO_NUMBER(fields:response:total::STRING) AS total
FROM ...;- 질문은 짧고 형식을 분명하게 씁니다. 날짜, 숫자 형식을 지정하면 후처리가 쉬워집니다.
- 표 형태의 값(품목 목록)은 JSON 스키마 형식의
responseFormat으로 배열을 받을 수 있습니다. - 2026년 3월 큰 문서를 빠르게 처리하는 scale factor 매개변수가, 5월 필드별 추출 점수(extraction scores) 가 GA 가 되었습니다. 점수가 낮은 건만 사람이 검토하는 흐름을 만들 수 있습니다.
운영 파이프라인
- 버킷이나 내부 스테이지에 문서가 들어오면 디렉터리 테이블 위의 스트림이 새 파일을 잡습니다.
- 트리거 태스크가 새 파일에만
AI_EXTRACT를 실행해 결과 테이블에 넣습니다. - 추출 점수가 낮거나 필수 필드가 비면 검토 큐 테이블로 보냅니다.
- 원본 PDF 경로와 추출 결과를 함께 남겨 감사에 대비합니다.
CREATE STREAM docs.invoices_new ON STAGE docs.invoices;
CREATE TASK docs.t_extract
TARGET_COMPLETION_INTERVAL = '15 MINUTES'
WHEN SYSTEM$STREAM_HAS_DATA('docs.invoices_new')
AS
INSERT INTO docs.invoice_fields
SELECT relative_path, AI_EXTRACT(file => TO_FILE('@docs.invoices', relative_path), responseFormat => {...})
FROM docs.invoices_new WHERE METADATA$ACTION = 'INSERT';
비용과 한계
- 문서 함수는 토큰 단위 AI Credits 로 과금됩니다. 페이지 수와 해상도가 토큰을 좌우하므로 쓸데없는 페이지는 빼고 처리합니다.
- 실행 쿼리의 웨어하우스 시간이 따로 듭니다. 작은 웨어하우스로 충분합니다.
- 지원 파일 형식, 파일 크기, 페이지 한도, 리전 가용성은 함수마다 다르므로 공식 표를 확인합니다. 2026년 7월에는 GCP 중동(Dammam) 리전에도 들어왔습니다.
트러블슈팅
증상:
AI_EXTRACT가 일부 문서에서 NULL 만 돌려줍니다.원인: 스캔 품질이 낮거나, 질문이 문서 표현과 맞지 않거나, 페이지 한도를 넘었습니다.
해결:
AI_PARSE_DOCUMENT로 그 문서의 텍스트가 제대로 나오는지 먼저 보고, 질문을 문서에 쓰인 용어로 바꿉니다. 반복되는 양식이라면 arctic-extract 미세 조정을 검토합니다.증상: 예전
!PREDICT를 쓰던 태스크가 3월 이후 실패합니다.원인: Document AI 종료입니다.
해결: 모델을 Model Registry 로 옮겼다면
AI_EXTRACT레거시 모델 방식으로, 아니면 프롬프트 기반AI_EXTRACT로 파이프라인을 다시 씁니다.