[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
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
背景 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