본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 05. 24. 23:41

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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0