AnyRouter

通用 API 代理服务

支持 OpenAI、Anthropic、Google、Azure、Groq 等任意 HTTP API 的统一转发

概述

AnyRouter 是一个运行在 Cloudflare Workers 上的通用 API 代理服务,可以转发任意 HTTP API 请求:

  • 通用代理:支持任意 HTTP/HTTPS API,不限于 AI 服务
  • 密钥管理:统一管理多个 API 密钥,通过短 ID 安全访问
  • 直传模式:无需预先配置,直接传递 Token 即可使用
  • 边缘加速:基于 Cloudflare 全球边缘网络,低延迟访问
  • 请求统计:记录使用量,支持按 API 和 Key 统计

支持的 API

AnyRouter 支持任意 HTTP API,以下是常用的 AI 服务示例:

OpenAI
api.openai.com
Anthropic
api.anthropic.com
Google AI
generativelanguage.googleapis.com
Azure OpenAI
xxx.openai.azure.com
Groq
api.groq.com
Mistral
api.mistral.ai
Cohere
api.cohere.ai
更多...
任意 HTTP API

只要是标准的 HTTP/HTTPS API,都可以通过 AnyRouter 代理访问,不限于上述服务。

快速开始

1. 获取代理地址

当前服务地址:

2. 设置认证信息

在请求头中添加 Authorization 字段,格式如下:

认证格式

Authorization: Bearer <目标API地址>:<Key ID 或 Token>

格式说明

  • 目标API地址:完整的 API 地址,如 https://api.openai.com
  • Key ID:6 位字母数字组合,用于从数据库查找对应的 Token
  • Token:直接传递完整的 API Token(直传模式)

各平台示例

OpenAI: Bearer https://api.openai.com:a3x9k2
Anthropic: Bearer https://api.anthropic.com:b4y8m1
Google AI: Bearer https://generativelanguage.googleapis.com:c5z2n3
Groq: Bearer https://api.groq.com:d6w4p5

使用模式

最佳

SK 别名模式

使用类似 OpenAI 格式的 SK 别名,一键访问

Bearer sk-ar-xxxxxxxx...
  • 类似原生 API Key 格式
  • 不暴露真实 Token
  • 自动识别目标 API
  • 可随时重新生成
推荐

Key ID 模式

使用 6 位短 ID + URL 访问预配置的密钥

Bearer https://api.openai.com:a3x9k2
  • 不暴露真实 Token
  • 支持使用统计
  • 可随时启用/禁用
灵活

直传模式

直接在请求中传递 API Token

Bearer https://api.openai.com:sk-xxx...
  • 即用即走,无需配置
  • 支持任意 API 地址
  • 临时使用场景

模式自动判断

系统会根据 Authorization 内容自动判断模式:

  • sk-ar-xxx 开头 → SK 别名模式(自动匹配目标 API)
  • • URL 后跟 6 位字母数字(如 https://...:a3x9k2)→ Key ID 模式
  • • URL 后跟其他格式(如 https://...:sk-xxx)→ 直传模式

SK 别名详解

SK 别名是 AnyRouter 独创的认证方式,格式类似各大平台的 API Key:

格式对比
  • OpenAI: sk-proj-xxx
  • Anthropic: sk-ant-xxx
  • AnyRouter: sk-ar-xxx
使用方法
  1. 在管理面板点击「生成」获取 SK 别名
  2. 直接用 sk-ar-xxx 作为 API Key
  3. 无需指定目标 API URL

代码示例

cURL - OpenAI

curl -X POST '/v1/chat/completions' \
  -H 'Authorization: Bearer https://api.openai.com:a3x9k2' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpt-4",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

cURL - Anthropic

curl -X POST '/v1/messages' \
  -H 'Authorization: Bearer https://api.anthropic.com:b4y8m1' \
  -H 'Content-Type: application/json' \
  -H 'anthropic-version: 2023-06-01' \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

cURL - Google AI (Gemini)

curl -X POST '/v1beta/models/gemini-pro:generateContent' \
  -H 'Authorization: Bearer https://generativelanguage.googleapis.com:c5z2n3' \
  -H 'Content-Type: application/json' \
  -d '{
    "contents": [{"parts": [{"text": "Hello!"}]}]
  }'

Python - OpenAI SDK

from openai import OpenAI

client = OpenAI(
    base_url='/v1',
    api_key='https://api.openai.com:a3x9k2'
)

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

Python - Anthropic SDK

import anthropic

client = anthropic.Anthropic(
    base_url='',
    api_key='https://api.anthropic.com:b4y8m1'
)

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)

Python - Groq SDK

from groq import Groq

client = Groq(
    base_url='/openai/v1',
    api_key='https://api.groq.com:d6w4p5'
)

response = client.chat.completions.create(
    model="llama-3.1-70b-versatile",
    messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

JavaScript - fetch

const response = await fetch('/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer https://api.openai.com:a3x9k2',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    model: 'gpt-4',
    messages: [{ role: 'user', content: 'Hello!' }]
  })
});

const data = await response.json();
console.log(data.choices[0].message.content);

SDK / CLI 配置

通过环境变量配置各种 SDK 和 CLI 工具使用本代理服务:

SK 别名模式(推荐)

使用 SK 别名最简洁,无需指定目标 API URL:

# Claude Code / Anthropic SDK
export ANTHROPIC_BASE_URL=
export ANTHROPIC_AUTH_TOKEN=sk-ar-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# OpenAI SDK
export OPENAI_BASE_URL=/v1
export OPENAI_API_KEY=sk-ar-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

