AI 에이전트에게 2MB PDF를 주었더니 발생한 토큰 수의 변화
요약
AI 에이전트가 대용량 PDF를 처리할 때 발생하는 막대한 입력 토큰 비용과 비효율성을 분석합니다. Base64 인코딩이나 단순 텍text 추출 대신 MCP를 활용해 외부 전문 서비스에 작업을 위임하는 최적화 방안을 제시합니다.
핵심 포인트
- Base64 인코딩 방식은 토큰 소모가 매우 극심하여 지양해야 함
- 텍스트 추출 방식도 대용량 문서의 경우 높은 비용과 컨텍스트 점유 문제 발생
- 에이전트가 직접 계산하기보다 MCP를 통해 외부 도구에 위임하는 것이 효율적
- 입력 토큰 최적화는 에이전트 성능과 비용 관리의 핵심 요소임
에이전트가 파일 I/O (Input/Output)에 소비하는 모든 토큰은 낭비되는 추론 능력입니다.
저는 문서 처리 에이전트를 구축하고 있었습니다. 들어오는 연구 보고서를 읽고, 핵심 내용을 추출하며, 경영진 보고서를 작성하는 종류의 에이전트 말이죠. 특별할 것 없는, 현재 수천 개의 팀이 자동화하고 있는 바로 그 워크플로우(Workflow)입니다.
테스트에 사용한 PDF는 2MB였습니다. 텍스트가 밀집된 전형적인 산업 연구 보고서였습니다.
이를 인라인(Inline)으로 처리할 때 발생하는 토큰 비용을 측정해 보니, 텍스트를 Claude의 컨텍스트(Context)에 넣는 데만 무려 **97,354개의 입력 토큰 (Input tokens)**이 소모되었습니다. claude-sonnet-4-6 가격 기준으로 문서당 0.29달러입니다. 한 달에 500개의 보고서를 처리하는 파이프라인(Pipeline)이라면, 에이전트가 단 한 단어의 출력물을 작성하기도 전에 월 150달러를 지출하게 됩니다.
이것이 바로 AI 에이전트 분야에서 아무도 이야기하지 않는 문제입니다. 모두가 프롬프트 엔지니어링 (Prompt engineering)과 출력 토큰 (Output tokens)을 최적화하려고 노력합니다. 하지만 숨겨진 비용은 바로 입력(Input)입니다. 즉, 에이전트가 유용한 작업을 수행하기 전에 컨텍스트에 밀어 넣는 파일, 콘텐츠, 원시 데이터(Raw data)들입니다.
토큰 수가 폭증하는 방식
에이전트에게 문서를 인라인으로 전달할 때, 다음 두 가지 중 하나가 발생합니다.
옵션 A — Base64 인코딩 (Base64 encoding). 바이너리 파일을 읽어 인코딩한 뒤 프롬프트에 포함시키는 방식입니다. 2MB의 PDF를 Base64로 변환하면 약 2.7MB의 텍스트가 됩니다. 토큰당 약 3.5자라고 가정하면, 에이전트가 단 한 단어도 읽기 전에 약 770,000개의 토큰이 소모됩니다. 이는 재앙적인 수준입니다. 절대 이렇게 하지 마세요.
옵션 B — 텍스트 추출 (Text extraction). 먼저 원시 텍스트 콘텐츠를 추출한 뒤 (pdftotext, PyMuPDF 또는 그와 유사한 도구 사용), 해당 텍스트를 에이전트에게 전달하는 방식입니다. 더 낫긴 하지만, 밀집된 콘텐츠를 가진 2MB PDF는 여전히 약 97,000개의 토큰에 달하는 추출된 텍스트를 생성합니다. 모든 단어, 모든 헤더, 모든 각주에 대해 비용을 지불하게 되는 셈입니다.
어떤 방식이든 문서 콘텐츠가 컨텍스트 윈도우 (Context window)를 점유하여 시스템 프롬프트 (System prompt)를 밀어내며, 당신은 추론 (Reasoning) 대신 파일 I/O에 돈을 낭비하게 됩니다.
대안: MCP를 통한 전문 서비스
Model Context Protocol (MCP)는 AI 에이전트를 외부 도구 및 서비스에 연결하기 위한 Anthropic의 개방형 표준입니다. 핵심 통찰은 간단합니다. 에이전트가 계산을 직접 *포함(contain)*할 필요는 없으며, 이를 *조율(orchestrate)*하기만 하면 된다는 것입니다.
파일 변환은 완벽한 예시입니다. PDF를 깔끔한 마크다운 (Markdown)으로 변환하는 것은 결정론적 (Deterministic)이고 CPU 집약적인 작업입니다. 이는 LLM의 추론 (Reasoning)을 필요로 하지 않습니다. 에이전트의 컨텍스트 윈도우 (Context window) 내부에서 이를 실행하는 것은 마치 못을 박기 위해 드라이버를 사용하는 것과 같습니다. 어느 정도 가능은 하겠지만, 왜 그렇게 하겠습니까?
에이전트가 전문 서비스에 작업을 위임할 때 동일한 2MB PDF 워크플로가 어떻게 변하는지 살펴보겠습니다:
2MB PDF 처리를 위한 에이전트 토큰 비용:
├── convert_from_url 호출: ~300 토큰
├── get_job_status 폴링: ~200 토큰
...
8,000 토큰 대 97,354 토큰. 12배 감소.
변환된 마크다운(PDF 인코딩 아티팩트가 없는 깔끔하고 구조화된 형태)은 외부에 저장됩니다. 에이전트는 URL을 돌려받습니다. 변환, 저장, 라우팅, 이메일 발송과 같은 많은 워크플로에서 에이전트는 전체 내용을 읽을 필요조차 없습니다. 내용에 대해 추론이 필요한 워크플로의 경우에도, 깔끔한 마크다운은 원본 추출 텍스트보다 40-50% 더 작습니다.
비용 차이: $0.029 대 $0.29. 문서당 10배 더 저렴합니다.
구체적인 예시
당신의 에이전트가 들어오는 업체 계약서를 처리한다고 가정해 봅시다. 워크플로는 다음과 같습니다: PDF 수신, 표준 형식으로 변환, 주요 날짜 및 의무 사항 추출, 결과 저장, 구매 부서 통지.
인라인 (Inline) 방식:
import anthropic, base64
client = anthropic.Anthropic()
...
비용: 출력 토큰이 발생하기 전, 2MB 계약서에 대한 입력 토큰 비용만 약 ~$2.31.
MCP 방식 (Botverse 사용 시):
Claude Desktop 설정 또는 에이전트 런타임에 MCP 서버를 한 번만 설정하십시오:
{
"mcpServers": {
"botverse": {
...
그러면 에이전트 프롬프트 (Prompt)는 다음과 같이 됩니다:
You have access to the Botverse MCP tools.
A new vendor contract has arrived at:
...
발생하는 일:
도구 호출 (Tool call): convert_from_url(url, "md")
→ job_id: "job_abc123", 예상 비용 (estimated_cost): $0.05
...
에이전트는 정제된 마크다운 (markdown)을 가져오며 (동일한 계약서 기준 약 35,000 토큰), 구조화된 데이터 (structured data)를 추출하고 출력을 생성합니다. 총 입력 토큰 (Total input tokens): 약 37,000개. $0.05의 Botverse 작업 비용을 포함한 총 비용: ~$0.16 vs $2.31.
한 달에 500개의 계약서를 처리하는 파이프라인 (pipeline)의 경우: $80 vs $1,155.
에이전트가 파일을 전혀 읽을 필요가 없는 경우
에이전트의 역할이 '이해 (comprehension)'가 아닌 '변환 (transformation)'일 때 이 패턴은 훨씬 더 강력해집니다.
다음 사례를 고려해 보십시오: "이번 주 이사회 회의록 전체를 DOCX에서 PDF로 변환하여 이사회 포털에 업로드해 줘."
에이전트는 내용을 읽을 필요가 없습니다. 에이전트가 해야 할 일은 다음과 같습니다:
- DOCX 파일 목록 가져오기 (Drive, S3 등 어디에서든)
- 각 파일에 대해:
convert_from_url(url, "pdf")를 호출하고, 출력 URL 받기 - 각 PDF를 이사회 포털에 업로드하기
문서당 총 에이전트 토큰 비용: 약 1,500 토큰 (세 번의 MCP 호출).
파일의 크기가 100MB, 1GB 등 임의로 커지더라도 토큰 비용은 변하지 않습니다.
이것이 파일 처리 에이전트를 위한 올바른 아키텍처 (architecture)입니다. 에이전트는 추론 (reasoning)하고, 전문 서비스 (specialist services)가 계산 (compute)합니다.
근본적인 원리
LLM의 컨텍스트 윈도우 (context windows)가 매우 커지고 있어서 이런 방식이 더 이상 중요하지 않다는 주장도 있습니다. Gemini 2.0 Pro는 200만(2M) 토큰을 지원하며, Claude는 20만(200K) 토큰을 지원합니다. 그냥 모든 것을 다 집어넣으면 된다는 논리입니다.
이 주장에는 두 가지 문제가 있습니다.
비용 (Cost). 거대한 컨텍스트 윈도우는 비용이 많이 듭니다. claude-sonnet-4-6에서 97,354개의 입력 토큰은 $0.29입니다. claude-opus-4-7에서는 $1.00이 넘습니다. 만약 당신의 에이전트가 대량의 데이터를 처리한다면, 필요하지 않은 계산 (compute)을 위해 엄청난 프리미엄을 지불하게 되는 것입니다.
성능 (Performance). LLM은 크고 노이즈가 많은 컨텍스트 (context)에서 특정 정보를 추출할 때 성능이 저하됩니다. "중간에서 길을 잃는 (lost in the middle)" 문제는 이미 잘 문서화되어 있습니다. 즉, 모델은 긴 입력값 속에 파묻힌 관련 콘텐츠에 주의를 기울이는 데 어려움을 겪습니다. 페이지 번호, 헤더, 그리고 곳곳에 포함된 인코딩 아티팩트 (encoding artifacts)가 섞인 가공되지 않은 PDF 추출 텍스트보다, 깔끔하고 잘 구조화된 마크다운 (markdown) 문서가 모델이 추론하기에 더 쉽습니다.
올바른 사고 모델: 에이전트가 파일 I/O에 사용하는 모든 토큰은 실제 문제 해결에 사용할 수 없는 추론 능력 (reasoning capacity)입니다.
시작하기
Botverse는 AI 에이전트를 위해 구축된 파일 처리용 MCP 네이티브 클라우드 API로, 비디오 트랜스코딩 (transcoding) 및 문서 변환을 제공합니다.
- botverse.cloud에서 가입 — 최소 $2.50 충전, 월간 수수료 없음
- 문서 변환: 작업당 $0.05 (md, html, docx, pdf, rst, txt, xlsx)
- 비디오 트랜스코딩: 기본 작업당 $0.25 (mp4, webm, ProRes, mp3, gif)
- Claude Desktop에 30초 만에 MCP 서버 추가: Smithery에서 "Botverse" 검색
이 기사의 벤치마크 수치는 claude-sonnet-4-6을 사용하여 두 가지 모드 모두에서 2MB 연구용 PDF를 처리한 결과에서 얻었습니다. https://botverse.cloud/benchmark
토큰 효율적인 파일 처리에 대해 다른 접근 방식이 있으신가요? 댓글로 알려주시면 감사하겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기