1min.ai 是一個 AI 聚合平台,一個訂閱就能用 GPT、Claude、Mistral 等多家模型。可惜它的 API 格式跟 OpenAI 不完全相容,所以現成的工具和 SDK 多半沒辦法直接串。

1min-relay-worker 就是針對這件事的 workaround:跑在 Cloudflare Workers 上的中繼服務,把 1min.ai 的 API 包成 OpenAI API 格式。

為什麼需要 Relay

直接用 1min.ai 的原生 API 幾個痛點:

  • API 格式跟 OpenAI SDK 不相容,沒辦法直接用 openai 套件串
  • 沒有內建的 Rate Limiting
  • Token 用量算不準

過 Relay 之後,把 base_url 指到自己的 Worker,原本熟的 OpenAI SDK 就可以直接打 1min.ai 的所有模型。

支援的功能

  • Chat Completions(Streaming、Vision)
  • Responses API(Structured Outputs,JSON Object / JSON Schema)
  • Image Generation(DALL-E 等)
  • Audio Transcription / Translation(Whisper)
  • 動態模型列表:不用手動維護清單,Worker 會自己打 1min.ai API 拉最新可用的模型。兩層快取(記憶體 5 分鐘 + KV 1 小時),1min.ai 那邊上下架什麼,Relay 會自己跟上。

部署

前置需求

  • Node.js 18+
  • Wrangler CLI
  • Cloudflare 帳號(需啟用 Workers 和 KV)

快速開始

git clone https://github.com/7a6163/1min-relay-worker.git
cd 1min-relay-worker
npm install

建立 KV namespace:

wrangler kv:namespace create "RATE_LIMIT_STORE"
wrangler kv:namespace create "MODEL_CACHE"

把回傳的 namespace ID 填入 wrangler.jsonc,然後部署:

npm run deploy

使用方式

部署完成後,把 base_url 指向你的 Worker 即可:

from openai import OpenAI

client = OpenAI(
    base_url="https://your-worker.workers.dev/v1",
    api_key="YOUR_1MIN_API_KEY",
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello!"}],
)

Streaming 也完全支援:

curl -X POST https://your-worker.workers.dev/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Tell me a story"}],
    "stream": true
  }'

Rate Limiting

內建分散式限流,靠 Cloudflare KV 在所有 Worker 實例之間同步:

  • 每 IP 每分鐘 60 次請求
  • 每 IP 每分鐘 10,000 tokens

超過會回 HTTP 429,附上 Rate Limit headers。

技術細節

整個服務 TypeScript 寫的,跑在 Cloudflare Workers 上,限流和模型快取放 KV,token 計算用 gpt-tokenizer。Cloudflare 免費方案就夠用,延遲低,也不用自己顧伺服器。

專案原始碼:GitHub