직장 동료에게 사소한 질문을 던졌는데, AI 에이전트가 내 최근 채팅과 문서를 조사해 정답을 찾아주었습니다. 그런데 비용이 38달러!!!나 나왔습니다. ROI(투자 대비 수익률)가 형편없었죠. 물론 제 시간도 가치 있지만, 실제로 그 시간을 쓸 일은 없었을 테고 이 작업에는 고가의 계획 수립 기능이 꼭 필요하지도 않았습니다.
더 나은 방법이 있습니다.
Google Cloud의 Gemini Enterprise Agent Platform은 Model Garden을 제공하며, Google, Anthropic, 심지어 xAI까지 주요 모델에 편리하게 API로 접근할 수 있습니다. 사실 Huggingface의 모든 모델을 직접 배포할 수도 있지만, 이번 글에서는 Anthropic의 새로운 Claude Fable 5.1과 Google의 새로운 Gemini 3.8 Flash에 집중하겠습니다. 이제 개발자들은 완전히 동일한 엔터프라이즈 API 인터페이스 뒤에 서로 다른 특성을 가진 프런티어 모델 두 가지를 두고 있게 되었습니다.
Fable 5.1은 Mythos급 자율 계획 능력, 100만 토큰 컨텍스트 윈도우, 그리고 심층적인 다단계 검증 기능을 제공합니다. 반면 Gemini 3.8 Flash는 거의 프런티어 수준의 추론력과 놀라운 토큰 처리 속도를 Flash 경제성(입력 토큰 백만 개당 $0.75, 출력 토큰 백만 개당 $3.75)으로 제공하며, 조절 가능한 사고 제어 기능도 갖추고 있습니다.
하나를 선택해서 모든 작업을 그곳으로 라우팅하는 것이 쉬워 보일 수 있습니다. 하지만 이는 실수입니다.
루틴한 개발 작업을 심층 계획 모델에 통과시키면, git diff를 분석하는 데 프런티어급 토큰 비용을 지불하는 셈입니다. 반대로 빠른 모델에게 공식적인 계획 없이 되돌릴 수 없는 데이터베이스 마이그레이션을 맡기면, 커피 한 잔 마시기도 전에 상태를 망가뜨리며 돌진할 것입니다.
두 개의 모델을 사용하고 작업을 라우팅함으로써 '토크노믹스'를 매우 간단하게 대폭 개선할 수 있습니다.

