什么是 Azure OpenAI Proxy?面向新手的 OpenAI API 代理完整指南:一文解决 OpenAI 与 Azure API 不兼容难题
【免费下载链接】azure-openai-proxyA proxy for Azure OpenAI API that can convert an OpenAI request into an Azure OpenAI request.项目地址: https://gitcode.com/gh_mirrors/azur/azure-openai-proxy
🔑Azure OpenAI Proxy是一个用 Go 语言编写的 OpenAI API 代理工具,它能把标准 OpenAI 请求自动转换成 Azure OpenAI 请求,让你无需改动任何代码,就能让各类开源 ChatGPT 项目直接跑在 Azure OpenAI 上;它也支持作为纯 OpenAI 接口代理,解决部分地区无法直连 OpenAI 接口的问题。
一、痛点:OpenAI 与 Azure OpenAI 接口为什么不兼容?
很多同学把 Azure 资源接进自己熟悉的 ChatGPT 开源项目时,都会遇到"报错一片"的情况。原因很简单:虽然服务同源,但两者的 API 规范并不一样。
| 对比项 | 原生 OpenAI API | Azure OpenAI API |
|---|---|---|
| 请求路径 | /v1/chat/completions | /openai/deployments/{部署名}/chat/completions |
| 鉴权方式 | Authorization: Bearer *** | 请求头api-key |
| 模型标识 | 模型名(如gpt-3.5-turbo) | 部署名(如gpt-35-turbo) |
| 版本参数 | 无需 | 必须携带api-version查询参数 |
换句话说:同一个模型名,在 Azure 上可能叫另一个名字;同一个请求头,在 Azure 上根本不认。手动改造请求代码费时费力,这正是代理工具登场的地方。
二、Azure OpenAI Proxy 能做什么?
这个工具的核心定位是"OpenAI 与 Azure OpenAI 之间的翻译官",主要能力有:
- 🌐 代理 Azure OpenAI 的全部主要接口(对话、补全、向量)
- 🧠 支持所有 Azure OpenAI 模型,包括自定义微调模型
- 🗺️ 支持自定义"模型名 → 部署名"的映射关系
- 🔄 同时提供反向代理和正向代理两种使用方式
- 👍 对 Azure 不支持的 OpenAI 接口(如列出模型)自动 Mock 返回,兼容更多 Web 项目
核心逻辑集中在两个源码文件中:main.go 负责路由分发,pkg/azure/proxy.go 负责把 OpenAI 请求改写为 Azure 请求(替换鉴权头、拼接部署路径、附加api-version参数)。
三、两种代理模式:总有一种适合你
1️⃣ 反向代理模式(OpenAI API 网关)
你的项目把接口地址指向本代理,代理再转发到 Azure。适合"我想把 Azure 当作 OpenAI 用"的场景,也是默认模式:
- 请求:
POST /v1/chat/completions - 代理改写为:
POST {AzureEndpoint}/openai/deployments/{部署名}/chat/completions?api-version=... - 鉴权自动从
Authorization: Bearer换成api-key请求头
2️⃣ 正向代理模式(HTTP Proxy)
代理把请求透明转发到https://api.openai.com,适合在部分地区直连 OpenAI 受限的环境下使用。该模式的实现见 pkg/openai/proxy.go,注意它不内置 HTTPS 终结,通常需要在前面架设 Nginx 提供 HTTPS 支持。
通过环境变量AZURE_OPENAI_PROXY_MODE(取值azure/openai)即可切换。
四、最快上手:Docker 一键部署步骤
无需编译,官方镜像几分钟即可跑起来:
docker pull ishadows/azure-openai-proxy:latest docker run -d -p 8080:8080 --name=azure-openai-proxy \ --env AZURE_OPENAI_ENDPOINT={你的Azure Endpoint} \ --env AZURE_OPENAI_MODEL_MAPPER=gpt-3.5-turbo=gpt-35-turbo \ ishadows/azure-openai-proxy:latest也可以 clone 仓库自行构建(构建过程见 Dockerfile):
git clone https://gitcode.com/gh_mirrors/azur/azure-openai-proxy.git常用环境变量清单
| 参数名 | 说明 | 默认值 |
|---|---|---|
AZURE_OPENAI_PROXY_ADDRESS | 服务监听地址 | 0.0.0.0:8080 |
AZURE_OPENAI_PROXY_MODE | 代理模式:azure/openai | azure |
AZURE_OPENAI_ENDPOINT | Azure OpenAI Endpoint(必需) | — |
AZURE_OPENAI_APIVERSION | API 版本 | 2023-03-15-preview |
AZURE_OPENAI_MODEL_MAPPER | 模型名=部署名 映射对,逗号分隔 | gpt-3.5-turbo=gpt-35-turbo |
AZURE_OPENAI_TOKEN | 设置后忽略请求头中的 Token | 空 |
部署完成后,像调用 OpenAI 一样调用即可:
curl https://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer {你的Azure API Key}" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Hello!"}] }'五、模型映射机制:模型名和部署名对不上怎么办?
Azure 上你部署的模型有独立"部署名",往往和 OpenAI 模型名不一致(比如gpt-3.5-turbo对应gpt-35-turbo)。代理内置了默认映射,并支持用AZURE_OPENAI_MODEL_MAPPER自定义扩展:
| OpenAI 模型名 | Azure 部署名 |
|---|---|
gpt-3.5-turbo | gpt-35-turbo-upgrade |
gpt-3.5-turbo-0301 | gpt-35-turbo-0301-fine-tuned |
如果某个模型名未命中映射表,代理会走 fallback 策略:自动去掉模型名中的.和:后透传(大部分 Azure 模型命名与 OpenAI 保持一致,微调模型通常可直接透传)。映射解析逻辑可参考 pkg/azure/proxy.go 中的GetDeploymentByModel函数。
六、支持哪些接口?还有哪些贴心设计?
| 接口 | 状态 |
|---|---|
/v1/chat/completions | ✅ 已代理 |
/v1/completions | ✅ 已代理 |
/v1/embeddings | ✅ 已代理 |
/v1/models、OPTIONS请求 | ✅ Mock 返回 |
针对"兼容性"还做了不少细节处理(见 main.go):
- 📋
/v1/models接口直接 Mock 返回常用模型列表,解决依赖该接口的 Web 项目报错 - 🌐
OPTIONS预检请求返回跨域头,解决浏览器跨域检查失败的问题 - 📄 流式响应(SSE)自动补一个结尾换行,修复部分前端渲染异常
七、新手常见问题 FAQ
Q1:我的项目需要改代码吗?不需要。反向代理模式下,只需把项目的 API Base URL 指向代理地址,模型名照旧填写即可。
Q2:API Key 填在哪里?两种都行:请求头Authorization: Bearer {Azure Key},或统一配置AZURE_OPENAI_TOKEN环境变量(后者会覆盖请求头)。
Q3:微调模型能用吗?可以。Azure 上的自定义微调模型同样支持,直接透传部署名或配置映射即可。
💡小结:如果你正在为 OpenAI 与 Azure API 的格式差异头疼,Azure OpenAI Proxy 提供了一个轻量、可 Docker 一键部署的中间层,让"原生 OpenAI 代码"无缝跑在 Azure 上。配置好 Endpoint 和模型映射,几分钟即可开工。
【免费下载链接】azure-openai-proxyA proxy for Azure OpenAI API that can convert an OpenAI request into an Azure OpenAI request.项目地址: https://gitcode.com/gh_mirrors/azur/azure-openai-proxy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考