본문으로 건너뛰기

마이그레이션 가이드OpenAI 및 Anthropic SDK 직접 호출에서

SDK 직접 호출에서 하나의 컨트롤 플레인으로

대부분의 팀은 벤더 자체 SDK와 환경 변수의 키로 OpenAI나 Anthropic을 호출하는 것으로 시작합니다. 서비스와 키가 여러 개가 되고, 아무도 배분할 수 없는 월 인보이스가 생기기 전까지는 잘 작동합니다. 이 페이지는 SDK, 공급자 계정, 계약을 바꾸지 않고 그 호출 앞에 INFRO를 두는 수정 사항입니다.

각 공급자의 키로 각 공급자 SDK를 호출하는 고객 자체 코드

INFRO 계정은 셀프 서비스입니다. 카탈로그, 문서, API 계약은 공개되어 있고, 게이트웨이는 배포되어 있으며, v1 이후의 기능은 Later로 표시됩니다. 요금제와 체험

현재 상황

현재 구성

각 서비스 환경에 흩어진 공급자 키, 코드베이스마다 따로 작성한 재시도와 타임아웃, 그리고 공급자 인보이스나 사용량 페이지에서만, 기껏해야 키나 프로젝트 단위로 보이는 비용.

바뀌는 것

각 클라이언트는 INFRO 게이트웨이 키로 https://api.infro.io를 향합니다. 공급자 키는 연결로 INFRO에 봉인되어 옮겨지고, 공급자는 계속 고객의 요금으로 직접 청구합니다.

바뀌지 않는 것

SDK, 요청 및 응답 형식, 스트리밍, 도구 호출, chat completions의 구조화된 출력. INFRO는 OpenAI의 Chat Completions 및 Responses 형식과 Anthropic의 Messages 형식으로 응답합니다.

게이트웨이는 홉 하나와 벤더 하나가 더 늘어나는 것입니다. 어떤 구성에서는 아직 그럴 가치가 없으며, 이 목록은 그것을 솔직하게 정리한 것입니다.

  • 서비스 하나, 공급자 하나, 키 하나, 그리고 한 사람이 읽는 청구서. 게이트웨이는 필요한 무언가를 더하기 전에 홉 하나와 구독을 더합니다.
  • 워크로드가 대부분 Batch, 파인튜닝, Files, 벡터 스토어, Realtime API입니다. INFRO는 이 중 어느 것도 제공하지 않으므로, 해당 호출은 어차피 직접 호출로 남습니다.
  • 채팅 형식이 전달하지 못하는 공급자 기능에 의존하고 있으며, 그 공급자만 사용합니다. INFRO가 전달할 수 없는 호출은 절반만 전환하느니 직접 호출로 두는 편이 낫습니다.
  • 모든 요청이 하나의 클라우드 리전 안에 머물러야 합니다. INFRO는 Cloudflare 네트워크에서 실행되며, 리전 고정은 현재 제공되지 않습니다.

수정 사항을 한 행에 하나씩 정리했습니다. 여기에 없는 것은 그대로 유지됩니다.

 SDK 직접 호출INFRO
베이스 URLSDK 기본값: api.openai.com/v1, api.anthropic.com.OpenAI SDK는 https://api.infro.io/v1, Anthropic SDK는 https://api.infro.io(SDK가 /v1/messages를 덧붙입니다).
키각 서비스의 OPENAI_API_KEY, ANTHROPIC_API_KEY.INFRO 게이트웨이 키(Authorization: Bearer, Anthropic SDK의 x-api-key도 허용). 공급자 키는 콘솔에서 연결로 한 번만 입력합니다.
모델 IDgpt-5.6-terra, claude-sonnet-5-5.chat completions에서 openai/gpt-5.6-terra 또는 라우트 이름. Anthropic SDK는 claude-sonnet-5-5를 그대로 쓸 수 있습니다. /v1/messages는 Anthropic 자체 ID를 읽습니다.
배분대개 없음, 또는 공급자의 user 필드.본문의 metadata.user_id, metadata.session_id, metadata.tags, 또는 X-INFRO-User-Id / X-INFRO-Feature 헤더. 요청에 기록되며 공급자에 전송되지 않습니다.

이전 · 공급자 SDK

import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";

const openai = new OpenAI(); // reads OPENAI_API_KEY
const anthropic = new Anthropic(); // reads ANTHROPIC_API_KEY

await openai.chat.completions.create({
  model: "gpt-5.6-terra",
  messages: [{ role: "user", content: "Hello" }],
});

