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

news2024/12/26 11:51:04

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/612777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时,电感电压等于输入电压 开关断开时,电感电压输出电压-输入电压, 电感的感生电动势,N ΔΦ磁通的变化率,Δt时间 假设开关闭合与开关断开,开关断开时能量全部释放光 将第三个式…

MySQL(进阶篇1.0)

MySQL体系结构 1、连接层 最上层是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提…

进程的通信方式有哪些?

目录 管道消息队列共享内存信号量信号套接字 管道 最初我们在学习Linux基本命令使用的时候,我们经常通过多个命令的组合来完成我们的需求。比如说我们想知道如何查看进程或者端口是否在使用,会使用下面的这条命令 netstat nlp | grep xxx 这里的"|“…

电子科技大学计算机系统结构复习笔记(四):存储系统

目录 前言 重点一览 Cache基本原理 三种映像方式 物理地址与Cache地址的映射计算 Cache块标识 Cache替换算法 Cache写策略 分离cache与一体cache Cache性能与优化 Cache性能计算 Cache性能优化 主存储器与虚拟存储器 主存储器性能优化 虚拟存储器 虚拟存储器与…

编译 ONNX 模型

本篇文章译自英文文档 Compile ONNX Models — tvm 0.13.dev0 documentation 作者是 Joshua Z. Zhang 更多 TVM 中文文档可访问 →TVM 中文站。 本文将介绍如何用 Relay 部署 ONNX 模型。 首先安装 ONNX 包,最便捷的方法推荐安装 protobuf 编译器: pi…

【资料分享】浪涌电流(Inrush Current)产生原因

1、对Inrush Current电流的直观感受 当电灯在电路中工作时,如果突然启动马达或者变压器时,会出现电灯暗一下,此时电灯出现暗的情况就是因为马达或者变压器启动时,在电路中产生较大Inrush Current,具体分析可以参考下图…

图解HTTP书籍学习

了解Web及网络基础 HTTP(HyperText Transfer Protocol,超文本传输协议) Web是建立在HTTP协议上通信的 把SGML(Standard Generalized Markup Language,标准通用标记语言) HTML(HyperText Mar…

大数据:spark任务调度,DAGscheduler,Taskscheduler

大数据:spark任务调度 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle,尤其s…

SpringBoot源码分析:SpringBoot自动装配(二)

一、概述 SpringBoot的启动流程入下图所示,它主要分为加载主启动类和解析启动类两个部分,我将从这两个部分分别开始介绍。 二、加载主启动类 首先点入SpringApplication.run方法 之后进入SpringApplication.prepareContext方法 之后进入SpringApplicat…

【JavaEE】简单前后端分离小项目-表白墙

plus版表白墙!✿✿ヽ(▽)ノ✿ 文章目录 JavaEE & 简单前后端分离小项目 - 表白墙1. body格式约定 - 应用层协议2. 后端处理请求2.1 模板2.2 doGet方法2.3 doPost方法 3. 前端制作请求并解析响应3.1 原前端页面的代码3.2 刷新时发送GET请求3.3 点击发送时构造Pos…

40 KVM管理设备-配置磁盘IO悬挂

文章目录 40 KVM管理设备-配置磁盘IO悬挂40.1 总体介绍40.1.1 概述40.1.2 应用场景40.1.3 注意事项和约束限制 40.2 磁盘IO悬挂配置40.2.1 Qemu命令行配置40.2.2 xml配置方式 40 KVM管理设备-配置磁盘IO悬挂 40.1 总体介绍 40.1.1 概述 存储故障(比如存储断链&am…

卡尔曼滤波与组合导航原理(三)连续随机系统的离散化与连续时间Kalman滤波

文章目录 一、连续时间系统方程离散化1、连续时间模型2、状态转移矩阵计算3、激励噪声的等效计算4、最终离散化结论5、常见简单随机过程离散化6、实际物理信号的噪声单位 二、连续时间量测方程离散化三、连续时间Kalman滤波1、连续状态空间模型2、离散时间Kalman滤波3、增益矩阵…

自学网络安全解决问题方法

自学网络安全很容易学着学着就迷茫了,找到源头问题,解决它就可以了,所以首先咱们聊聊,学习网络安全方向通常会有哪些问题,看到后面有惊喜哦 1、打基础时间太长 学基础花费很长时间,光语言都有几门&#xf…

《Java并发编程实战》课程笔记(十三)

并发容器 同步容器及其注意事项 Java 中的容器主要可以分为四个大类,分别是 List、Map、Set 和 Queue,但并不是所有的 Java 容器都是线程安全的。 例如,我们常用的 ArrayList、HashMap 就不是线程安全的。如何将非线程安全的容器变成线程安…

java双亲委派机制详解

1. 类加载流程 类加载机制其实就是虚拟机把Class文件加载到内存,并对数据进行校验,转换解析和初始化,形成可以虚拟机直接使用的Java类型,即java.lang.Class。 1.1 装载 Class文件 -- >二进制字节流 -->类加载器 1&#x…

(0.50mm)TF31-4S-0.5SH 4 位置 FFC,FPC 连接器、G846A10221T4EU(1.0MM)矩形连接器 互连器件

TF31-4S-0.5SH (0.50mm)脚距前开盖式FFC/FPC连接器的安装深度为5.7mm,可最大限度地节省电路板空间,并能够自动放置电路板。Hirose Electric TF31连接器具有高FPC保持力(采用FPC侧拉手设计),易于…

Linux下进程及其进程地址空间以及一些进程的控制函数

目录 什么是进程?进程的状态Linux下进程的状态 进程地址空间什么是进程地址空间为什么需要进程地址空间? 进程控制进程控制函数forkwait/waitpid 进程等待进程替换,进程替换函数exe 今天我们来分享一下Linux下的进程和进程地址空间以及一些进…

进出口跨境电商软件平台系统开发,源码技术架构

一、进出口跨境电商软件平台系统开发需做好相应的前期准备,如确定市场、了解政策、推广宣传等。 欢迎名片沟通探讨 确定目标市场:选择合适的目标市场。需要了解目标市场的消费习惯、政策法规以及竞争情况。 了解海关相关政策:针对不同国家或…

python之函数(参数,匿名函数,局部变量和全局变量)

文章目录 前言一、函数的参数 1、形参和实参2、必传参数(也叫:必须参数)3、关键字传参4.、默认参数5、不定长参数6、传参的顺序二、匿名函数(lambda函数) 1. 定义及特点语法格式2. lambda函数的特点三、函数返回值retu…

微信小程序商城开发

随着移动互联网的发展,小程序商城逐渐成为了电商领域的新宠。小程序商城具有便捷、快速、安全等优点,为用户提供了更加优质的购物体验。下面我们来介绍小程序商城的功能和优点。 一、商品展示 小程序商城提供了丰富的商品展示,包括商品分类…