阿里云 ESA 边缘节点上的通用大模型 API 中转 · 路径即目标地址 · 原生支持流式 SSE
把任意公开的大模型 API 地址拼在本站域名后面即可,格式与通用反代完全一致。
直接把这个地址当接口地址用;也可只保留到 /v1,例如
—
把 <PROXY> 换成上面的代理地址即可,其余参数与官方接口完全一致。
# 非流式 curl $PROXY/https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"你好"}]}' # 流式(SSE) curl -N $PROXY/https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{"model":"gpt-4o-mini","stream":true,"messages":[{"role":"user","content":"你好"}]}'
# Python from openai import OpenAI client = OpenAI( api_key="sk-...", base_url="$PROXY/https://api.openai.com/v1", ) resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": "你好"}], ) print(resp.choices[0].message.content) // Node.js // const client = new OpenAI({ apiKey: "sk-...", baseURL: "$PROXY/https://api.openai.com/v1" });
from anthropic import Anthropic client = Anthropic( api_key="sk-ant-...", base_url="$PROXY/https://api.anthropic.com", ) msg = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=256, messages=[{"role": "user", "content": "你好"}], ) # 站点已自动透传 x-api-key / anthropic-version 等请求头
# 只改环境变量,代码零改动 export OPENAI_BASE_URL="$PROXY/https://api.openai.com/v1" export OPENAI_API_KEY="sk-..." # Anthropic 兼容端点 export ANTHROPIC_BASE_URL="$PROXY/https://api.anthropic.com" # 其它任意兼容 OpenAI 协议的服务,直接把地址拼在域名后即可 # $PROXY/https://api.deepseek.com/v1
# 可选:服务端配置 UPSTREAM_BASE_URL 后,支持固定上游模式 # 例如 UPSTREAM_BASE_URL=https://api.openai.com curl $PROXY/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"你好"}]}' # 此时 OpenAI SDK 的 base_url 直接写 $PROXY/v1
/https://api.example.com/v1/...,查询参数一并转发;也兼容单斜杠 /https:/... 与 ?url= 写法
边到边转发,不缓冲整包,响应体直连回传,长连接聊天逐字可见
Authorization / x-api-key / anthropic-version 等原样上送;剥离 cf-*、eo-*、x-forwarded-* 等边缘信息
上游返回 gzip / br / deflate 时由边缘透明处理后再回传,不会出现截断;CORS 头统一重签
全量 CORS 与 OPTIONS 预检,浏览器端 LLM 前端(LobeChat / NextChat 等)可直接填本站地址
ESA 网关等待首字节上限 10 秒,超时直接 504。本站用双阶段响应绕过:7 秒内拿到上游响应头就直通(保留真实状态码),超窗则立刻切流式占位继续等待,思考型模型与非流式长回答不再被网关掐断
上游返回非法 status / 非 ASCII statusText / 204 带 body 都会让 Response 构造抛异常;access-control-allow-credentials 与本站 allow-origin:* 冲突会被浏览器整体拒绝 —— 均已逐项净化
上游超时可用 UPSTREAM_TIMEOUT_MS 调整(上限夹到平台 120 秒);上游 30x 的 Location 自动改写回本站路径,跟随仍走反代
默认拒绝内网 / 回环 / 云元数据目标(403 且不回源),IPv6 映射与整型写法一并覆盖;需反代内网模型可开 ALLOW_PRIVATE_TARGETS
x-proxy-upstream(实际命中域名)与 x-proxy-ttfb(毫秒);/healthz 返回服务状态
配置 PROXY_TOKEN 后需带 x-proxy-token 请求头访问
从你的浏览器经本站访问各厂商接口,验证链路是否通畅(401 / 403 表示已成功到达上游,仅缺密钥)。