마이그레이션 가이드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 | |
|---|---|---|
| 베이스 URL | SDK 기본값: 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도 허용). 공급자 키는 콘솔에서 연결로 한 번만 입력합니다. |
| 모델 ID | gpt-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일에 읽은 다음 자료에서 나왔습니다.
- OpenAI — openai-node README (client options)2026년 10월 19일에 읽음
- OpenAI — openai-python README (client options)2026년 10월 19일에 읽음
- Anthropic — TypeScript SDK2026년 10월 19일에 읽음
- Anthropic — Python SDK2026년 10월 19일에 읽음