[RFC] 001 - Support Azure OpenAI API #178
arvinxx
started this conversation in
RFC | 特性开发
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景 Background
Azure OpenAI 作为 OpenAI 的服务商之一,也支持 function call,而且对于国内用户来说,申请及支付 azure 的账号更容易。
有相当一部分的用户对于 Azure OpenAI 有相应的需求
本 RPC 可以解决 #151 ,类似 ChatGPTNextWeb/NextChat#371 的问题
思路调研
实现的思路有两种:
openai
模块,在 OpenAI 基座上添加额外配置来支持 Azure OpenAI,好处就是改造成本相对较低;经过详细调研,发现 Azure OpenAI 如果完全作为独立模块接入,可以使用
@azure/openai
作为基座的 SDK 服务。但对应的问题:@azure/openai
目前并不支持 模型查询,如果要接入模型 list,需要再接入 Azure 认知服务 的另外一个SDK。此外从模型能力上来说,用户其实不太关心 OpenAI 和 Azure OpenAI 有啥本质区别,只要能用 GPT3.5或者 GPT4就好了。从这一点来说,倒也没有必要将 Azure OpenAI 创建独立配置项。
终版实现思路
因此最终决定基于
openai
模块集成 Azure。 接入的 参考文档通过上述文档来看,
Azure OpenAI API 服务,比起 OpenAI 存在一定差异性:
需要用户配置的字段有:
api-key 没什么好说的,就是 token,可以直接复用。
resource 指的是在 Azure 创建的OpenAI 服务的名称,一个 Azure 可以创建多个 OpenAI resource 服务, resource 名称也会作为这个服务的请求域名链接。例如创建了名为
test-001
的 OpenAI resource 服务,它的请求链接就是: https://test-001.openai.azure.commodel 指的是在 resouce 服务中部署的模型名称。其实 model 这个命名不太准确,在 Azure OpenAI 中对应的其实是

deployName
。由于 Azure 中
deployName
用户是可以自定义的,因此要做严谨的话,是需要按照用户定义的名字来配置的。当然deployName
也可以和 model name 一样。但 Azure OpenAI 中比较恶心的地方是 model name 不允许带小数点。 比如在OpenAI 里叫 GPT-3.5-Turbo ,但 Azure OpenAI 中是 GPT-35-Turbo。但做严谨成本太高了,感觉也没有什么必要,还是做简单一些,让用户自行部署模型同名的服务。
api-version 是 Azure 中特有的东西,用于会话的接口,有以下几种参数(文档):
看起来这个参数每个月都会加,因此没法作为全覆盖到的选项,倒是可以用 AutoComplete 给几个预设值。
综上来说,4 个字段我们可以在用户侧收敛为 baseURL 、 apiToken 与 api-version,把 resource 概念给屏蔽掉,同时 url 中最后的 deploy-name 基于模型名称自动拼接。
这样用户只需要再额外感知一个 API Version 就好了,而且可以给个默认值是自动填上的。
最后由于复用 OpenAI 的配置项,因此还需要一个额外开关开启或者关闭 Azure OpenAI 的配置。
进展跟踪
#177
Beta Was this translation helpful? Give feedback.
All reactions