클래식 함수 호출은 익숙한 패턴입니다. 모델이 도구 호출을 요청하면 애플리케이션이 실행하고 결과를 다시 전달합니다. 도구가 4개면 최대 4번, 40개면 최대 40번의 왕복이 발생합니다. 각 단계는 네트워크 지연과 누적 컨텍스트 비용을 더합니다. 2026년 7월 9일 OpenAI가 GPT-5.6을 일반 공개하면서, 이 반복을 줄이기 위한 Responses API의 프로그래밍 방식 도구 호출 기능도 함께 공개했습니다.
핵심은 모델이 도구를 한 번씩 요청하는 대신, 여러 도구 호출을 조율하는 JavaScript 코드를 작성한다는 점입니다. 이 코드는 네트워크 접근이 차단된 격리 V8 런타임에서 실행됩니다. 외부 시스템에 접근하는 경로는 개발자가 선언한 도구뿐이므로, OpenAI 함수 호출에서 설계한 보안 경계는 유지됩니다. 바뀌는 것은 오케스트레이션의 위치입니다. 기존 애플리케이션 루프, 조건문, 집계 로직의 일부가 모델 측으로 이동합니다.
이제 각 도구는 모델이 한 번에 수십 번 호출할 수 있는 API 계약입니다. 따라서 JSON 스키마의 정밀도, 오류 응답 형태, 버스트 호출에 대한 동작이 더 중요해집니다. 이 글에서는 기존 루프의 한계와 프로그래밍 방식 도구 호출의 동작, 그리고 도구 엔드포인트를 Apidog로 검증하고 모의하는 방법을 다룹니다.
요약
- GPT-5.6은 2026년 7월 9일 일반 공개되었으며, Responses API에 프로그래밍 방식 도구 호출 기능이 추가되었습니다.
- 모델은 도구 호출마다 응답을 기다리는 대신, 루프·조건문·집계를 포함한 JavaScript를 생성해 도구 호출을 조율합니다.
- 생성 코드는 네트워크 접근이 없는 격리 V8 샌드박스에서 실행됩니다.
- 외부 시스템에 영향을 줄 수 있는 경로는 개발자가 선언한 도구뿐이므로 보안 경계는 유지됩니다.
- 요청 파라미터, 실행 제한, 타임아웃은 구현 전에 OpenAI API 레퍼런스에서 확인해야 합니다.
- 모델에 도구를 노출하기 전에 스키마, 오류 응답, 동시 호출, 모의 응답을 검증하세요.
7월 9일에 출시된 내용
GPT-5.6은 세 가지 계층으로 출시되었습니다.
| 모델 | 용도 |
|---|---|
gpt-5.6-sol |
가장 깊은 추론 작업 |
gpt-5.6-terra |
성능과 비용의 균형이 필요한 작업 |
gpt-5.6-luna |
빠르고 비용 효율적인 대량 작업 |
기본 별칭인 gpt-5.6은 Sol로 라우팅됩니다. 세 모델은 7월 8일 접근 제한이 해제된 2주간의 제한된 미리보기 이후, API에서 자체 서비스로 제공됩니다.
모델 제품군 외에도 Responses API에는 다음 기능이 추가되었습니다.
- 프로그래밍 방식 도구 호출
- 다중 에이전트 베타
- 턴 간 지속되는 추론
- 원본 이미지 치수를 보존하는 비전 세부 설정
MarkTechPost의 출시 보도와 OpenAI 문서에 따르면, 프로그래밍 방식 도구 호출은 모델이 JavaScript를 작성해 도구 호출을 조율하고, 이를 네트워크가 차단된 V8 런타임에서 실행하는 방식입니다.
프로그래밍 방식 도구 호출이 대체하는 루프
기존 Responses API 함수 호출은 보통 다음과 같이 구현합니다.
import OpenAI from "openai";
const client = new OpenAI();
const tools = [
{
type: "function",
name: "get_flight_status",
description: "IATA 항공편 번호로 항공편의 실시간 상태를 반환합니다.",
parameters: {
type: "object",
properties: {
flight_number: {
type: "string",
description: "IATA 항공편 번호, 예: SQ317"
}
},
required: ["flight_number"]
}
}
];
let response = await client.responses.create({
model: "gpt-5.6",
input: "Which of these 12 flights are delayed: SQ317, BA15, UA857...",
tools
});
모델은 데이터를 가져오기 위해 함수 호출을 생성합니다. 애플리케이션은 호출을 실행하고 결과를 function_call_output으로 전달한 뒤 API를 다시 호출합니다.
// 도구 호출마다 왕복이 발생합니다.
while (hasFunctionCalls(response)) {
const outputs = await executeToolCalls(response);
response = await client.responses.create({
model: "gpt-5.6",
previous_response_id: response.id,
input: outputs,
tools
});
}
예를 들어 항공편 12개의 상태를 각각 조회하면 최대 12회의 순차 왕복이 필요할 수 있습니다. 비용은 두 방향에서 증가합니다.
- 지연 시간: 호출 N+1은 결과 N을 확인한 뒤에만 실행될 수 있으므로 네트워크 왕복과 모델 처리가 직렬화됩니다.
- 토큰 비용: 이전 도구 결과가 컨텍스트에 누적되므로, 후반 요청은 앞선 결과까지 다시 처리할 수 있습니다.
여러 에이전트를 연결하면 비용은 더 커집니다. 각 단계가 10회 도구 호출 루프를 포함하는 5단계 워크플로우라면 최대 50회의 모델 호출이 발생할 수 있습니다.
프로그래밍 방식 모드가 바꾸는 구조
프로그래밍 방식 도구 호출에서는 모델이 다음 제어 흐름을 JavaScript로 구성합니다.
- 항공편 번호 목록을 순회합니다.
- 각 항공편에
get_flight_status를 호출합니다. - 지연된 항공편만 필터링합니다.
- 지연 시간 기준으로 정렬합니다.
- 집계 결과를 반환합니다.
실제 데이터 조회는 여전히 개발자의 도구가 수행합니다. 하지만 도구를 반복 호출하고 결과를 집계하는 제어 흐름은 모델이 생성한 코드가 담당합니다.
이 방식의 핵심 특성은 다음과 같습니다.
- 격리 런타임: 생성된 JavaScript는 네트워크 접근이 없는 V8 샌드박스에서 실행됩니다.
- 도구만 외부 접근 가능: 생성 코드가 외부 시스템에 영향을 주려면 개발자가 노출한 도구를 호출해야 합니다.
- 표현력 있는 제어 흐름: 루프, 조건문, 조기 종료, 필터링, 집계를 하나의 응답 주기 안에서 처리할 수 있습니다.
| 클래식 함수 호출 | 프로그래밍 방식 도구 호출 | |
|---|---|---|
| 제어 흐름 작성 주체 | 개발자의 애플리케이션 | 모델이 생성한 JavaScript |
| N번 도구 호출의 왕복 횟수 | N번, 일반적으로 직렬 실행 | 하나의 응답 주기 내 조율 |
| 오케스트레이션 실행 위치 | 개발자 인프라 | 네트워크 없는 격리 V8 샌드박스 |
| 외부 시스템 접근 | 개발자 코드가 도구 호출 | 선언된 도구 표면을 통해서만 접근 |
| 보안 경계 | 도구 정의 | 도구 정의, 변경 없음 |
변하지 않는 것
도구 정의 방식은 그대로입니다. 이름, 설명, JSON 스키마를 선언하고 모델은 선언된 도구만 호출할 수 있습니다.
{
type: "function",
name: "get_flight_status",
description: "IATA 항공편 번호로 항공편의 실시간 상태를 반환합니다.",
parameters: {
type: "object",
properties: {
flight_number: {
type: "string",
description: "IATA 형식의 항공편 번호. 예: SQ317"
}
},
required: ["flight_number"]
}
}
따라서 “에이전트가 시스템에서 무엇을 할 수 있는가?”라는 질문의 답도 동일합니다. 개발자가 도구 표면에 허용한 작업만 수행할 수 있습니다.
다만 스키마 품질은 더 중요해집니다. 기존 루프에서는 모호한 설명으로 인한 잘못된 호출을 다음 왕복 전에 수정할 여지가 있었습니다. 프로그래밍 방식 모드에서는 그 모호함이 루프 안에서 여러 번 반복될 수 있습니다.
구조화된 출력에서 사용하던 원칙을 적용하세요.
- 타입을 엄격하게 정의합니다.
- 닫힌 집합에는
enum을 사용합니다. - 단위와 형식을 설명에 명시합니다.
- 실제로 필수인 필드만
required에 넣습니다. - 오류 응답도 성공 응답처럼 구조화합니다.
예를 들어 날짜를 받는 도구라면 "날짜"보다 다음처럼 구체적으로 정의하는 편이 안전합니다.
{
"type": "string",
"description": "ISO 8601 날짜 형식(YYYY-MM-DD). 예: 2026-07-09"
}
제한 사항 및 미해결 질문
이 기능은 출시 직후이므로, 기존 에이전트 스택 전체를 즉시 전환하기보다 단계적으로 검증해야 합니다.
- 정확한 요청 파라미터, 실행 제한, 타임아웃 동작은 OpenAI API 레퍼런스 및 모델 가이드에서 확인하세요. GA 이후 파라미터 이름이나 동작이 변경될 수 있습니다.
- 디버깅 방식이 바뀝니다. 기존에는 애플리케이션 루프에 중단점을 설정할 수 있었지만, 이제 요청별로 생성된 제어 흐름도 관찰해야 합니다.
- 도구 호출 순서, 인자, 오류 분기, 재시도 여부를 로그로 남기세요.
- 프로덕션 실적은 아직 제한적입니다. Simon Willison의 GPT-5.6 출시 첫날 노트처럼 독립 테스트 결과도 함께 확인하세요.
권장 배포 순서는 다음과 같습니다.
- 읽기 전용 도구부터 시작합니다.
- 생성된 도구 호출 시퀀스를 로깅합니다.
- 기존 루프와 토큰·지연 시간을 비교합니다.
- 버스트 호출과 오류 응답을 테스트합니다.
- 검증 후에만 생성·수정·삭제처럼 부작용이 있는 도구를 노출합니다.
개발자의 도구는 이제 생성된 코드가 호출하는 API입니다
클래식 함수 호출에서는 사람이 작성한 루프가 호출 순서와 속도를 통제했습니다. 프로그래밍 방식 도구 호출에서는 생성된 코드가 여러 도구를 반복 호출하고, 결과에 따라 분기하고, 출력을 집계합니다.
따라서 도구를 외부 클라이언트가 사용하는 API처럼 설계해야 합니다.
1. 스키마 정밀도
모든 파라미터에 단위, 형식, 범위를 명시하세요.
{
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "반환할 최대 항목 수. 기본값은 20입니다."
}
}
모호한 날짜나 통화 형식은 한 번의 잘못된 호출이 아니라 반복되는 루프 오류가 될 수 있습니다.
2. 구조화된 오류 응답
실패했는데 HTTP 200과 문자열 오류 메시지를 반환하면 생성된 오케스트레이션이 성공으로 오해할 수 있습니다. 상태 코드와 오류 본문을 일관되게 설계하세요.
{
"error": {
"code": "FLIGHT_NOT_FOUND",
"message": "항공편 번호를 찾을 수 없습니다.",
"retryable": false
}
}
3. 멱등성과 호출 빈도
1분 동안 분산되던 12회 호출이 짧은 시간에 집중될 수 있습니다. 다음을 확인하세요.
- 동일 요청이 반복되어도 안전한가?
- 레이트 리밋은 충분한가?
- 동시 호출 시 데이터 정합성이 유지되는가?
- 재시도가 발생해도 중복 생성이나 중복 결제가 일어나지 않는가?
4. 지연 시간
한 번 실행할 때 8초가 걸리는 도구는 단일 호출에서는 허용될 수 있습니다. 하지만 12회 반복되는 흐름에서는 전체 응답 시간을 지배할 수 있습니다.
도구별로 다음 지표를 수집하세요.
- p50, p95, p99 지연 시간
- 성공률과 오류율
- 타임아웃 비율
- 호출당 처리량
- 동시 요청 시 성능 저하
Apidog로 도구 API 검증 및 모의하기
도구 엔드포인트는 모델이 사용할 API 계약입니다. 모델에 노출하기 전에 다음 순서로 테스트하세요.
- OpenAPI 사양을 정의하거나 가져옵니다.
- 요청 파라미터와 응답 스키마를 검증합니다.
- 성공·실패·타임아웃·잘못된 입력 케이스를 테스트합니다.
- 모의 응답을 만들어 오케스트레이션 흐름을 검증합니다.
- 실제 데이터에 접근하지 않고 도구 호출 패턴을 관찰합니다.
Apidog 다운로드 후 내장 모의 서버를 사용하면, 정의한 엔드포인트에 대해 스키마 형태의 응답을 제공할 수 있습니다. 이를 통해 실제 레코드를 변경하지 않고도 모델이 여러 도구를 어떻게 조율하는지 테스트할 수 있습니다.
다음과 같은 모의 데이터가 특히 유용합니다.
{
"flight_number": "SQ317",
"status": "delayed",
"delay_minutes": 95,
"updated_at": "2026-07-09T09:30:00Z"
}
그리고 오류와 제한 상황도 함께 모의하세요.
{
"error": {
"code": "RATE_LIMITED",
"message": "요청 한도를 초과했습니다.",
"retryable": true,
"retry_after_seconds": 30
}
}
다른 일반 공개(GA) 기능 요약
프로그래밍 방식 도구 호출 외에도 Responses API의 인접 기능이 추가되었습니다.
- 다중 에이전트(베타): API가 관리하는 병렬 서브에이전트 실행 기능입니다. 초기 단계이므로 프로덕션 의존 전에 동작과 제한을 검증해야 합니다.
-
지속적인 추론:
reasoning.context를 통해 턴 간 추론 컨텍스트를 재사용합니다. 긴 세션에서 동일한 결론을 반복해서 도출하는 작업을 줄일 수 있습니다.
이 기능들은 프로그래밍 방식 도구 호출과 결합될 수 있습니다. 턴 간 추론을 유지하면서 도구 호출 오케스트레이션을 자동화하면, 작업당 중복 처리량을 줄일 수 있습니다.
프로그래밍 방식 도구 호출 vs 울트라 모드
두 기능은 요청당 더 많은 작업을 수행한다는 점에서 혼동하기 쉽지만, 해결하는 병목은 다릅니다.
| 구분 | 프로그래밍 방식 도구 호출 | 울트라 모드 |
|---|---|---|
| 주요 목표 | 도구 호출 왕복 감소 | 어려운 문제의 병렬 추론 |
| 방식 | 생성된 JavaScript로 도구 조율 | 여러 에이전트를 병렬 실행 |
| 적합한 병목 | API 호출 지연 시간 | 추론 품질과 숙고 시간 |
| 제공 형태 | API 기능 | ChatGPT Work 및 Codex 기능 |
울트라 모드는 기본적으로 네 개의 에이전트를 병렬로 실행해 실제 시간을 줄이기 위해 더 많은 토큰을 사용합니다. OpenAI에 따르면 Terminal-Bench 2.1 점수는 88.8%에서 91.9%로 향상됩니다. 이 기능은 Pro 및 Enterprise 요금제의 ChatGPT Work와 Plus 이상 요금제의 Codex에서 제공됩니다.
반대로 프로그래밍 방식 도구 호출은 하나의 에이전트가 코드로 도구 호출을 조율하는 API 기능입니다. 자세한 내용은 GPT-5.6 울트라 모드 글을 참고하세요.
자주 묻는 질문
기존 도구 정의를 다시 작성해야 하나요?
아닙니다. 기존 함수 호출에 사용하던 JSON 스키마 형태를 그대로 사용할 수 있습니다.
다만 다음 개선 작업은 권장됩니다.
-
enum추가 - 날짜·시간·통화·단위 형식 명시
- 필수 필드 정리
- 오류 응답 스키마 정의
- 모호한 설명 제거
생성된 JavaScript가 인터넷에 접속할 수 있나요?
아닙니다. 코드는 네트워크 접근 없이 격리된 V8 런타임에서 실행됩니다. 샌드박스 외부에 영향을 줄 수 있는 경로는 개발자가 선언한 도구뿐입니다.
따라서 도구 표면을 공개 API처럼 감사해야 합니다. 특히 삭제, 결제, 권한 변경, 메시지 발송 같은 작업은 별도의 승인 또는 정책 검증 도구를 통해 노출하는 방식을 고려하세요.
어떤 GPT-5.6 모델이 프로그래밍 방식 도구 호출을 지원하나요?
OpenAI는 프로그래밍 방식 도구 호출을 GPT-5.6 제품군의 Responses API 기능으로 문서화합니다. 세 계층은 다음과 같습니다.
gpt-5.6-solgpt-5.6-terragpt-5.6-luna
특정 모델을 선택하기 전에는 API 레퍼런스에서 모델별 지원 세부 사항을 확인하세요. 설정과 첫 요청은 GPT-5.6 API 사용 방법에서 확인할 수 있습니다.
코드 인터프리터와 어떻게 다른가요?
코드 인터프리터는 분석, 차트 생성, 파일 변환처럼 코드를 실행해 결과물을 만드는 기능입니다.
프로그래밍 방식 도구 호출은 선언된 도구를 조율하기 위한 코드를 생성합니다. 결과물은 코드 자체가 아니라 집계된 도구 결과입니다.
마무리: 바로 적용할 체크리스트
GPT-5.6은 에이전트의 왕복 루프를 선택 사항으로 만들었습니다. 하지만 오케스트레이션이 모델로 이동할수록 도구 API의 계약 품질은 더 중요해집니다.
다음 워크플로우로 시작하세요.
- 읽기 중심 워크플로우 하나를 선택합니다.
- 필요한 도구의 JSON 스키마를 강화합니다.
- 성공·실패·재시도·버스트 호출을 테스트합니다.
- 모의 서버로 안전하게 도구 호출 흐름을 관찰합니다.
- 토큰과 지연 시간을 기존 루프와 비교합니다.
- 검증 후에만 부작용이 있는 도구를 추가합니다.
모델이 도구를 사용하는 코드를 작성하기 시작하면, 그 코드는 이미 테스트된 표면에서 읽고 호출해야 합니다. Apidog API 클라이언트 및 모의 서버로 도구 계약을 먼저 검증하세요.
Top comments (0)