本文主要介绍如何申请 Microsoft Azure OpenAI 并在软件中使用它。虽然 OpenAI 官方也有自己的 API 申请渠道,但从难易度和等待时长来看,微软 API 的申请速度更快,且两者的 GPT 级别相同。
在使用 Azure OpenAI 之前,需要先创建一个 Azure 帐户,然后在 Azure 门户中创建一个 Cognitive Services 资源。在创建资源时,需要选择“认知服务”类别,然后选择“文字分析”和“OpenAI”选项,最后选择资源的计划和定价层。创建完成后,可以从 Azure 门户中获取资源的端点和密钥。
接下来,在使用 Azure OpenAI 时,需要使用 HTTP 请求发送数据到资源的端点,并使用资源密钥进行身份验证。可以使用各种编程语言和框架来发送 HTTP 请求,例如 Python 的 requests 库、JavaScript 的 fetch API 等。
在发送请求时,需要将请求正文中的数据格式化为 JSON,并将其包含在请求头中。请求正文应包含输入文本、模型名称和参数设置等信息。Azure OpenAI 支持多个模型,包括 GPT-3、GPT-2 和 BERT 等,可以根据需求选择不同的模型。
最后,需要将 Azure OpenAI 返回的 JSON 响应解析为文本,并对其进行后续处理。可以使用适当的算法和技术来处理生成的文本,例如文本摘要、关键词提取、情感分析等。
Azure OpenAI背景:
如今,人工智能技术正在不断发展,越来越多的企业和个人开始探索人工智能在不同领域的应用。在自然语言处理领域,OpenAI 的 GPT 系列模型成为了研究热点,OpenAI 公司的 ChatGPT 更是引领了一波 AI 应用的浪潮。一些科技公司也在努力跟进,比如百度的文心一言、Google 的 Bard 以及 Notion AI,但就目前的体验来看,OpenAI ChatGPT 的表现仍是最佳的。
作为 OpenAI 公司的大股东,Microsoft 当然是使用其服务的一等公民,陆续推出了 GitHub Copilot、New Bing、Office 365 Copilot 和 GitHub Copilot X 等等。目前,Microsoft Azure 是唯一一个提供 OpenAI 云服务的云厂商,Azure OpenAI 提供的 API 服务使得构建和部署自己的 ChatGPT 成为了可能。
Azure OpenAI优势
- 国内可直接调用Azure的接口域名,不用套代理。不担心风控。
- 历史文章:OpenAI风控升级,避免API被封,请详细阅读本文说明
- OpenAI产生的费用可用直接用Azure每个月额度抵扣(针对一些Azure Stu,企业版,Biz版等。即用即付不行)。
- 某些国内公司想用OpenAI服务,苦于联系不上OpenAI官方。可以试一试Azure的OpenAI方式。
Azure OpenAI 和 OpenAI对比
Azure OpenAI 和 OpenAI 官方提供的服务基本一致,但目前前者仍处于预览版状态,因此某些功能还未完全开放。
需要使用 Azure 国际版进行申请。
优点:
- 不受地域限制,国内可以直接调用。
- 可以自己上传训练数据进行训练(据说很贵)。
- Azure 多语言 SDK 支持。
- 更适合企业私有化,数据可完全控制删除。
缺点:
- 部分功能未开放,但 ChatGPT 的功能是可用的。
- 与 OpenAI 官方的 API 标准存在差异,因此无法直接在一些只支持 OpenAI 官方 API 的开源项目中使用。
Azure OpenAI 现在已经支持 GPT-4,但需要单独申请。
Azure OpenAI准备工作:
- 软件:我们可以在手机上使用 OpenCat 来进行 API 调用,文章后面将介绍如何使用。
信用卡:注册Azure 账号,需要支持外币支付的VISA 或者万事达卡
Azure OpenAI申请流程:
Azure OpenAI 的申请流程分为两个部分,可以同时进行。两者都需要企业邮箱(公司员工可以直接使用公司分配的邮箱进行申请)。
- 创建 OpenAI 服务的申请:通过该申请,可以在 Azure 平台上创建 OpenAI 服务,并增加 GPT-3.5 的调用功能。
- GPT-4 的 API 创建申请:通过该申请,可以使用 GPT-4(价格比 GPT-3 更高),但前提是已经创建好了 OpenAI 服务。
注册登录 Azure 平台
注册国版 Azure 账号
Azure OpenAI Service 是 Azure Cognitive Services 的一部分,所以需要先注册 Azure 账号。目前只在 Azure 国际版上提供,所以请到Azure 国际版( https://azure.microsoft.com/zh-cn/free/ )上注册账号。
注册时,可以选择中国地区,在这种情况下,你可以直接输入+86的手机号进行验证。
如果你选择了其他国家或地区,但仍想使用+86的手机号进行验证,你可以先输入所选择国家或地区的手机号,然后在电话号码下方勾选“请使用其他电话号码进行验证身份”选项。
这时会展开一个新的电话号码输入框,并让你手动选择手机号的国家/地区代码,选择中国,然后输入+86的手机号即可进行验证。
一旦注册完成,当前账号的国家/地区将无法更改。如果需要更改,必须创建一个新的账号并重新注册。
信用卡验证
账单地址应该与你选国家/地区保持一致,否则会提示注册失败。
注册完成后,登录 Azure 官网,你可以在右上角的个人资料中添加新的付款方式,如「支付宝」。
在首页界面,需要为自己的账户创建一个订阅。
每个订阅都有自己的 ID,记住这个 ID,后面的 OpenAI 服务申请会用到。
创建成功后如图所示。
点击左侧栏,选择「所有资源 -> 创建 -> 搜索 Azure OpenAI -> 创建」,你可能会看到缺少相关权限。接下来进行以下申请。
申请 Azure OpenAI 服务试用
Azure OpenAI Service 申请
订阅 ID (Azure Subscription ID) 很关键,当 API 申请成功后,会通过它将资格关联给你。
申请内容正常填写,关于企业部分,注意不能使用 QQ 邮箱、EMAIL 邮箱等,必须为企业邮箱。
目前,Azure OpenAI 服务需要以企业身份进行申请试用。如果已经注册好了 Azure 账号,可以点击这里进行申请。
- Azure OpenAI 服务接受来自中国企业的申请,请如实填写表单中的信息,其中最重要的是:
- Your Company Email Address:请填写你在所在公司的企业邮箱地址。
- Your Company Name:请填写你所在公司的名称。
- Azure Subscription ID:请根据表单中的提示获取你的 Azure 订阅 ID。千万不要填写成 Tenant ID,否则将无法通过审核或看不到订阅层。
- Company Website:请填写你所在公司的网站地址。最好展示一个与你企业邮箱地址相同域名的邮箱地址。
你的企业邮箱域名、公司网站域名需要保持一致,且域名主体需要与公司名称保持一致,否则可能在审核时被拒绝。
如果填写的信息存在明显问题,Azure 可能不会给出任何回复。
如果填写的信息需要进一步证明材料,Azure 将通过邮件要求提供。
如果运气好,一般审核通过需要花费两天左右,如果超过两周仍未收到审核结果,请尝试重新提交申请。
申请OpenAi的接口步骤
直接访问 https://portal.azure.com/?quickstart=true#view/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/~/OpenAI
或者搜索 openai,即可进入申请页面
按界面指示,创建 azure openai.
创建 Azure OpenAI,资源组自己起个名,比如 odooapp
这时就会提示了需要特殊申请了。点击去申请 openai 服务。
填入相关信息,最重要的是 订阅服务 id,
这个去右上方找,复制过来即可。
接着是公司信息,注意现在chatgpt只支持公司申请,不要使用免费邮箱,使用自己公司邮箱即可。
申请模型时,Text是指chatgpt,Dall-e2是图片引擎,可以一并申请
填完20多个问题提交即可,越真实越好,毕竟排队人多,有空可以把他们的调研也做了。
如果你有在微软的同学,那你很幸运,填入她或他的id,可以加快你的审批流程。如果你是微软MVP,那你也很幸运,填入id即可。我们是2种幸运加持,所以很快过审了。
申请过审后,2~10天不等,你会收到一封邮件,点击 verify 验证通过,千万不要点错到 not register了
这只是验证邮件,再多等几天,如果申请通过,你会再收到一封 onboarding 邮件。
如果你对 Chatgpt4感兴趣,也同时申请了Chatgpt4,那么再等多几天,可能你就会从Waiting List转入到 Preview 队列中。
Onboarding 邮件,代表申请通过,可使用Chatgpt3.5及Dalle-2
Chatgpt4的申请我们也过了,可能和在微软积累的信用有关,还是比较顺利的。
Chatgpt4 十分十分好用,回答高效很多,不过价格真是贵,连Prompt也计价,差不多40倍了。
部署 Azure OpenAI Service
恭喜你已经申请到了 Azure OpenAI Service 的试用资格,接下来就是部署 Azure OpenAI Service 了。
iOS 端推荐使用 OpenCat。它不仅支持 gpt-3.5 与 gpt-4,还支持 Azure TTS。
在密钥部分填写已创建的 OpenAI 服务密钥,域名使用 CloudFlare Workers 自动生成的域名。务必勾选「发送 API Key」,否则会出错。
创建OpenAI
1,搜索资源 OpenAI 可找到Azure OpenAI。点击创建!
填写信息!名称随意!定价选S0
区域,可选美国东部(法国和欧洲,看你使用情况可选)
2,网络选择所有网络 即可。
3,标记。没有啥标记的直接下一步!
4,验证相关信息,验证通过后,直接点击创建即可!
5,稍等几分钟,部署完成!
记录关键信息
打开新建的OpenAI 有几个关键的内容,保存好后面会使用!
1,终结点 ,如图就是我们专属的接口域名地址
2,密钥,点击管理密钥可看见密钥内容
模型部署
1,点击 模型部署,点击 【管理部署】按钮。浏览器会在当前页面打开模型管理的另一个平台。
2,在Azure AI 平台中,点击【新建部署】
3,这里需要选择模型,以及填写部署名称。
模型,选择 gpt-35-turbo(如果你有gpt-4.0,选择这个也行)
部署名,填写即可。这个部署名后面也会用到!
高级选项, 可设置Token上限,最高支持240K(酌情选择设置)
自定义过滤器,按需设置即可
4,分分钟创建成功!Azure AI中也提供了和可以直接聊天的功能,操场设置各类参数。
5,体验自带的会话功能。
使用
前面折腾这么多!我们主要要是为了将OpenAI集成到实际场景中。
Azure OpenAI 和 OpenAI官方的调用方式基本相似。只有3处需要注意。
准备工作
终结点
OpenAI官方是 api.openai.com
Azure OpenAI 则是 xxx-openai.openai.azure.com ( 每个都不太一样,别直接使用这个哈)
APIKEY
OpenAI官方是是以sky 开头的一段
Azure OpenAI是无规律的一段
部署名称(Deployment Name)
部署模型时填写的名称
HTTP调用
接口地址:https://xxx-openai.openai.azure.com/openai/deployments/ruyo-gpt/chat/completions/?api-version=2023-05-15
请求方式:POST
BODY:
这部分和OpenAI基本一致!这里不做太多的介绍!
{ "messages": [ { "role": "system", "content": "AI助手" }, { "role": "user", "content": "接码号怎么样" } ]}
SDK调用
博主只测试了 Python3 的 openai SDK
第一步:安装SDK
pip install openai
第二步:写代码,测试功能
注意下面的 api_base,api_key,engine 分别对应 终结点,APIKEY,部署名称
import osimport openaiopenai.api_type = "azure"openai.api_base = "https://ruyo-openai.openai.azure.com" openai.api_version = "2023-05-15"openai.api_key = "exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"response = openai.ChatCompletion.create( engine="RUYO-GPT", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"}, {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}, {"role": "user", "content": "Do other Azure Cognitive Services support this too?"} ] )print(response)print(response['choices'][0]['message']['content'])
更多其他调用方式,参考官方文档:https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/chatgpt-quickstart?tabs=bash&pivots=programming-language-studio
限制
以下部分提供了适用于 Azure OpenAI 配额和限制的快速指南:
限制名称 | 限制值 |
---|---|
每个 Azure 订阅中每个区域的 OpenAI 资源 | 3 |
每个模型的请求限制* | Davinci 模型(002 和更高版本):每分钟 120 个 ChatGPT 模型(预览):每分钟 300 个 GPT-4 模型(预览):每分钟 18 个 DALL-E 模型(预览):2 个并发请求 所有其他模型:每分钟 300 个 |
每个模型的令牌限制* | Davinci 模型(002 和更高版本):每分钟 40,000 个 ChatGPT 模型:每分钟 120,000 个 GPT-4 8k 模型:每分钟 10,000 个 GPT-4 32k 模型:每分钟 32,000 个 所有其他模型:每分钟 120,000 个 |
最大微调模型部署* | 2 |
能够将同一模型部署到多个部署 | 不允许 |
每个资源的训练作业总数 | 100 |
每个资源同时运行的最大训练作业数 | 1 |
排队的最大训练作业数 | 20 |
每个资源的最大文件数 | 50 |
每个资源的所有文件的总大小 | 1 GB |
最大训练作业时间(如果超过,作业将失败) | 720 小时 |
最大训练作业大小(训练文件中的标记数)×(时期数) | 20 亿 |
打造自己的 ChatGPT
Azure OpenAI Proxy
打造自己的 ChatGPT 推荐直接使用 https://github.com/Chanzhaoyu/chatgpt-web 这个项目。
目前这个项目还不支持 Azure OpenAI。我曾经尝试过对此项目进行修改,使其能够调用 Azure OpenAI,但是仍然存在一个问题,就是无法正常自动结束对话。经过代码跟踪,我发现了一个错误:
https://github.com/Chanzhaoyu/chatgpt-web -> https://github.com/transitive-bullshit/chatgpt-api -> https://github.com/rexxars/eventsource-parser
最终发现是在 eventsource-parser 这个包中出了问题,无法适应 Azure OpenAI 返回的结果,因为 Azure OpenAI 返回的调用结果最后少了一个换行符 \n。
为了解决这个问题,我想到了一个方法,就是自己实现一个代理来将 OpenAI 官方 API 标准转换成 Azure OpenAI 标准,这样就能让 Azure OpenAI 直接对接到任何支持 OpenAI 的项目上,并且可以修复上述差异,使 chatgpt-web 直接使用 Azure OpenAI。
项目地址:https://github.com/stulzq/azure-openai-proxy
2.搭建#
最快的方式当然是使用 Docker,以下是 docker compose 脚本:
version: '3'services: chatgpt-web: image: chenzhaoyu94/chatgpt-web ports: - 3002:3002 environment: OPENAI_API_KEY: <Auzre OpenAI API Key> OPENAI_API_BASE_URL: http://azure-openai:8080 AUTH_SECRET_KEY: "" MAX_REQUEST_PER_HOUR: 1000 TIMEOUT_MS: 60000 depends_on: - azure-openai links: - azure-openai networks: - chatgpt-ns azure-openai: image: stulzq/azure-openai-proxy ports: - 8080:8080 environment: AZURE_OPENAI_ENDPOINT: <Auzre OpenAI API Endpoint> AZURE_OPENAI_MODEL_MAPPER: <Auzre OpenAI API Deployment Mapper> AZURE_OPENAI_API_VER: 2023-03-15-preview networks: - chatgpt-nsnetworks: chatgpt-ns: driver: bridge
启动有 3 个环境变量需要配置:
变量名 | 说明 |
---|---|
OPENAI_API_KEY | Azure 密钥和终结点 里提供的 Key |
AZURE_OPENAI_ENDPOINT | Azure 密钥和终结点 里提供的终结点 |
AZURE_OPENAI_MODEL_MAPPER | Azure 部署模型名称映射到 OpenAI 官方模型名称 |
特别说明一下 AZURE_OPENAI_MODEL_MAPPER
使用 OpenAI 官方标准发起的请求里包含的模型名称是固定的,在这里可以查询,而在 Azure OpenAI 模型部署时是可以自定义名称的,请求 Azure yes需要提供这个部署模型的名称,所以建立了一个映射关系。
比如我在 Azure 部署了一个 gpt-3.5-turbo
模型,我设置的部署名称为:xc-gpt-35
,此时我的设置:
AZURE_OPENAI_MODEL_MAPPER: gpt-3.5-turbo=xc-gpt-35
总结
Azure OpenAI 平台为开发人员提供了一个强大的工具,可以轻松创建和训练 ChatGPT 模型。随着 ChatGPT 技术的不断发展,它将在越来越多的应用场景中发挥重要作用,为人们提供更智能、更个性化的服务和体验。
以上就是在中国免费使用 ChatGPT 的方法了,只需要一个接口,就能为全村带来希望。当然,最重要的是要合法合规地享受 AI 带来的乐趣和便利。