对于大部分开发者来说,如果想开发AI应用,接入OpenAI的API接口,必然要考虑的是如何创建账号,然后给OpenAI账号绑定一个卡进行额度充值。

但是, 随着OpenAI风控的升级,很多虚拟卡都已经被拒绝了,这就导致很多时候我们不能正常地绑定成功。

没有绑定卡的账号虽然可以使用,但是相应的接口访问次数都会被限制的。一个人使用没什么问题,对企业合规性来说,业务大了使用起来就很麻烦了,换句话说就是想花钱充值都充值充值不了。

另外直接使用OpenAI的接口会有一些安全风险,这个懂的都懂,就不细说了。

其实,目前使用OpenAI的能力主要有2个主流渠道,这2种渠道提供的API能力无差异。

1、对接OpenAI官方提供的API。(目前在国内使用可能会被随时封禁,个人兴趣开发者可选择)

2、对接微软Azure提供的OpenAI能力(目前国内唯一合规渠道,申请需企业资质)

参考链接:
微软 Azure OpenAI 申请https://azureopenai.cloudallonline.com/?zxwwy4

出于合规角度,建议国内企业可以选择微软的Azure OpenAI服务来使用接口。

通过微软官方合作伙伴获取服务,可以合规、稳定地提供企业用户使用ChatGPT的可能,满足国内发票需求,同时也能解决连接不稳定/响应速度慢/并发配额低等问题。

作为微软的合作伙伴,全云在线可为企业开通绿色申请通道!企业版AZURE OPEN AI 最新版本GPT-4o、 Turbo、Dalle-3,只要企业有需求,全云在线都能协助快速开通!

创建 Azure OpenAI 服务

收到审核通过的邮件后,进入Azure 首页,搜索,选择该类型的服务并进入页面,点击创建按钮进入创建页面。

Azure OpenAI

  • 第一步是填写基础信息,选择你的订阅,资源组(没有的话就新建一个),区域(有美国、欧洲、亚洲等国家),服务名称(如果名字被别人占用了会提示),定价层(价格跟 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"}]}'

  • 是 API URL
  • AZURE_OPENAI_ENDPOINT
  • 是模型部署的名称
  • DEPLOYMENT_NAME
  • 参数是指 API 的版本,有、等版本,具体的版本信息可以看这里[4]
  • api-version
  • 2023-06-31-preview
  • 2023-05-15
  • 是 API KEY
  • AZURE_OPENAI_KEY
  • 发送的 body 数据是一个消息数组,每个消息分别定义了角色和内容。

这个 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 AzureOpenAI
llm = 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 Name',
});