OpenAI 目前对国内的风控越来越严格,已经完全不顾你的使用规模了,封你时毫不留情面,一言不合就会直接删掉你的账户,而且现在封号后你如何哭诉去申诉都是没有用的。
7月9日起更是全面暂停面向中国的服务。
这对于国内 OpenAI 赛道的开发者来说更是雪上加霜。
如何一劳永逸地解决这个问题呢?
可以说目前最好的解决方案,就是使用 Azure 的 OpenAI Service了。
10分钟注册 Azure 的 OpenAI服务
目前使用OpenAI的能力主要有2个主流渠道,这2种渠道提供的API能力无差异。
1、对接OpenAI官方提供的API。(目前在国内使用官方已明确会被封禁)
2、对接微软Azure提供的OpenAI能力(目前国内唯一合规渠道,申请需企业资质,价格基本一样还可开发票)
微软Azure OpenAI服务可以合规、稳定地提供企业用户使用ChatGPT的可能。出于合规角度,建议国内企业可以选择微软的Azure OpenAI服务来使用接口。通过微软官方合作伙伴获取服务,企业用户可以合规、稳定地使用ChatGPT,满足国内发票需求,同时也能解决连接不稳定/响应速度慢/并发配额低等问题。
微软 Azure OpenAI 免费试用:
https://azureopenai.cloudallonline.com/?zxwsh23
创建 Azure OpenAI 服务
申请到账户,收到审核通过的邮件后,进入Azure 首页,搜索,选择该类型的服务并进入页面,点击创建按钮进入创建页面。
Azure OpenAI
模型部署
创建好 OpenAI 服务后,点击该服务进入 OpenAI 的服务页面,选择模型部署,然后点击按钮,进入页面。
模型管理
Azure AI Studio
进去后选择侧边栏的菜单,点击按钮,然后选择模型,这里我们选择即可,再选择模型版本,有和两个,我们当然选择最新的版本,然后输入部署名称,注意名称只能包含和特殊字符,其他的特殊字符不能写到名称中,最后点击按钮完成部署的创建。
部署
创建新部署
gpt35-turbo
0301
0613
0613
创建
获取 API URL 和 API Key
模型部署完成后,重新进入 OpenAI 页面,选择菜单(在模型部署菜单上面),进去后可以看到有 2 个键和 1 个端点,端点就是 API URL,键就是 API KEY,随便用其中一个 KEY 就可以了。
键和端点
Azure OpenAI API 使用
拿到 API URL 和 API KEY 后,就可以使用 OpenAI API 了,这里用 curl 命令来测试一下,示例代码如下。
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/$DEPLOYMENT_NAME/chat/completions\?api-version\=2023-06-31-preview \ -H "Content-Type: application/json" \ -H "api-key: $AZURE_OPENAI_KEY" \ -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "hello"}]}'
这个 curl 命令可以在国内直接访问,大家可以在自己电脑终端上试一下。
然后我们再看下请求返回的结果:
{ "id": "chatcmpl-7lurXrxcVQDGEWssG28dxeJkpKLTD", "object": "chat.completion", "model": "gpt-35-turbo", "prompt_annotations": { "hate": { "filtered": false, "severity": "safe" }, "self_harm": { "filtered": false, "severity": "safe" }, "sexual": { "filtered": false, "severity": "safe" }, "violence": { "filtered": false, "severity": "safe" } }, "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "Hello! How can I assist you today?" }, "content_filter_results": { // 与 prompt_annotations 内容相同 } } ], "usage": { "completion_tokens": 9, "prompt_tokens": 18, "total_tokens": 27 }}
我们再看看 OpenAI API 的返回结果:
{ "id": "chatcmpl-7lvHYFBRjBTWDf24TSy1JfL6zCmMj", "object": "chat.completion", "model": "gpt-3.5-turbo-0613", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Hello! How can I assist you today?" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 19, "completion_tokens": 9, "total_tokens": 28 }}
可以看到 Azure OpenAI 的返回结果和 OpenAI API 的返回结果大致相同,除了 Azure OpenAI 的返回结果中多了和这 2 个属性,这 2 个属性分别是对问题和答案的检查结果,检测其中是否包含违规的信息,比如暴力黄色什么的,如果设置了过滤信息检查并检查出了违规内容,Azure OpenAI 的请求就会失败。
prompt_annotations
content_filter_results
Langchain 中对 OpenAI LLM 进行替换
如果你使用的是 Langchain 的 Python 包,可以使用类来替换类,示例代码如下:
AzureOpenAI
OpenAI
from langchain.llms import AzureOpenAIllm = AzureOpenAI( openai_api_type="azure", openai_api_key="Azure OpenAI API KEY", openai.api_base="Azure OpenAI API URL", openai_api_version="2023-06-31-preview", deployment_name="Deployment Name",)
如果你使用的是 Langchain 的 JS 包,可以直接使用原来的类,只需要把原来的参数改成其他的 Azure OpenAI API 参数就可以了,示例代码如下:
ChatOpenAI
openaiKey
import { ChatOpenAI } from 'langchain/chat_models/openai';const model = new ChatOpenAI({ azureOpenAIApiVersion: '2023-06-01-preview', azureOpenAIApiKey: 'Azure OpenAI API KEY', azureOpenAIBasePath: 'Azure OpenAI API URL', azureOpenAIApiDeploymentName: 'Deployment