news 2026/8/24 8:43:28

什么是 Azure OpenAI Proxy?面向新手的 OpenAI API 代理完整指南:一文解决 OpenAI 与 Azure API 不兼容难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是 Azure OpenAI Proxy?面向新手的 OpenAI API 代理完整指南:一文解决 OpenAI 与 Azure API 不兼容难题

什么是 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 APIAzure 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/openaiazure
AZURE_OPENAI_ENDPOINTAzure OpenAI Endpoint(必需)
AZURE_OPENAI_APIVERSIONAPI 版本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-turbogpt-35-turbo-upgrade
gpt-3.5-turbo-0301gpt-35-turbo-0301-fine-tuned

如果某个模型名未命中映射表,代理会走 fallback 策略:自动去掉模型名中的.:后透传(大部分 Azure 模型命名与 OpenAI 保持一致,微调模型通常可直接透传)。映射解析逻辑可参考 pkg/azure/proxy.go 中的GetDeploymentByModel函数。

六、支持哪些接口?还有哪些贴心设计?

接口状态
/v1/chat/completions✅ 已代理
/v1/completions✅ 已代理
/v1/embeddings✅ 已代理
/v1/modelsOPTIONS请求✅ 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 8:43:11

C++成员模板:从基础概念到智能指针实战应用

1. 项目概述&#xff1a;成员模板的定位与价值在C的模板编程世界里&#xff0c;我们早已习惯了函数模板和类模板。函数模板让我们能写出处理多种数据类型的通用算法&#xff0c;比如一个max函数可以同时处理int、double和自定义类型。类模板则让我们能构建出像std::vector<T…

作者头像 李华
网站建设 2026/8/24 8:40:09

不用授权、不受平台限制:drawio-desktop 免费画图工具实战指南

不用授权、不受平台限制&#xff1a;drawio-desktop 免费画图工具实战指南 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop drawio-desktop 是一个基于 Electron 构建的桌面画图…

作者头像 李华
网站建设 2026/8/24 8:39:56

基于Spring Boot的物归原主校园失物招领管理系统设计实现

一、项目背景与意义 在高校校园环境中&#xff0c;学生、教职工遗失物品&#xff08;如校园卡、钥匙、书本、电子产品等&#xff09;的情况时有发生。传统的失物招领方式主要依靠公告栏张贴启事、校园广播或微信群发布信息&#xff0c;存在信息传播范围有限、查找效率低下、认…

作者头像 李华