higress icon indicating copy to clipboard operation
higress copied to clipboard

AI apitoken failover 机制设计

Open cr7258 opened this issue 6 months ago • 7 comments

背景

在使用 AI 服务时,可能会遇到 apiTokens 不可用的时候,比如 apiToken 被封禁、apiToken 超过调用次数限制等。为了提升服务的可用性和稳定性,可以配置 apiToken 的 failover 策略,主动定期对 apiToken 进行健康检测,当 apiToken 不可用时,将其移出 apiToken 列表。

功能说明

在 failure 配置中,可以设置触发 apiToken failover 的条件,包括匹配的 HTTP 状态码、HTTP 头信息和响应体内容。当满足 failover 条件时,将触发 failover 机制,将 apiToken 移出列表。

在 healthCheck 配置中,可以设置对 apiToken 的健康检测规则,包括健康检测的周期、成功阈值和健康检测成功的条件。当 apiToken 可用时,将 apiToken 加回列表。

参数配置

名称 类型 填写要求 默认值 描述
failure object 必填 - 定义 failover 的规则
healthCheck object 可选 - 定义对 apiToken 健康检测的规则

failure 字段

名称 类型 填写要求 默认值 描述
failureThreshold int 可选 1 触发 failover 的失败阈值
conditions array of object 必填 - 触发 failover 的条件

conditions 字段

当匹配具体的 HTTP 状态码、HTTP 头信息和响应体内容时,将触发 failover。 单个 condition 中设置的多个条件是“与”的关系,即所有条件都必须匹配才能触发 failover。 可以配置多个 condition,多个 condition 之间是“或”的关系,即只要有一个 condition 匹配就会触发 failover。

名称 类型 填写要求 默认值 描述
status_code array of int 可选 - HTTP 状态码
headers array of string 可选 - 需要匹配的 HTTP 头信息
body string 可选 - 需要匹配的响应体内容

至少要设置一个 failure 的 condition。

healthCheck 字段

当配置了 healthCheck 字段时,当有 apiToken 被移除列表时,将定期使用该 apiToken 主动访问 LLM 进行健康检测,当 apiToken 重新可用时加回列表。

名称 类型 填写要求 默认值 描述
periodSeconds int 可选 300 健康检测的周期,单位为秒
successThreshold int 可选 1 健康检测的成功阈值
content string 可选 "who are you?" 请求的内容
conditions array of object 可选 - 定义健康检测成功的条件

conditions 字段

当匹配具体的 HTTP 状态码、HTTP 头信息和响应体内容时,将认为健康检测成功。

名称 类型 填写要求 默认值 描述
status_code array of int 可选 200 HTTP 状态码
headers array of string 可选 - 需要匹配的 HTTP 头信息
body string 可选 - 需要匹配的响应体内容

配置示例

provider:
  type: qwen
  apiTokens:
    - "api-token-1"
    - "api-token-2"
    - "api-token-3"
  modelMapping:
    'gpt-3': "qwen-turbo"
    'gpt-4-turbo': "qwen-max"
    '*': "qwen-turbo"
failover:
  failure:
    failureThreshold: 3
    conditions:
      - status_code:
          - 403
        headers:
          - "failure=true"
      - status_code:
          - 502
          - 503
      - body: "No quota available"
  healthCheck:
    periodSeconds: 10
    successThreshold: 1
    content: "你是谁?"
    conditions:
      - status_code:
          - 200
        body: "我是.*"
      - headers:
          - "success=true"

cr7258 avatar Aug 19 '24 05:08 cr7258