저자: Alan Blount (@zeroasterisk
다음은 이를 달성하기 위한 전체 가이드입니다:
- 단일 통합 거버넌스 플레인 뒤에 두 모델을 모두 구성합니다.
- 기본값을 설정하기 전에 루틴 작업을 벤치마킹합니다.
- 빠른 모델을 최전선 코디네이터로 사용하되, 더 많은 파워가 필요하거나 빠른 모델이 에스컬레이션해야 할 때는 심층 계획 모델을 사용합니다.
- 작업 ROI와 토큰의 가치(비용만이 아닌)에 대한 멘탈 모델을 형성합니다.
1. 단일 통합 거버넌스 플레인 뒤에 두 모델 모두 구성하기
LLM 추론 플랫폼을 선택하려면 다양한 설계 요소를 고려해야 합니다. 비용, 용량, 보안, 모델 선택, 서빙 기능, 개발자 마찰, 그리고 더 많은 보안(API 키는 위험할 수 있음). Gemini Enterprise Agent Platform(구 Vertex AI)은 독특한 기능을 갖춘 종합적인 옵션이며, Gemini와 Anthropic 모델을 모두 관리형 API로 노출하므로 하나의 안전한 인증으로 두 워크로드를 모두 커버할 수 있습니다.
하지만 솔직히 말하면, 일부 과정은 제가 원하는 것보다 마찰이 많습니다. 저는 "불가능한 일은 쉽지만, 쉬운 일은 어렵다"는 농담을 좋아합니다. 이 글을 쓰는 이유 중 하나이기도 하죠.
모델을 다루기 전에 gcloud에 로그인하고, 변형된 경우를 위해 문서를 읽어보세요.
1gcloud auth application-default login
Claude Fable 5.1에 액세스하려면 API를 활성화한 다음 Claude Fable 5.1을 활성화하고 사용 사례에 관한 간단한 양식을 작성해야 합니다. 하지만 아직 끝난 게 아닙니다.
이제 Fable은 Google Cloud의 Advanced AI Safety Addendum 대상입니다. aiplatform.googleapis.com으로 첫 프롬프트를 보내기 전에, 프로젝트 수준에서 프롬프트-응답 공유를 명시적으로 구성하고 퍼블리셔 약관을 수락해야 합니다.
글로벌 엔드포인트를 위한 정확한 작동 지침은 다음과 같으며, 변형된 경우를 위해 문서를 참조하세요.
먼저 도움이 될 변수 몇 개를 설정해 봅시다. URL 경로에 있는 모델 이름은 점(.)이 아닌 하이픈(-)을 사용한 claude-fable-5-1임을 주의하세요. 또한 프로젝트 ID와 위치를 입력하고, 지역에 따라 엔드포인트를 변경해야 할 수도 있습니다.
1export PROJECT_ID="YOUR_PROJECT_ID"2export LOCATION="global"3export MODEL="claude-fable-5-1"45# Global endpoint: aiplatform.googleapis.com (recommended)6# Multi-Regional endpoints: aiplatform.eu.rep.googleapis.com7# Regional endpoints: us-central1-aiplatform.googleapis.com8export ENDPOINT="https://aiplatform.googleapis.com"
다음으로 setPublisherModelConfig API를 호출하여 dataSharingEnabledProvider를 ANTHROPIC으로 설정합니다. 참고로 이는 전부 대문자여야 합니다:
1curl -X POST \2 -H "Authorization: Bearer $(gcloud auth print-access-token)" \3 -H "Content-Type: application/json; charset=utf-8" \4 -d '{ "publisherModelConfig": { "dataSharingEnabledProvider": "ANTHROPIC" } }' \5"${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/anthropic/models/${MODEL}:setPublisherModelConfig"
초기 호출은 데이터 공유가 활성화되었음을 확인하는 완료된 operation 객체를 반환합니다:
1{2 "name": "projects/YOUR_PROJECT_NUMBER/locations/global/operations/1234567",3 "metadata": {4 "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.SetPublisherModelConfigOperationMetadata",5 "genericMetadata": {6 "createTime": "...",7 "updateTime": "..."8 }9 },10 "done": true,11 "response": {12 "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.PublisherModelConfig",13 "loggingConfig": {},14 "dataSharingEnabledProvider": "ANTHROPIC"15 }16}
이미 이 작업을 수행했다면, 해당 설정이 이미 존재한다는 HTTP 409 오류가 발생할 것입니다:
1409 ALREADY_EXISTS: The same PublisherModelConfig already exists.
이 409 오류는 전혀 문제가 되지 않습니다.
모델에 대한 액세스를 테스트해 보면 응답을 받을 수 있어야 합니다:
1curl -X POST \2 -H "Authorization: Bearer $(gcloud auth print-access-token)" \3 -H "Content-Type: application/json; charset=utf-8" \4 -d '{"anthropic_version": "vertex-2023-10-16","messages": [{"role": "user", "content": "Hello world."}], "max_tokens": 1024, "stream": true}' \5"${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/anthropic/models/${MODEL}:streamRawPredict"
이를 올바르게 수행하지 않았다면 다음과 같은 HTTP 403 오류가 발생합니다:
1403 PERMISSION_DENIED: Access to this model requires data sharing to be enabled for publisher 'anthropic'. Please set `PublisherModelConfig.data_sharing_enabled_provider`2to 'anthropic' via the setPublisherModelConfig API to use this model.
Gemini 3.8 Flash에 액세스하려면 모델 카드에서 활성화됨으로 표시되어 있는지 확인하면 됩니다. 그러면 바로 작동할 것입니다:
1curl -X POST \2 -H "Authorization: Bearer $(gcloud auth print-access-token)" \3 -H "Content-Type: application/json; charset=utf-8" \4 -d '{"contents": [{"role": "user", "parts": [{"text": "Hello world"}]}],"generationConfig": {"thinkingConfig": {"thinkingLevel": "LOW"}}}' \5"${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/gemini-3.8-flash:streamGenerateContent"
… 후아. 해냈습니다 🎉!
더 많은 쿼터가 필요하신가요? 모든 모델에 대해 쿼터를 관리할 수 있으며, 일부 모델의 경우 프로비저닝된 처리량을 결제할 수 있습니다.
2. 벤치마크를 믿지 말고, 직접 실행하세요
다섯 명의 엔지니어에게 에이전트 설정에 어떤 모델을 사용할지 물어보면, Twitter 분위기와 합성 리더보드에 기반한 다섯 개 이상의 상반된 의견을 들을 수 있을 것입니다.
공개 벤치마크는 훌륭한 자원이지만, 고립된 프롬프트나 점점 더 진공 상태에서의 태스크를 테스트합니다. 프로덕션 사용 사례나 로컬 에이전트 SDLC 에이전트는 공개 벤치마크와 완벽하게 일치하지 않습니다. 당신의 업무는 오늘날 어떤 벤치마크와도 다르게 형성됩니다.
따라서 자체 벤치마크를 구축(Agent Ops와 Evals 만세!)하고 대규모로 자동화할 수도 있지만, 단순히 간단한 태스크들을 나란히(side-by-side) 수행해 볼 수도 있습니다. 태스크 내에서 파일을 변경하지 않는 한 괜찮을 것이며, 거의 노력 없이도 태스크에 대한 감을 잡을 수 있습니다.
promptfoo를 사용하여 각 모델로 동일한 2개의 태스크를 opencode가 수행하도록 하는 예시입니다. 이를 작동시키려면 태스크 설명을 변경하고 환경을 설정해야 하지만, 너무 어렵지는 않을 것입니다.

GIF
1# opencode.json2{3 "$schema": "https://opencode.ai/config.json",4 "provider": {5 "google-vertex": {6 "options": { "project": "alanblount-demo", "location": "global" },7 "models": {8 "gemini-3.8-flash": { "id": "gemini-3.8-flash", "name": "Gemini 3.8 Flash" }9 }10 },11 "google-vertex-anthropic": {12 "options": { "project": "alanblount-demo", "location": "global" },13 "models": {14 "claude-fable-5-1": { "id": "claude-fable-5-1", "name": "Claude Fable 5.1" }15 }16 }17 },18...
Promptfoo를 설정하여 단일 프롬프트와 모델뿐만 아니라 opencode 에이전틱 태스크 실행을 비교하도록 합니다.
1# promptfooconfig.yaml2description: "Benchmarking OpenCode Agent Harness: Gemini 3.8 Flash vs. Claude Fable 5.1"34prompts:5 - "Summarize git branch status in one sentence."6 - "Design a zero-downtime database migration strategy from Postgres to Spanner."78providers:9 - id: "exec:opencode run --auto -m google-vertex/gemini-3.8-flash"10 label: "Gemini 3.8 Flash (OpenCode Agent)"11 - id: "exec:opencode run --auto -m google-vertex-anthropic/claude-fable-5-1"12 label: "Claude Fable 5.1 (OpenCode Agent)"1314defaultTest:15 options:16 timeoutMs: 60000
Promptfoo를 사용하여 자체 나란히 비교 평가를 실행하세요:
promptfoo eval -c promptfooconfig.yaml --no-cache
클린룸 개발 컨테이너에서 이 평가를 실행한 저의 결과입니다:

PR 브랜치를 확인할 때, Claude Fable 5.1은 변경되지 않은 트리 해시를 재검사하는 등 여러 차례의 메타 성찰(turns of meta-reflection)을 수행했습니다. 거의 6초가 걸렸고 비용은 23배 더 높았습니다. Gemini 3.8 Flash는 의도를 즉시 인식하고 git 도구를 실행했으며, 1.1초 만에 1센트의 10분의 1 미만 비용으로 답변했습니다.
복잡한 데이터베이스 마이그레이션에서는 상황이 역전되었습니다. Gemini 3.8 Flash는 3초 안에 견고하고 깔끔한 선형 시퀀스를 생성했습니다. 하지만 Fable 5.1은 12초를 들여 완전하고 공식적인 방향성 비순환 그래프(DAG)를 생성했습니다. 이중 쓰기(dual writes)에서의 클럭 스큐(clock skew) 위험을 식별하고, 멱등성 키(idempotency key) 요구 사항을 생성했으며, 되돌릴 수 있는 롤백 게이트를 정의했습니다.
이는 단지 하나의 예시일 뿐이며, 자신의 태스크로 비교해 봐야 합니다.
3. 일상 및 프로덕션에서의 실질적인 사용법
기성품 코딩 도구를 사용하든 맞춤형 에이전트 서비스를 구축하든, 승리하는 패턴은 비대칭 조정(asymmetric coordination)입니다: 최전선 실행을 위한 저렴한 속도, 그리고 아키텍처 체크포인트를 위한 의도적인 깊이. 어려운 문제나 계획 작업에는 비싼 토큰을 쓰되, 단순한 태스크에는 더 저렴한 토큰을 기본값으로 사용하세요.
코딩 에이전트 하네스 (OpenCode, Aider 등)
하나의 모델을 범용 기본값으로 강제하지 마세요. 서로 다른 모델에 매핑된 전문화된 하위 에이전트를 구성하세요. 동일한 통합 공급자를 사용하면 보안 및 비용 측면의 이점이 있습니다. 서로 다른 모델 패밀리를 사용하면 상호 검증을 통해 이점을 얻을 수 있습니다.
심층 사고(deep thinker) 에이전트를 사용하여 문제의 근본 원인을 식별하고 해결책을 계획한 다음, 워커 에이전트를 사용하여 각 태스크를 처리하고 상태를 보고하세요. 심층 계획자는 그들의 작업을 확인하고 성공을 확정하거나 재할당합니다.
1# opencode.json2{3 "$schema": "https://opencode.ai/config.json",4 "model": "google-vertex/gemini-flash-latest",5 "agent": {6 "plan": {7 "model": "google-vertex/gemini-flash-latest"8 },9 "build": {10 "model": "google-vertex/gemini-flash-latest"11 },12 "worker": {13 "model": "google-vertex/gemini-3.8-flash",14 "mode": "primary",15 "description": "General worker agent using gemini-3.8-flash"16 },17 "deep-thinker": {18 "model": "google-vertex-anthropic/claude-fable-5-1@default",19 "mode": "primary",20 "description": "Deep thinking agent using Claude Fable 5.1"21 }22 },23...
서비스로서의 커스텀 에이전트 (Google ADK, LangGraph, 커스텀 코드 등)
자체 에이전트 하네스와 자체 에이전트 서비스를 구축할 때는 완전한 아키텍처적 자유가 있습니다.
- 모델에 맞게 하네스를 재구성하세요: Gemini 3.8 Flash에는 엄격한 JSON 스키마를 가진 3~5개의 집중된 도구(read_file, write_file, run_tests)를 제공하세요. 빠른 모델은 집중된 실행에 뛰어나지만, 50개 도구의 카탈로그는 파라미터 혼란과 컨텍스트 낭비를 초래합니다. Claude Fable 5.1에는 아키텍처 문서, 스키마, 가이드라인을 제공하되, 직접 파일 쓰기 권한은 제거하세요.
- Evals에 기반을 두세요: 어떤 모델이 어떤 노드에 적합한지 추측하지 마세요. 리포지토리 태스크에 대해 결정적인 어설션(assertion) 검사를 포함한 자동화된 평가 스위트를 실행하여, 작은 모델이 10% 비용으로 95% 품질을 제공하는 지점을 찾으세요. 말은 쉽지만 실행은 어렵고, 어떤 시나리오를 평가해야 할지 알기 어렵습니다. 자세한 내용은 Kaggle 5일 코스(agents, videcoding)를 확인하세요.
- "도움 요청(Escalation Pattern)"을 사용하세요: 모든 수신 요청을 빠른 워커에서 시작하세요. 워커에게 ask_for_help(reason, failed_attempts, context)라는 명시적인 도구를 부여하세요. 워커는 요청의 85~90%를 직접 처리합니다. 모호성, 되돌릴 수 없는 조치, 또는 연속된 두 번의 도구 실패 시에만 에스컬레이션합니다.
자동화된 '스마트' 모델 라우터에 대한 현실 점검
스마트 라우터는 예측 ML(광고 기술, 사기 탐지) 분야에서 긴 역사를 가지고 있습니다. 멀티 암 밴딧(multi-armed bandits)과 비용-품질 라우터는 특징(feature)이 표 형태이고, 입력이 제한되며, 피드백(클릭, 차액 청구)이 즉각적이고 장기적인 관점에서 측정 가능하기 때문에 성숙했습니다.
생성형 AI에서는 멀티턴 에이전트가 다른 이야기입니다. 동적 라우터는 세 가지 프로덕션 현실에서 어려움을 겪을 수 있습니다:
- 단일 턴 컨텍스트에는 태스크를 선택하기에 충분한 신호가 포함되지 않을 수 있음
- 성공 지표가 특징으로 명확하게 외삽되지 않아 라우터가 빠르게 '학습'할 수 없음
- 잘못된 선택이 다른 경로에서 다시 실행되어 잠재적 절감액을 깎아내고 지연 시간을 추가함
결론: 평범하게 유지하세요. 에이전트를 명시적으로 조합하고 태스크 경계에 따라 라우팅하세요. 명확한 역할을 정의하고, 구체적인 코드 어설션이나 인간의 의도가 핸드오프(handoffs)를 제어하도록 하세요.
4. 토큰 ROI 방정식: 당신은 실제로 무엇을 위해 돈을 지불하고 있나요?
원가 시트($/1M 토큰)는 프로덕션 가치의 좋은 지도가 아닙니다. 비용 계산은 방정식의 일부일 뿐입니다. 코딩, 제품, 제조 및 기타 모든 '완료해야 할 일(job-to-be-done)' 전반에서 항상 통할 만한 계산을 제시하는 것은 불가능합니다.
출발점은 당신이 얻고 있는 비즈니스 가치를 생각하는 것일 수 있습니다.
- 절약된 인간 시간의 비용, 직원의 더 많은 업무 완료, 노역(toil) 및 자동화된 작업에 드는 시간 감소.
- 이러한 기능으로 인한 고객 만족도와 유지율 향상과 동시에 프로덕션으로 기능을 더 빨리 출시하는 가치.
- 개선된 안전장치와 엔지니어링 관행으로 인해 완화되는 오류와 방지되는 프로덕션 장애.
토큰 비용과 팀이 에이전트를 구축하고 관리하도록 업스킬링(upskilling)하는 비용을 빼면 대략적인 ROI 계산이 나옵니다.

더 적고 더 저렴한 토큰을 사용하여 이러한 계산을 영향을 줄 수 있지만, 아마도 더 많은 업무를 더 빨리 처리함으로써 가장 큰 영향을 미칠 것입니다. 레버리지가 높은 태스크를 선택하세요. 간접비 절감이나 매출 증대로 이어지고, 검증 가능하며, 자동화할 가치가 있는 태스크를 선택하세요. 그리고 이러한 태스크를 분해할 때, 때로는 매우 깊게 사고하고 계획을 세우며 더 많은 비용을 지불하고 기다리는 것을 감수하려 할 수도 있고, 때로는 빠르고 신뢰성 있게 실행하려 할 수도 있습니다. 둘 다 필요합니다.
토크노믹스는 현재 뜨거운 주제이며, 비용을 줄이고 가치를 극대화하기 위한 더 많은 옵션이 있습니다. 이 기사의 핵심 요점은 서로 다른 프로필을 가진 2개의 모델 위에서 몇 가지 다른 에이전트를 설정하고 스스로 태스크를 라우팅하는 것이 정말 간단하다는 것입니다. 그것이 가장 쉽게 시작할 수 있는 지점입니다.
이 상세 분석이 유용하셨다면, 이전 기사인 모든 AI 엔지니어가 에이전트 샌드박스에 대해 알아야 할 5가지를 확인해 보세요. 빌더 현장에서의 더 깊은 분석을 위해 @GoogleCloudTech와 @zeroasterisk를 팔로우하세요.





