Azure OpenAI 和 OpenAI 一样,本质都是调用 api,Azure OpenAI 的使用会稍微复杂一点,但好处就是方便付费。
创建 Azure OpenAI 资源
首先,先登录 Azure 账号:https://azure.microsoft.com/zh-cn/
接着创建 OpenAI 资源:
- 如果没有资源组的话可以新建一个,记录在自己名下
- 注意这里的名称,它会成为调用 api 地址的域名之一,比如我这里是“kaipeng-openai”,最后我得到的 Azure OpenAI 的调用 api 地址是:
https://kaipeng-openai.openai.azure.com/
接下来都是直接点击“下一页”直至创建成功。
记录调用 api 和秘钥
接着进入到秘钥和 End Point(End Point 其实就是调用的 api 地址,中文翻译成“终结点”有点烂)
两个密钥都是一样的,提供两个主要是让你在切换密钥的时间段里面让另外一个密钥顶上去,也就是备胎密钥。Azure OpenAI 建议定期更换密钥。
部署Azure OpenAI 资源
转到 Azure OpenAI Studio
接着新建自己的部署,这一步其实是创建自己的 OpenAI 模型,因为 OpenAI 的模型有多种,比如 gpt-35-turbo、text-davinci-003、text-embedding-ada-002 等,Azure OpenAI AI 需要指定你使用的哪种模型。
注意这里的部署名,后续在调用 api 的时候会用的,比如我这里是 gpt-35-turbo,那么到时候我调用的完整的 api 地址就是:
https://kaipeng-openai.openai.azure.com/openai/deployments/gpt-35-turbo/chat/completions
当然,部署名是任意的,但是我这里建议部署名和模型名一致,方便分辨。
调用方式
有了密钥和 api 地址,就可以调用 Azure OpenAI 了。Azure OpenAI 的调用有几个参数,要关注一下:
api-version
:API 的版本,目前仅支持三个version
,分别是2023-03-15-preview
,2022-12-01
,2023-05-15
,详情见 https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference 的 Supported versions 一节azure-openai-key
:也就是上面提到的密钥endpoint
:上面提到的 End Point 终结点
调用方式有几种:
Curl
参考:https://learn.microsoft.com/en-us/azure/cognitive-services/openai/chatgpt-quickstart?pivots=rest-api&tabs=bash
curl $AZURE_OPENAI_ENDPOINT/openai/deployments/gpt-35-turbo/chat/completions?api-version=2023-05-15 \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_KEY" \
-d '{"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?"}]}'
LangChain
LangChain 是一个封装 LLM 调用的库,在最新版中(>= 0.0.81)它支持了对 Azure OpenAI 的调用。
import { OpenAIChat } from "langchain/llms/openai";
import './utils/dotenv.js'
const model = new OpenAIChat({
temperature: 0.9,
azureOpenAIApiKey: process.env.AZURE_OPENAI_API_KEY,
azureOpenAIApiInstanceName: process.env.AZURE_OPENAI_API_INSTANCE_NAME,
azureOpenAIApiDeploymentName: process.env.AZURE_OPENAI_API_DEPLOYMENT_NAME,
azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION,
});
const res = await model.call(
"What would be a good company name a company that makes colorful socks?"
);
console.log({ res });
几个参数分别说明一下:
-
azureOpenAIApiKey
:密钥 -
azureOpenAIApiInstanceName
:实例名称,也就是一开始创建 Azure OpenAI 资源的时候填写的名称,如下图,也就是“kaipeng-openai”
-
azureOpenAIApiDeploymentName
:部署名 -
azureOpenAIApiVersion
:版本
这几个参数也可以直接注入到 Node 的环境变量中:
AZURE_OPENAI_API_KEY
AZURE_OPENAI_API_INSTANCE_NAME
AZURE_OPENAI_API_VERSION
AZURE_OPENAI_API_DEPLOYMENT_NAME
在 LangChain 源码中可以看到,如果找不到这些变量,会尝试从 process.env 去读取:
Azure OpenAI npm
Azure OpenAI 封装了一个直接调用的 npm 库:https://www.npmjs.com/package/@azure/openai