在管理面板的配置列表中点击「生成」按钮获取你的 SK 别名

Claude Code CLI(Key ID 模式)

export ANTHROPIC_BASE_URL=
export ANTHROPIC_AUTH_TOKEN=https://api.anthropic.com:b4y8m1

OpenAI CLI / SDK(Key ID 模式)

export OPENAI_BASE_URL=/v1
export OPENAI_API_KEY=https://api.openai.com:a3x9k2

通用配置模式

# SK 别名模式(最简洁)
export {SDK}_BASE_URL=
export {SDK}_API_KEY=sk-ar-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Key ID 模式
export {SDK}_BASE_URL=
export {SDK}_API_KEY=https://{目标API地址}:{KeyID}

配置说明

  • SK 别名模式:最简洁,只需一个 sk-ar-xxx 即可,系统自动识别目标 API
  • Key ID 模式:需要指定 URL 和 6 位 Key ID,适合需要明确指定目标的场景
  • • 环境变量可以添加到 ~/.bashrc~/.zshrc 或项目的 .env 文件

错误处理

当请求出错时,API 会返回结构化的错误信息:

{
  "error": {
    "code": "NOT_FOUND",
    "message": "Key ID 不存在",
    "hint": "找不到 Key ID \"abc123\",请检查是否输入正确",
    "contact": "如有疑问请联系管理员"
  }
}
错误码 HTTP 状态 说明
UNAUTHORIZED 401 缺少或无效的 Authorization header
BAD_REQUEST 400 请求格式错误
NOT_FOUND 404 API 地址未配置或 Key ID 不存在
FORBIDDEN 403 Key 已被禁用
SERVICE_ERROR 503 无法连接到目标 API

部署指南

选择以下任一方式部署你的 AnyRouter 代理服务:

最简单的方式

点击下方按钮,自动 Fork 并部署到你的 Cloudflare 账户:

Deploy to Cloudflare Workers

部署后配置环境变量:

  1. 进入 Cloudflare Dashboard → Workers & Pages → 你的 Worker
  2. 点击 Settings → Variables and Secrets
  3. 添加 ADMIN_PASSWORDSUPABASE_URL 等变量

准备工作

  • GitHub 账号(用于 Fork 代码仓库)
  • Cloudflare 账号(免费注册
  • Supabase 账号(免费注册,可选,用于密钥管理)
  • Upstash 账号(免费注册,可选,用于 Redis 缓存和统计)

3 配置 Supabase 数据库(可选)

如果只需要直传模式,可跳过此步骤

  1. a. 登录 Supabase 并创建新项目
  2. b. 进入 SQL Editor,执行数据库初始化脚本:
schema.sql - 从 GitHub 实时获取
查看源文件

脚本包含:建表、索引、RLS 策略、触发器、迁移逻辑(支持已有表升级)

  1. c. 进入 Settings → API,获取 Project URLanon/public key

4 配置 Upstash Redis(可选)

如果不需要统计和缓存功能,可跳过此步骤

  1. a. 登录 Upstash 并创建 Redis 数据库
  2. b. 选择离你最近的区域(如 US-East-1 或 AP-Northeast-1)
  3. c. 在 REST API 标签页复制 UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN

5 配置环境变量

部署后在 Cloudflare Dashboard → Workers → 你的 Worker → Settings → Variables and Secrets 添加:

变量名 必须 说明 获取方式
ADMIN_PASSWORD 管理面板登录密码 自定义
SUPABASE_URL 可选 Supabase 项目 URL Supabase → Settings → API → Project URL
SUPABASE_KEY 可选 Supabase anon key Supabase → Settings → API → anon public
UPSTASH_REDIS_URL 可选 Upstash Redis REST URL Upstash → Redis → REST API
UPSTASH_REDIS_TOKEN 可选 Upstash Redis Token Upstash → Redis → REST API

不配置 Supabase/Redis 也可使用直传模式

6 配置自定义域名(可选)

  1. a. 登录 Cloudflare Dashboard,进入 Workers & Pages
  2. b. 选择你的 Worker,点击 Settings → Triggers → Custom Domains
  3. c. 添加你的域名(域名需要已添加到 Cloudflare)

部署后检查清单

  • 访问 / 查看状态页面
  • 访问 /admin 登录管理面板
  • 添加 API 配置并测试代理功能
  • 生成 SK 别名用于 SDK 配置

常见问题

Q: 如何获取 Key ID?

登录管理面板,添加 API 配置后系统会自动生成 6 位 Key ID。

Q: 支持哪些 API?

支持任意 HTTP/HTTPS API,包括但不限于:OpenAI、Anthropic、Google AI、Azure OpenAI、Groq、Mistral、Cohere、HuggingFace 等。

Q: 数据安全吗?

代理服务不会存储任何请求内容,仅转发请求。API Token 存储在数据库中,传输使用 HTTPS 加密。

Q: 如何自己部署?

Fork GitHub 仓库,配置 Cloudflare Workers 和 Supabase 数据库即可。详见仓库 README。

Q: 有请求限制吗?

代理服务本身无限制,但会受到 Cloudflare Workers 免费版的限制(每日 10 万请求)和目标 API 的限制。

Q: 为什么要用代理而不是直连?

1) 统一管理多个 API 密钥;2) 避免在客户端暴露 Token;3) 利用 Cloudflare 边缘网络加速;4) 便于监控和统计使用量。