developers.openai.com/api/docs/guides/function-calling, 2026년 6월 기준)를 바탕으로 합니다. 두 엔드포인트의 예시는 그대로 복사해 붙여넣을 수 있습니다.
전체 호출 루프
1
도구 정의
함수 이름, 설명, 매개변수 JSON Schema를 요청과 함께 보냅니다
2
모델이 호출을 반환합니다
모델이 호출하기로 결정하면 함수 이름과 JSON 인수를 반환합니다
3
로컬에서 실행
코드는 인수를 파싱한 뒤 실제로 함수를 실행합니다(DB를 조회하거나 외부 API를 호출하는 등)
4
결과를 다시 보냅니다
두 번째 요청에서 대화와 함께 결과를 보내면 모델이 이를 바탕으로 응답합니다
두 엔드포인트 간 핵심 형식 차이
같은 기능이지만/v1/chat/completions와 /v1/responses의 필드 형식이 다릅니다 — 가장 흔한 통합 함정입니다:
Full Example: Chat Completions
완전한 define → call → execute → return 루프를 통한 날씨 조회 예시입니다:전체 예시: 응답
세 가지 차이점에 주목하십시오: 도구 정의는 평면 구조이며, 호출은 최상위function_call 항목으로 돌아오고, 결과는 function_call_output로 반환됩니다. previous_response_id를 사용하면 두 번째 요청에서 전체 기록을 다시 보낼 필요가 없습니다:
strict 모드 (구조화된 출력)
strict: true는 모델의 인수가 JSON Schema를 정확히 준수하도록 보장합니다 — 환각된 필드나 누락된 필드는 없습니다. 세 가지 요구사항이 있습니다:
- 스키마에는
"additionalProperties": false가 포함되어야 합니다 - 모든 필드는
required에 나타나야 합니다(옵셔널성은"type": ["string", "null"]로 표현합니다) - 지원되는 JSON Schema 하위 집합만 사용할 수 있습니다(원시 타입, enum, 배열, 중첩 객체, …)
parallel_tool_calls and tool_choice
병렬 호출
parallel_tool_calls은 기본값으로 켜져 있습니다: 모델은 한 번의 턴에서 여러 함수를 요청할 수 있습니다(예: 베이징과 상하이의 날씨를 동시에 요청). 각 함수를 실행한 뒤, 다음 요청 전에 모든 결과를 반환해야 합니다 — 각 결과는 반드시 해당 call_id(응답) 또는 tool_call_id(채팅)과 짝을 이루어야 합니다.
tool_choice 전략
allowed_tools 하위 집합
이번 턴에 도구는 많지만 그중 일부만 노출하고 싶다면,allowed_tools 형식의 tool_choice를 사용하여 호출 가능한 하위 집합을 제한하십시오 — 이렇게 해도 도구 목록 자체는 수정되지 않으므로, 캐싱을 위한 안정적인 접두사가 깨지지 않습니다:
스트리밍에서 함수 호출
Chat Completions: 인덱스로 조립
함수 인자는 조각 형태로 스트리밍됩니다.arguments 문자열을 index별로 누적한 다음, 스트림이 끝난 뒤 json.loads합니다:
Responses: 의미 기반 이벤트를 수신
response.function_call_arguments.delta 이벤트는 인자 증분을 전달하며, response.function_call_arguments.done는 완전한 인자를 제공합니다 — 인덱스를 수동으로 조립할 필요가 없습니다.
모범 사례와 함정
좋은 도구 정의를 작성하는 방법입니다:- 이름과 설명은 모델을 위해 작성합니다: “언제 호출해야 하는지”를 명확히 적으십시오. 예:
"Get real-time weather; call only when the user explicitly asks about weather" - enum으로 매개변수를 좁히십시오: 값이 열거 가능하면 자유 형식 문자열을 사용하지 마십시오. 대부분의 환각된 인수를 제거합니다.
- 도구 정의는 프롬프트 앞부분에 두고 안정적으로 유지하십시오: 도구는 캐시 접두사에 참여합니다. 정의가 안정적이면 입력 비용이 90% 절감됩니다(Cache Billing 참조)
- 에이전트 루프에 상한을 두십시오: 최대 라운드 수를 설정하여 모델이 호출 → 반환 → 호출을 반복하면서 비용을 소모하지 못하게 하십시오
모델 지원 및 선택
전체 gpt-5 시리즈는 함수 호출을 지원합니다. 시나리오별로 보면 다음과 같습니다.관련 링크
- 이 그룹: Native Calls · 호환 모드 · 캐시 과금
- token 조회 / 관리:
https://api.apiyi.com/token - OpenAI 공식 문서:
developers.openai.com/api/docs/guides/function-calling