await anthropic.messages.create({
  model: "claude-sonnet-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

이후 · INFRO

import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";

const openai = new OpenAI({
  baseURL: "https://api.infro.io/v1",
  apiKey: process.env.INFRO_API_KEY,
});
const anthropic = new Anthropic({
  baseURL: "https://api.infro.io",
  apiKey: process.env.INFRO_API_KEY,
});

await openai.chat.completions.create({
  model: "openai/gpt-5.6-terra",
  messages: [{ role: "user", content: "Hello" }],
});

await anthropic.messages.create({
  model: "claude-sonnet-5-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});

새 코드 없는 페일오버

Anthropic과 Vertex AI의 Claude, 또는 Anthropic 키 두 개를 연결하면, 해당 모델을 지정한 요청이 그 사이에서 페일오버합니다. 이름 있는 라우트는 순서와 실패 유형별 규칙(429, 5xx, 타임아웃)을 구성으로 정합니다.

호출 전 예산

조직, 프로젝트, 멤버, 키 수준의 예산은 공급자를 호출하기 전에 요청의 최악의 경우를 예약합니다. 상한에 도달하면 API 자체 오류 형식으로 402 budget_exceeded를 반환합니다.

건드리지 않을 것

Batch, Files, 파인튜닝, 벡터 스토어, 모더레이션, Realtime은 직접 클라이언트를 유지합니다. 한 서비스가 두 클라이언트를 함께 둘 수 있습니다. 하나는 INFRO를 거치고 하나는 직접 호출합니다. 임베딩은 옮길 수 있지만, 인덱스를 만든 바로 그 모델을 유지하세요. 서로 다른 모델의 벡터는 비교할 수 없습니다.

현재 설정이 하는 일을 INFRO와 대조하고, 게이트웨이가 구현한 내용과 비교해 확인했습니다. INFRO에 없다고 표시된 행이 1개입니다.

SDK 직접 호출그곳에서 하는 일INFRO에서
서비스별 공급자 키다름각 서비스가 환경 변수에 공급자 키를 보관합니다.키는 INFRO에 봉인된 연결이 됩니다. 서비스는 범위가 지정된 게이트웨이 키를 가지며, 이 키는 공급자, 모델, IP 범위, 환경으로 제한하고 교체하거나 끌 수 있습니다.
재시도와 타임아웃다름SDK 자체 재시도와 각 코드베이스가 추가한 것.연결 간 우선순위 또는 가중치 대상과 유형별 실패 규칙(429, 5xx, 타임아웃)을 갖춘 라우트. SDK 자체 재시도는 그 위에 그대로 적용됩니다.
비용다름키나 프로젝트 단위의 공급자 사용량 페이지와 인보이스.각 응답에 예상 공급자 비용(usage.cost, usage.price_source)을 프로젝트, 키, 사용자, 태그별로 표시합니다. 고객이 추가한 관리자 키로 OpenAI와 Anthropic 자체 비용 API와 매일 대사합니다.
지출 한도다름공급자가 제공하는 경우의 공급자 측 프로젝트 한도.모든 공급자에 걸쳐 조직, 프로젝트, 멤버, 키, 최종 고객 수준에서 상한에 도달하면 402로 거부하는 예산.
Chat Completions와 Responses같은 구조OpenAI의 두 텍스트 API.둘 다 /v1/chat/completions와 /v1/responses에서 제공합니다. previous_response_id와 background는 거부됩니다. INFRO는 응답을 보관하지 않으므로 매 턴 대화를 보내세요.
Anthropic Messages같은 구조thinking, cache_control, 서버 도구를 포함한 /v1/messages.Anthropic 형식의 /v1/messages. Anthropic 연결이나 Vertex AI의 Claude에서는 본문이 작성된 그대로 공급자에 도달합니다.
이미지, 음성, 전사, 비디오같은 구조공급자의 미디어 엔드포인트.각 모델을 제공하는 공급자에서 비동기 작업으로 처리하는 /v1/images, /v1/audio, /v1/videos.
임베딩같은 구조/v1/embeddings.OpenAI, Azure OpenAI, Mistral 연결에서 OpenAI 형식의 /v1/embeddings. 저장된 벡터를 비교할 수 있도록 같은 모델로만 페일오버합니다.
Batch, Files, 파인튜닝, Realtime해당 없음계정 수준 공급자 API.제공하지 않으며, 게이트웨이 기능으로 계획하지도 않습니다. 공급자에 남습니다.

INFRO가 하지 않는 것

  • Batch, Files, 파인튜닝, 벡터 스토어, 모더레이션, Assistants, Realtime API.
  • 저장된 응답: /v1/responses의 previous_response_id, conversation, background: true는 400으로 거부됩니다.
  • 리전 고정. INFRO는 Cloudflare 네트워크에서 실행되며, 데이터 상주는 로드맵에 있고 현재 제공되지 않습니다.
  • 엔터프라이즈 계약 없는 자체 호스팅 배포.

이어지지 않는 것

  • 전환 이전의 사용 기록. 공급자 자체 대시보드에 남고, INFRO는 처리하는 첫 요청부터 기록합니다.
  • 공급자 측 프로젝트 한도. 대신 INFRO 예산을 설정하세요. 공급자 한도는 공급자 쪽에서 계속 적용됩니다.

질문

OpenAI와 Anthropic에는 여전히 직접 지불하나요?
네. INFRO는 고객의 키로 고객의 공급자 계정을 호출하므로, 공급자가 고객의 요금으로 청구합니다. INFRO는 구독료를 청구하며 모델 지출에 0%를 더합니다.
SDK를 바꿔야 하나요?
아니요. OpenAI SDK는 https://api.infro.io/v1을, Anthropic SDK는 https://api.infro.io를 baseURL로 받으며, 둘 다 INFRO 키를 API 키로 받습니다.
공급자 직접 호출로 남아야 하는 것은 무엇인가요?
Batch, Files, 파인튜닝, 벡터 스토어, 모더레이션, Realtime. INFRO는 이를 제공하지 않습니다. 임베딩은 옮길 수 있습니다. /v1/embeddings는 OpenAI, Azure OpenAI, Mistral 연결에서 실행됩니다.

저희와 함께, 또는 직접 옮기세요

마이그레이션 프로그램에서는 통화로 OpenAI 및 Anthropic SDK 직접 호출 설정을 INFRO 연결, 라우트, 예산에 매핑하고 첫 서비스를 함께 옮깁니다. 공급자는 계속 고객에게 직접 청구하며, INFRO는 구독이고 모델 지출에 0%를 더합니다.

출처

이 페이지의 SDK 동작은 2026년 10월 19일에 읽은 다음 자료에서 나왔습니다.