Ploy는 프로덕션 마케팅 웹사이트를 계획·구축·검증하는 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환하고 모든 워크스페이스의 기본 모델로 지정함
평가 하네스의 모델별 가정을 바로잡은 뒤 홈페이지 재구축 작업에서 평균 실행 시간이 8분에서 3분 42초로 줄었고, 비용은 $3.06에서 $2.22로 27% 낮아졌으며 시각 점수도 0.970으로 높아짐
GPT-5.6이 도구 호출의 선택적 매개변수 25개를 임의 값으로 모두 채우면서 파일 읽기의 52~64%가 빈 결과를 반환했으나, 선택 필드를 필수·nullable로 바꾸자 빈 읽기가 0%로 줄고 도구 호출도 약 30% 감소함
OpenAI와 Anthropic의 캐시 범위·처리량 구조 차이로 GPT-5.6이 처음에는 약 50% 비싸게 측정됐지만, 워크스페이스 단위 캐시 키와 계층별 breakpoint를 적용해 첫 호출 적중률을 0%에서 83.7%로 높이고 미캐시 입력 토큰을 28% 줄임
모델 교체의 비용과 성능은 모델 자체뿐 아니라 평가 예산, 도구 스키마, 캐시 구조, 추론 재생 방식에 좌우되므로 기존 모델에 맞춰진 프로바이더별 가정부터 찾아 수정해야 신뢰할 수 있는 비교와 안정적인 운영이 가능함
Claude Opus를 대체한 GPT-5.6 Sol
Ploy 에이전트는 프로덕션 마케팅 웹사이트의 페이지를 계획하고 코드베이스를 읽으며, 컴포넌트와 이미지를 생성하고 결과를 스크린샷으로 확인한 뒤 작업 완료 여부를 판단함
여러 달 동안 Claude Opus를 대체할 기준을 충족한 모델이 없었고, 기본 모델은 4개월 동안 Opus 4.7과 4.8 순서로 유지됨
GPT-5.6 Sol은 동일 작업을 대상으로 한 일대일 평가에서 처음으로 Opus를 앞서며 모든 Ploy 워크스페이스의 기본 모델이 됨
초기 평가에서도 완료된 빌드의 실행 시간은 절반 미만이었고 비용은 27% 낮았으며, 기존 모델과 같거나 높은 점수를 기록해 마이그레이션을 진행할 근거가 됨
Ploy는 Vercel AI SDK를 사용하지만, 모델 전환 과정에서 도구 인자 구성과 프롬프트 캐싱, 턴 간 추론 재생에 관한 프로바이더별 가정이 스택 전반에 남아 있음을 발견함
마이그레이션은 평가 하네스, 도구 스키마, 프롬프트 캐싱, 추론 재생 순으로 수정하며 진행됨
평가 수치를 믿기 전에 하네스부터 수정
평가 제품군은 프로덕션 에이전트를 고정 테스트 워크스페이스에서 실행하며, 홈페이지를 처음부터 구축하는 작업부터 복제 요청을 안전하게 실행할 수 있는지 판단하는 작업까지 수백 개 사례를 다룸
빌드 사례에서는 시각 판정기가 기준 디자인과 비교해 10개의 이진 검사를 수행함
hero 영역이 화면 전체 폭을 채우는 사진 장면인지 검사함
주요 CTA가 pill 형태가 아닌 둥근 모서리의 직사각형인지 확인함
콘텐츠 검사와 도구 실행 경로 검사, 파일 단언도 함께 수행하며, 실패 시 도구 호출과 모델 텍스트를 포함한 전체 실행 추적을 검토함
기존 모델의 호출 방식에 맞춰진 제약
기존 도구 호출 예산은 Opus의 순차 호출 방식에 맞춰져 있었지만, GPT-5.6은 병렬 호출을 사용해 올바르게 문제를 해결한 사례에서도 예산을 초과함
평가 실행기는 Opus가 거의 사용하지 않던 일괄 파일 읽기를 지원하지 않았지만 GPT-5.6은 이를 자주 사용함
첫 실행에서 발생한 원시 실패의 약 3분의 1은 모델 동작이 아닌 하네스의 가정에서 비롯됐으며, 모델별로 고르게 분포하지도 않았음
도전 모델과 기존 모델의 실행 추적을 먼저 분류하지 않으면 새 모델이 기존 모델처럼 행동할수록 유리한 평가가 됨
암묵적인 점수 임계값
minScore가 빠진 데이터셋은 아무 경고 없이 기본값 1.0을 물려받음
이 때문에 GPT-5.6은 hero 점수 0.98을 받고도 실패 처리됐고, Opus 역시 모든 개별 검사를 통과한 사례에서 실패로 판정됨
두 결과 모두 방어 가능한 디자인이었지만 모델이 아닌 암묵적 임계값 때문에 탈락함
수정된 벤치마크 결과
하네스를 고친 뒤 브랜드 홈페이지를 기준 디자인에 맞춰 다시 구축하는 평가 제품군을 재실행함
완료된 빌드당 평균
Claude Opus 4.8 (n=11)
GPT-5.6 (n=10)
비용
$3.06
$2.22
실행 시간
8분 00초
3분 42초
입력 토큰
260만
170만
출력 토큰
33,000
17,100
시각 점수
0.936
0.970
GPT-5.6은 페이지를 2.2배 빠르게 완성했고 비용은 27% 낮았으며, 출력 토큰도 약 절반만 사용함
생성한 코드의 양도 더 적었음
한 쌍의 비교 사례에서 Opus는 대부분 사용되지 않는 색상 계열을 포함해 CSS 변수 174개와 17,957자의 globals.css를 생성함
GPT-5.6은 CSS 변수 45개와 2,508자를 사용하면서도 비슷하거나 더 나은 렌더링 결과를 냄
디자인 품질과 일관성
GPT-5.6은 깔끔하고 격자가 촘촘한 레이아웃에 강하지만, 강하게 유도하지 않으면 해당 스타일로 수렴하는 경향이 있음
Opus 4.8용으로 설계된 기존 하네스에서는 기존 디자인 시스템을 무시한 채 깔끔하지만 평범한 결과물을 자주 생성함
디자인팀과 엔지니어링팀이 모델 유도 방식을 개선한 뒤에는 프로덕션에 필요한 브랜드 준수 기준을 충족함
도구 호출의 선택적 매개변수 처리
에이전트의 code 도구에는 최상위 매개변수 25개가 있으며, action만 필수이고 나머지는 선택 사항임
Claude는 사용하는 매개변수 2~3개만 전송하지만 GPT-5.6은 호출마다 25개를 모두 보내며, 사용하지 않는 필드도 offset: 0, timeout: 120000, siteId: "00000000-0000-0000-0000-000000000000" 같은 그럴듯한 값으로 채움
3일간 수집한 프로덕션 code(read) 실행 추적에서도 같은 패턴이 나타남
모델
호출 수
25개 속성을 모두 포함한 호출
gpt-5.6
6,635
6,635건, 100%
claude-opus-4.8
2,898
4건, 0.1%
claude-sonnet-5
1,933
0건
빈 파일 읽기가 발생한 원인
문제는 단순히 인자가 장황하다는 데 있지 않고, 파일 읽기 구현이 모델이 임의로 만든 값과 사용자가 의도한 값을 구별할 수 없다는 데 있었음
구현은 offset: 0을 실제 인자로 처리했고, GPT-5.6 파일 읽기의 52~64%가 빈 결과를 반환함
도구가 유효한 읽기와 빈 읽기 모두에 success: true를 반환해 모델은 빈 파일을 읽고 있다는 사실을 알 수 없었음
빈 결과를 보완하려고 호출을 더 많이 수행하면서 결과 품질까지 나빠짐
프롬프트와 strict 모드로 해결되지 않은 문제
도구 설명에 사용하지 않는 매개변수를 생략하라는 지시를 넣어도 25개가 모두 생성됨
각 속성에 OPTIONAL, omit if unused를 붙여도 동작은 달라지지 않음
OpenAI의 strict 모드에서도 같은 결과가 나왔으며, 이를 도입하려면 모든 스키마에서 pattern, format, 배열 크기 검증을 제거해야 했음