什么是 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-proxyAzure 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 --nameazure-openai-proxy \ --env AZURE_OPENAI_ENDPOINT{你的Azure Endpoint} \ --env AZURE_OPENAI_MODEL_MAPPERgpt-3.5-turbogpt-35-turbo \ ishadows/azure-openai-proxy:latest也可以 clone 仓库自行构建构建过程见 Dockerfilegit clone https://gitcode.com/gh_mirrors/azur/azure-openai-proxy.git常用环境变量清单参数名说明默认值AZURE_OPENAI_PROXY_ADDRESS服务监听地址0.0.0.0:8080AZURE_OPENAI_PROXY_MODE代理模式azure/openaiazureAZURE_OPENAI_ENDPOINTAzure OpenAI Endpoint必需—AZURE_OPENAI_APIVERSIONAPI 版本2023-03-15-previewAZURE_OPENAI_MODEL_MAPPER模型名部署名 映射对逗号分隔gpt-3.5-turbogpt-35-turboAZURE_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-upgradegpt-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/models、OPTIONS请求✅ Mock 返回针对兼容性还做了不少细节处理见 main.go/v1/models接口直接 Mock 返回常用模型列表解决依赖该接口的 Web 项目报错OPTIONS预检请求返回跨域头解决浏览器跨域检查失败的问题 流式响应SSE自动补一个结尾换行修复部分前端渲染异常七、新手常见问题 FAQQ1我的项目需要改代码吗不需要。反向代理模式下只需把项目的 API Base URL 指向代理地址模型名照旧填写即可。Q2API 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),仅供参考