nightwhite/any-api
요약
Cloudflare Workers 기반의 범용 LLM API 게이트웨이로, 하나의 백엔드 설정으로 OpenAI, Claude, Gemini 등 다양한 프론트엔드 프로토콜을 동시에 지원합니다. 모델 라우팅과 프로토콜 상호 변환을 통해 개발자가 다양한 LLM 엔드포인트를 유연하게 사용할 수 있도록 돕습니다.
핵심 포인트
- Cloudflare Workers를 활용한 경량 API 게이트웨이
- OpenAI, Claude, Gemini 프로토콜 간 상호 변환 지원
- 단일 백엔드 설정으로 다중 프론트엔드 엔드포인트 노출
- 사용자 정의 인증 키를 통한 보안 라우팅 제공
Cloudflare Workers에서 실행되는 범용 LLM API 상호 변환/라우팅 (Routing) 게이트웨이: 동일한 백엔드 프로바이더 (Provider) 설정을 사용하여 동시에 네 가지 "프론트엔드 프로토콜 (Frontend Protocol)" 엔드포인트를 노출합니다.
엔드포인트 프로토콜 (네 가지 중 선택)
-
OpenAI Chat Completions:
POST /v1/chat/completions -
OpenAI Responses:
POST /openai/v1/responses -
Claude Messages:
POST /claude/v1/messages,
POST /claude/v1/messages/count_tokens -
Gemini:
POST /gemini/v1beta/models/{provider.modelName}:generateContent,
POST /gemini/v1beta/models/{provider.modelName}:streamGenerateContent?alt=sse
모델 목록
-
OpenAI 스타일:
GET /v1/models
(마찬가지로/openai/v1/models,/claude/v1/models지원) -
Gemini 스타일:
GET /gemini/v1beta/models
모든 엔드포인트 프로토콜에 등장하는 모델명은 반드시 provider.modelName이어야 합니다. 예시:
provider-id.model-name
게이트웨이는 provider를 사용하여 상위(Upstream) 연결 정보(URL / key / quirks / options)를 식별하고, modelName을 사용하여 상위의 실제 모델명(upstreamModel)을 식별합니다.
모든 요청에는 귀하의 Worker 액세스 키(상위 모델 키가 아님)를 포함해야 합니다:
-
Worker 측 설정:
WORKER_AUTH_KEY또는WORKER_AUTH_KEYS(쉼표로 구분) -
클라이언트 전달 방식:
Authorization: Bearer <key>또는Authorization: <key>
x-api-key: <key> -
Gemini 호환:
x-goog-api-key: <key>또는?key=<key>(경로가/gemini/로 시작하는 경우에만 해당)
유일하게 필수적인 게이트웨이 설정은 ANY_API_CONFIG (JSON/JSONC 문자열)이며, 예시는 다음을 참조하세요:
.dev.vars.example
wrangler.toml.example
Right.codes (상위가 OpenAI Responses임; 일부 기능은 instructions / previous_response_id를 지원하지 않음):
{
"version": 1,
"providers": {
...
Right.codes + Google Gemini를 동시에 설정 (두 개의 상위 프로바이더 공존):
{
"version": 1,
"providers": {
...
자주 사용되는 프로바이더 타입 (Provider type):
openai-responses: 상위가 Responses API를 사용함 (reasoning, tool calling, SSE 등을 지원)
openai-chat-completions: 상위가 Chat Completions API (/v1/chat/completions)를 사용함
gemini: 상위가 Gemini의 generateContent / streamGenerateContent를 사용함
claude: 상위가 Claude의 /v1/messages를 사용함 (OpenAI Chat을 Claude 프로바이더로 라우팅할 때 사용)
npm install
cp .dev.vars.example .dev.vars
npm run dev
OpenAI Chat:
curl -sS http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer REPLACE_ME" \
-H "Content-Type: application/json" \
...
OpenAI Responses:
OpenAI 응답:
curl -sS http://localhost:8787/openai/v1/responses \
-H "Authorization: Bearer REPLACE_ME" \
-H "Content-Type: application/json" \
...```
Claude 메시지:
curl -sS http://localhost:8787/claude/v1/messages
-H "Authorization: Bearer REPLACE_ME"
-H "Content-Type: application/json"
...```
Gemini 스트리밍:
curl -N http://localhost:8787/gemini/v1beta/models/provider-id.model-name:streamGenerateContent?alt=sse \
-H "x-goog-api-key: REPLACE_ME" \
-H "Content-Type: application/json" \
...```
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기