Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Model Proxy Starter

一键在 EdgeOne Makers 上部署一个属于你自己的 OpenAI 兼容模型代理端点。 背后指向你已有的 AI 网关;客户端只需修改 base_url,即可用 OpenAI SDK 无感调用。


✨ 特性

  • OpenAI 兼容协议:完整透传 /v1/* 全部端点(chat/completions / embeddings / models / rerank …)
  • 零业务耦合:所有模型路由、缓存、限流、Fallback 全部交给上游 AI 网关,本代理只负责暴露入口
  • 完整流式:SSE (stream: true) 逐字节透传,客户端体验与直连一致
  • 鉴权隔离:对外发放独立的 PROXY_API_KEY,与上游网关 Key 完全解耦;可随时轮换而不动上游
  • 全球边缘:跑在 EdgeOne 3200+ 边缘节点,就近响应
  • 零依赖:全部使用 Web 标准 API(Fetch / Response / Streams),无 node_modules

🏗️ 架构

Client (OpenAI SDK)
   │  base_url = https://your-proxy.edgeone.app/v1
   │  Authorization: Bearer <PROXY_API_KEY>
   ▼
EdgeOne Makers Edge Function  (this repo)
   │  1. 校验 PROXY_API_KEY
   │  2. 剥离客户端 Authorization
   │  3. 注入真实 UPSTREAM_API_KEY
   │  4. 透传 method / path / query / body
   ▼
Your AI Gateway (UPSTREAM_BASE_URL)
   │  路由、缓存、Fallback、可观测、计费 …
   ▼
Real Model Providers (OpenAI / DeepSeek / Hunyuan / ...)

🚀 5 分钟部署到 EdgeOne Makers

方式一:Git 连接(推荐)

  1. Fork 本仓库到你自己的账号
  2. 打开 EdgeOne Makers 控制台
  3. 创建项目 → 连接 Git 仓库 → 选择本仓库
  4. 在项目 环境变量 中配置:
    PROXY_API_KEY     = eo-sk-xxxxxxxxxxxx      ← 你要发放给客户端的 Key(自定义)
    UPSTREAM_BASE_URL = https://your-gateway/v1  ← 你的 AI 网关地址
    UPSTREAM_API_KEY  = sk-your-real-key         ← 你的 AI 网关 Key
    
  5. 点击部署,几十秒后拿到形如 xxx.edgeone.app 的域名

方式二:EdgeOne CLI

npm install -g edgeone
git clone <this-repo>
cd model-proxy-starter
edgeone pages login
edgeone pages deploy

📞 调用示例

Python(OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://your-proxy.edgeone.app/v1",  # ← 你的 Makers 域名
    api_key="eo-sk-xxxxxxxxxxxx",                   # ← 你在 PROXY_API_KEY 里配的
)

resp = client.chat.completions.create(
    model="gpt-4o",  # 模型 ID 由你上游 AI 网关定义
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

流式(SSE)

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "写一首七律"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

curl

curl https://your-proxy.edgeone.app/v1/chat/completions \
  -H "Authorization: Bearer eo-sk-xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role":"user","content":"Hello"}]
  }'

列出可用模型(透传上游)

curl https://your-proxy.edgeone.app/v1/models \
  -H "Authorization: Bearer eo-sk-xxxxxxxxxxxx"

📁 项目结构

model-proxy-starter/
├── edge-functions/
│   ├── index.js                       # GET  /            健康检查
│   ├── _lib/
│   │   ├── upstream.js                # 上游配置读取
│   │   └── auth.js                    # 鉴权 & CORS
│   └── v1/
│       └── [[default]].js             # ANY  /v1/*        透传给上游 AI 网关
├── examples/
│   ├── curl-test.sh
│   └── python-test.py
├── package.json
├── .env.example
└── README.md

Makers Edge Functions 路由约定

  • edge-functions/index.js/
  • edge-functions/v1/[[default]].js/v1/**(多级动态路由,匹配 /v1/* 下的任意子路径)

🔐 鉴权说明

  • PROXY_API_KEY 支持逗号分隔配置多把 Key(例:k1,k2,k3),任一匹配即可
  • 请求头必须是 Authorization: Bearer <key>
  • PROXY_API_KEY 未配置,则放行所有请求(仅限本地开发
  • 客户端的 Authorization 会被剥离,替换为服务端的 UPSTREAM_API_KEY 才转发给上游

⚠️ 使用限制

Edge Functions 平台限制(参考 官方文档):

限制
代码包大小 5 MB
请求 body 1 MB
CPU 时间 200 ms(不含 I/O 等待,流式响应完全不受影响)
语言 JavaScript ES2023+

上述限制对纯代理场景绰绰有余(本项目 CPU 用时 <5ms)。


📜 License

MIT

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages