Azure OpenAI 和 OpenAI 相同,实质都是调用 api,Azure OpenAI 的运用会略微复杂一点,但好处便是便利付费。

创立 Azure OpenAI 资源

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

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

接着创立 OpenAI 资源:

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

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

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

  1. 如果没有资源组的话能够新建一个,记录在自己名下
  2. 留意这儿的称号,它会成为调用 api 地址的域名之一,比方我这儿是“kaipeng-openai”,最终我得到的 Azure OpenAI 的调用 api 地址是:https://kaipeng-openai.openai.azure.com/

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

接下来都是直接点击“下一页”直至创立成功。

记录调用 api 和秘钥

接着进入到秘钥和 End Point(End Point 其实便是调用的 api 地址,中文翻译成“终结点”有点烂)

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

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

两个密钥都是相同的,供给两个主要是让你在切换密钥的时间段里面让别的一个密钥顶上去,也便是备胎密钥。Azure OpenAI 建议定期替换密钥。

布置Azure OpenAI 资源

转到 Azure OpenAI Studio

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

接着新建自己的布置,这一步其实是创立自己的 OpenAI 模型,由于 OpenAI 的模型有多种,比方 gpt-35-turbo、text-davinci-003、text-embedding-ada-002 等,Azure OpenAI AI 需要指定你运用的哪种模型。

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

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

留意这儿的布置名,后续在调用 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,详情见 learn.microsoft.com/en-us/azure… 的 Supported versions 一节
  2. azure-openai-key:也便是上面提到的密钥
  3. endpoint:上面提到的 End Point 终结点

调用方法有几种:

Curl

参考:learn.microsoft.com/en-us/azure…

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”

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

  • azureOpenAIApiDeploymentName:布置名

  • azureOpenAIApiVersion:版别

这几个参数也能够直接注入到 Node 的环境变量中:

  • AZURE_OPENAI_API_KEY
  • AZURE_OPENAI_API_INSTANCE_NAME
  • AZURE_OPENAI_API_VERSION
  • AZURE_OPENAI_API_DEPLOYMENT_NAME 在 LangChain 源码中能够看到,如果找不到这些变量,会尝试从 process.env 去读取:
    如何从 OpenAI 迁移到 Azure OpenAI (保姆级教程,包含如何兼容 JS 语言版 LangChain)

Azure OpenAI npm

Azure OpenAI 封装了一个直接调用的 npm 库:www.npmjs.com/package/@az…