如何从 OpenAI 迁移到 Azure OpenAI(保姆级教程,包含如何兼容 JS 语言版 LangChain)

Azure OpenAI 和 OpenAI 一样,本质都是调用 api,Azure OpenAI 的使用会稍微复杂一点,但好处就是方便付费。

创建 Azure OpenAI 资源

首先,先登录 Azure 账号:https://azure.microsoft.com/zh-cn/

接着创建 OpenAI 资源:

  1. 如果没有资源组的话可以新建一个,记录在自己名下
  2. 注意这里的名称,它会成为调用 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 的调用有几个参数,要关注一下:

  1. api-version:API 的版本,目前仅支持三个 version,分别是 2023-03-15-preview2022-12-012023-05-15,详情见 https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference 的 Supported versions 一节
  2. azure-openai-key:也就是上面提到的密钥
  3. 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

猜你喜欢

转载自blog.csdn.net/YopenLang/article/details/131051962