通过Azure API管理服务(APIM)解决Azure OpenAI Token限制问题

一句话概述

通过Azure的API Management(APIM)服务实现后端多个Azure OpenAI资源的负载均衡,以有效解决Azure OpenAI的TPM配额限制问题,提升系统性能和可用性。

一、面临的挑战

与任何服务一样,Azure OpenAI 也有服务配额和限制,具体取决于您使用的模型。当您的场景所需令牌数远远超过限制,只使用一个区域endpoint可能就无法满足要求。要么程序员在应用开发时将提示词字符串最小化,例如降低前后文关联,要么通过负载均衡来解决令牌限制问题。

二、方案概述

为了解决Azure OpenAI令牌限制,本方案通过Azure API管理服务(简称APIM)来实现负载均衡,跨区域管理多个不同的后端Azure OpenAI实例,从而达到解决令牌限制的目的。使用APIM,API的安全性提高了,因为开发人员只需要记住APIM提供的密钥和URL地址,而不需要使用后端Azure OpenAI实例的密钥和终结点信息。另外,APIM也提供监控功能,可以监控API的使用情况。

三、方案架构

四、方案实操

下面是我如何配置APIM以在三个Azure OpenAI资源之间进行负载平衡的示例。

1、创建API管理服务(APIM)

在Microsoft Azure控制台中搜索“API管理服务”,然后创建一个API管理服务。

创建APIM时的相关信息根据实际情况填写即可。

一直点击“下一步”直到最后“创建”,等待资源部署完成。

APIM部署完成后,状态为“联机”,获取网关URL(结尾为azure-api.net),应用调用Azure OpenAI将使用网关URL,而不是每个区域的endpoint地址。

2、配置后端

点击左侧“Backends”进入后端配置界面,点击“添加”按钮添加后端为本次测试的三个资源。名称可以根据实际情况填写,我这里以资源所在地域命名。自定义URL填写资源终结点(endpoint)地址,后面加上/openai。在“头”中添加api-key=[Azure OpenAI密钥],我这里在左侧“命名值”中设置了密钥的变量名为yuncan-australiaeast,所以不直接显示密钥。

其他两个资源也按上述步骤进行后端添加,最后可以看到有三个后端在Backends中。

3、创建API

点击左侧“API”进入API设置界面,点击“Add API”创建一个HTTP API。名称自定义,我这里设置的”Azure OpenAI“,在“API URL suffix”中输入openai。

选中刚刚添加的”Azure OpenAI“,再点击”Add operation“添加一个操作。名称可以自定义,我这里设置”Azure-OpenAI-POSTS“,URL类型选择POST,URL地址填写/deployments/{deployment-id}/chat/completions?api-version={api-version},我这里设置Tags值为”Azure-OpenAI“,之后点击”Save“完成添加操作。

4、配置API策略

配置API策略来控制如何请求后端不同资源,本次示例API策略配置为轮询后端资源以达到负载均衡效果,解决TPM限制问题。以下设置仅作为参考:

依次点击”All Operations“-”Policies“旁边的”</>“配置API策略。

API策略示例(XML):


<policies>
    <inbound>
        <base />
        <!-- default values if wasn't