GPT-6 Astra 함수 호출 가이드: 스키마, 검증, 재시도 및 도구 결과
안정적인 GPT-6 Astra 함수 호출 구현: 엄격한 JSON 스키마, 인수 검증, 멱등 실행, 재시도, 병렬 호출 및 구조화된 결과 포함.

함수 호출을 통해 GPT-6 Astra가 애플리케이션이 제어하는 코드를 요청할 수 있습니다. 모델은 함수를 선택하고 인수를 제안하며, 런타임이 이를 검증하고 작업을 수행한 후 결과를 다시 보냅니다. 신뢰성은 뛰어난 도구 설명보다는 체계적인 실행 루프에 더 의존합니다.
엄격한 계약 정의
OpenAI는 strict: true를 권장합니다. 엄격한 스키마는 additionalProperties: false를 요구하며, 모든 속성은 반드시 required에 포함되어야 합니다. 선택적 값은 null을 포함하는 유니온으로 표현하십시오.
const tools = [{
type: "function",
name: "조회 순서",
description: "사용자에게 표시되는 하나의 주문의 현재 상태를 반환합니다.",
strict: true,
parameters: {
type: "object",
속성: {
order_id: { type: "string", description: "표준 주문 ID" },
include_events: { type: ["boolean", "null"] }
},
필수: ["order_id", "include_events"],
additionalProperties: false
}
}];
함수는 작게 유지하고 이름은 구체적으로 지으세요. 여러 모드를 가진 큰 manage_account 도구는 유효하지 않은 조합을 초래하고 위험을 숨깁니다. get_account, update_shipping_address, close_account를 선호하며, 중요한 작업에는 승인 절차를 포함하세요.
실행 루프
Responses API에서 요청된 호출은 response.output에 type: "function_call", call_id, name, JSON 문자열 arguments를 가진 항목으로 나타납니다. 애플리케이션은 인수를 구문 분석하고 검증한 후 신뢰할 수 있는 코드를 실행한 다음 일치하는 function_call_output으로 계속 진행합니다.
const first = await client.responses.create({
model: "gpt-6-astra",
도구들,
input: "주문 ORD-1042는 어디에 있나요?"
});
const outputs = [];
for (const item of first.output) {
만약 (item.type !== "function_call") 계속;
const args = JSON.parse(item.arguments);
const result = await lookupOrder(args);
outputs.push({
type: "function_call_output",
call_id: item.call_id,
output: JSON.stringify(result)
});
}
const final = await client.responses.create({
model: "gpt-6-astra",
previous_response_id: first.id,
출력
});
모델에서 임의의 이름을 절대 실행하지 마십시오. 고정된 레지스트리를 기준으로 확인하십시오. 엄격 모드에서도 애플리케이션 코드에서 다시 검증하십시오: 스키마 유효성이 권한 부여, 레코드 존재, 비즈니스 규칙 준수 또는 안전성을 증명하지 않습니다.
유용한 도구 결과 설계
가장 작은 완전한 결과를 반환하십시오. 안정적인 식별자, 상태, 타입이 지정된 필드, 그리고 기계가 읽을 수 있는 오류 코드를 포함하십시오. 전체 데이터베이스 행이나 스택 트레이스를 덤프하지 마십시오.
{ "ok": false, "error": { "code": "ORDER_NOT_VISIBLE", "message": "호출자의 계정에서 주문을 찾을 수 없습니다.", "retryable": false } }
메시지는 모델이 설명하는 데 도움을 주고, 코드는 오케스트레이션 계층이 결정하는 데 도움을 줍니다. 다른 테넌트가 숨겨진 식별자를 소유하고 있는지 여부를 공개하지 마십시오.
## 재시도에는 두 가지 정책이 필요합니다
전송 재시도는 API 시간 초과, 429 오류, 일시적인 5xx 실패를 처리합니다. 도구 재시도는 자체 종속성 실패를 처리합니다. 이 둘을 분리하세요.
안전한 읽기는 일반적으로 지수 백오프와 지터를 사용하여 재시도할 수 있습니다. 쓰기에는 멱등성 키와 조정이 필요합니다. `create_refund` 이후 연결이 끊어지면 다시 호출하기 전에 환불이 존재하는지 확인하세요. 각 논리적 작업에 안정적인 작업 ID를 부여하고 결과와 함께 도구 호출 ID를 저장하세요.
모델에게 단독으로 재시도가 안전한지 묻지 마십시오. 도구 레지스트리는 재시도 클래스, 타임아웃 및 부작용 수준을 선언해야 합니다.
## 병렬 호출 및 순서
모델은 여러 함수 호출을 요청할 수 있습니다. 병렬 실행은 세 도시의 날씨를 확인하는 것과 같은 독립적인 읽기에 유용합니다. 호출 B가 호출 A에 의존하거나 두 쓰기가 동일한 레코드에 접근할 때는 안전하지 않습니다.
모든 함수 호출 항목을 수집하되, 하나만 있다고 가정하지 마십시오. 의존성을 인식하는 실행기를 구축하거나, 순서가 중요한 경우 병렬 동작을 비활성화/회피하십시오. 각 결과는 자체 `call_id`를 사용하여 반환하십시오.
## 제어 도구 선택
`tool_choice`는 자동 선택을 허용하거나, 도구를 요구하거나, 도구를 방지하거나, 명명된 함수를 강제할 수 있습니다. 개방형 에이전트에는 `auto`를 사용하고, API 작업이 엔드포인트의 명시적 목적일 때는 도구를 강제하며, 처리가 모델 전용으로 유지되어야 할 때는 `none`을 선택하세요.
사용자 대상 작업의 경우, 두 단계 패턴이 효과적입니다. 먼저 제안된 변경 사항을 준비하고 표시한 후, 별도로 확인된 도구를 실행하는 것입니다. 이렇게 하면 친근한 문장이 암묵적인 승인이 되는 것을 방지할 수 있습니다.
## 계약 테스트
누락된 필드, null 옵셔널, 유효하지 않은 열거형, 권한 없는 ID, 타임아웃, 중복 제출, 부분 실패, 다중 호출, 대규모 출력, 그리고 도구 결과 내 악성 문자열에 대한 케이스를 생성합니다. 최종 답변이 성공을 주장하는 대신 실패를 정확히 반영하는지 평가합니다.
로그 스키마 버전, 호출 ID, 도구 이름, 정리된 인수, 지속 시간, 결과 및 재시도 횟수. 텔레메트리에서 비밀 및 민감한 콘텐츠를 제외하세요.
## 스키마 디자인 검토 체크리스트
모든 도구를 공개 API처럼 검토하세요. 열거형은 모델이 임의로 문자열을 만들도록 요청하기보다 실제 지원되는 값을 반영해야 합니다. 날짜는 선언된 형식과 시간대가 필요합니다. 숫자 필드에는 단위와 범위가 필요합니다. 식별자는 정규화되어야 하며, 조회 단계에서 모호성을 해결할 수 있을 때 자유 형식의 고객 이름을 사용해서는 안 됩니다. 설명에는 전제 조건과 함수가 수행하지 않는 작업을 명시해야 합니다.
`force`, `override`, `skip_checks`와 같은 부울 함정을 피하세요. 이는 중요한 정책 결정을 모델이 생성한 하나의 비트로 축소시킵니다. 예외적인 작업이 정당하다면, 더 강력한 인증과 승인을 갖춘 별도의 고위험 도구로 노출하세요.
버전 호환되지 않는 계약입니다. 실행 중인 응답 체인에는 여전히 이전 스키마에 의해 형성된 호출이나 결과가 포함될 수 있습니다. 실행기는 지원되지 않는 버전을 명시적으로 거부하고 민감한 요청을 변환하는 방법을 추측하기보다는 복구 가능한 오류를 반환해야 합니다.
마지막으로, 함수 결과를 사용자에게 보여지는 주장과 비교하세요. `{ok:false}`를 반환하는 도구가 절대 "완료"가 되어서는 안 됩니다. 자동화된 평가는 호출 추적과 최종 문장을 모두 검사해야 합니다. 왜냐하면 운영상 올바른 도구 계층이라도 모델에 의해 잘못 표현될 수 있기 때문입니다.
## 자주 묻는 질문
### 엄격 모드가 유효성 검사 코드를 제거하나요?
아니요. 구조적 준수성을 향상시킵니다. 귀하의 애플리케이션은 여전히 권한, 범위, 불변 조건 및 비즈니스 정책을 적용합니다.
### 도구 출력이 반드시 JSON이어야 하나요?
출력 필드는 문자열이므로, JSON은 구조화된 결과를 위한 실용적인 규칙입니다. 계약을 일관되게 유지하세요.
### 언제 도구를 강제로 사용해야 하나요?
엔드포인트의 목적이 해당 작업을 필요로 하고 사용자가 이를 승인한 경우에만 수행하세요. 동작을 결정론적으로 보이게 하기 위해 불필요한 호출을 강제하지 마세요.
### GPT-6 Astra가 제 함수를 직접 실행할 수 있나요?
아니요. 호출 요청을 보내면 애플리케이션이 함수를 실행하고 결과를 반환합니다.
## 결론
신뢰할 수 있는 함수 호출은 프로토콜입니다: 엄격한 스키마, 고정된 레지스트리, 애플리케이션 검증, 권한 부여, 통제된 실행, 구조화된 결과, 그리고 검증된 연속성입니다. 쓰기 작업을 활성화하기 전에 멱등성과 재시도 분류를 추가하세요. 모델이 제안하지만, 모든 결과에 대한 책임은 여러분의 시스템에 있습니다.






























































































