Spotify 如何用 Kong AI Gateway 支撑规模化生成式 AI

2026-07-15 44 预计阅读时间: 1 分钟
来源: engineering.atspotify.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

Spotify 希望让 AI 像电子邮件一样直观,并成为员工日常工作中不可缺少的工具。要实现这个目标,难点不只是接入一个大模型,而是让大量团队能够稳定、安全、可观测地使用不同模型。Spotify Engineering 介绍的方向,是通过 Kong AI Gateway 为生成式 AI 流量建立统一入口。

由于公开摘要没有披露 Spotify 的完整拓扑、插件配置和容量数据,下面不会推断其内部实现细节,而是分析 AI Gateway 在这类大规模场景中承担的职责,并给出一套可以改造的 Kong 配置模板。

为什么模型调用需要独立网关

团队刚开始使用大模型时,通常会让应用直接调用模型供应商:

Application -> Model Provider API

这种方式适合原型,但随着使用规模扩大,问题会快速出现:

  • 每个应用都要保存供应商密钥,凭证泄露面持续扩大。
  • 重试、超时和限流策略散落在不同代码库中。
  • 团队难以回答“哪个应用调用了哪个模型、花费多少、失败率多高”。
  • 切换模型供应商时,业务代码和请求格式可能一起变化。
  • 敏感提示词、响应内容和审计日志缺少统一治理位置。

引入 AI Gateway 后,调用路径变成:

Application -> AI Gateway -> Model Provider

这多了一跳网络请求,却换来了集中的策略执行点。对 Spotify 这种希望把 AI 推广到日常工作的组织而言,网关的价值不只是转发流量,而是降低每个团队重复建设认证、治理和可观测性的成本。

AI Gateway 应该控制哪些事情

传统 API 网关处理认证、路由、限流和日志。面对生成式 AI,请求仍然是 HTTP,但计量与风险模型发生了变化。

身份与凭证隔离

应用只持有访问内部网关的凭证,模型供应商密钥由网关集中管理。这样可以独立撤销某个应用的权限,也可以轮换供应商密钥,而不必修改所有调用方。

生产环境不应把密钥直接写进声明式 YAML。更稳妥的做法是从 Vault、云密钥管理服务或 Kubernetes Secret 注入,并限制谁能够读取 Kong 的管理接口。

限流与预算边界

普通 API 常按请求数限流,但两次大模型请求的成本可能相差几十倍。除了每分钟请求数,还应关注:

  • 输入和输出 token 数量;
  • 模型单价与团队预算;
  • 并发请求数;
  • 响应时间和超时比例;
  • 重试造成的额外调用。

如果当前网关只能按请求限流,可以先建立粗粒度保护,再从日志中汇总 token 用量。不要把“每分钟 100 次请求”误认为“成本已经受控”。

可观测性与审计

网关层适合记录调用方、模型、状态码、延迟、token 用量和供应商请求 ID。不过,提示词和模型响应可能包含源码、客户数据或个人信息,不应默认写入普通访问日志。

建议把指标与内容分开处理:指标进入监控系统,正文只在明确授权的调试或审计流程中采集,并设置脱敏、加密和保留期限。

可以这样实践:用 Kong 建立统一模型入口

下面是一个通用实验模板,不代表 Spotify 的内部配置。示例假设所使用的 Kong Gateway 版本提供 ai-proxy 插件;插件可用性、字段名称和授权方式可能随 Kong 版本及许可证变化,运行前应对照对应版本文档确认。

新建 kong.yml,把 YOUR_OPENAI_API_KEY 替换为测试密钥。生产环境应改用密钥管理系统注入:

_format_version: "3.0"
_transform: true

services:
  - name: llm-gateway
    url: https://api.openai.com
    routes:
      - name: internal-chat
        paths:
          - /ai/chat
        strip_path: true

plugins:
  - name: ai-proxy
    service: llm-gateway
    config:
      route_type: llm/v1/chat
      auth:
        header_name: Authorization
        header_value: Bearer YOUR_OPENAI_API_KEY
      model:
        provider: openai
        name: gpt-4o-mini
        options:
          max_tokens: 512
          temperature: 0.2

  - name: rate-limiting
    service: llm-gateway
    config:
      minute: 60
      policy: local

可以使用 DB-less 模式启动 Kong。下面命令假设当前目录包含 kong.yml,并且所选镜像包含 AI Gateway 所需插件:

docker run --rm --name kong-ai-gateway \
  -e KONG_DATABASE=off \
  -e KONG_DECLARATIVE_CONFIG=/kong/declarative/kong.yml \
  -e KONG_PROXY_ACCESS_LOG=/dev/stdout \
  -e KONG_ADMIN_ACCESS_LOG=/dev/stdout \
  -e KONG_PROXY_ERROR_LOG=/dev/stderr \
  -e KONG_ADMIN_ERROR_LOG=/dev/stderr \
  -p 8000:8000 \
  -p 8001:8001 \
  -v "$PWD/kong.yml:/kong/declarative/kong.yml:ro" \
  kong/kong-gateway:latest

随后发送一个兼容聊天接口的请求:

curl --fail-with-body http://localhost:8000/ai/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "messages": [
      {"role": "system", "content": "Answer briefly and include one concrete action."},
      {"role": "user", "content": "How should we review an AI service before production?"}
    ]
  }'

在企业环境中,还应给路由添加内部身份认证,例如 OIDC、JWT 或 mTLS,并将限流维度绑定到消费者、团队或工作负载身份。policy: local 只适合单节点实验;多节点部署需要选择能够在实例之间协调计数的策略,否则每个节点都会拥有独立额度。

从试点走向规模化

统一入口不意味着一次性接管所有 AI 流量。更稳妥的采用路径是先选择一两个非关键内部应用,验证网关增加的延迟、流式响应支持、超时行为和供应商错误映射,再扩大覆盖范围。

上线前可以检查以下项目:

  • 应用无法读取模型供应商的原始密钥。
  • 每个请求都能关联到团队、应用和环境。
  • 限流覆盖请求数、并发量,并尽可能覆盖 token 或预算。
  • 日志默认不保存完整提示词与响应。
  • 流式输出经过代理后仍能及时传递,且连接超时配置合理。
  • 对供应商的 4295xx 和超时设置了有上限的重试,避免重试风暴。
  • 预先定义模型不可用时的降级策略,而不是盲目切换到行为不同的模型。
  • 网关自身具备高可用部署、容量监控和故障演练。

Spotify 的目标说明了真正的规模化并不是“接入更多模型”,而是把 AI 变成可重复使用的组织能力。AI Gateway 可以提供关键的控制面,但它不会自动解决数据合规、提示词质量、模型评估和成本归属问题。把这些责任与网关策略、应用测试和组织流程结合起来,统一入口才会从网络组件变成可靠的 AI 基础设施。


相关推荐