Agentgateway 评测:功能丰富的全新 AI 网关

发布: (2025年12月2日 GMT+8 19:23)
7 min read
原文: Dev.to

Source: Dev.to

介绍

agentgateway 是 Solo 专为 AI 场景开发的数据平面。使用 Rust 编写,可通过 xDS(基于 gRPC 的协议)和 YAML 进行配置。最近它用开源版的 agentgateway 替代了 kgateway 的 AI 数据平面(原基于 Envoy),企业版的 Gloo 预计也会跟进。

网关支持四种 AI 场景:

  • MCP
  • A2A
  • 代理推理请求到 LLM 提供商
  • 推理服务的负载均衡

下面是每种场景的概览。讨论重点在开源版的 agentgateway;部分功能可能仅在企业版中提供。

MCP

Agentgateway 最初是为处理有状态的 Model Context Protocol (MCP) 请求而创建的,因为现有的 Envoy 数据平面难以胜任。因此,它的 MCP 支持最为完整。

会话处理

  • 默认情况下,MCP 被视为有状态协议。
  • SessionManager 结构体负责会话的创建和维护(代码链接)。
  • SessionManager 是进程内存储,所以多个 agentgateway 实例 共享会话状态。
  • 为了实现上游的粘性会话,最简单的方式是对 MCP-Session-ID 头部进行 一致性哈希,确保相同的会话 ID 即使在不同实例之间也会路由到同一后端。
  • 可以将 SessionManager 扩展为使用远程存储,但会增加开销。

默认的有状态处理被部分人认为是错误的;计划将 MCP 默认改为无状态讨论)。

多路复用

当配置了多个后端时,agentgateway 支持 MCP 多路复用:

  • 对于工具列表,它会向每个后端发送 tools/list,随后将工具名称改写为 ${backend_name}_${tool_name}
  • 随后的工具调用会路由到对应的后端。
  • 无法多路复用的方法会返回 “invalid method” 错误。

REST‑to‑MCP 转换

Agentgateway 可以使用 OpenAPI 规范将 RESTful API 转换为 MCP 工具:

  • 它可以把整个 OpenAPI 规范当作一个后端。
  • 网关仅转发请求, 管理底层的 RESTful API。
  • 当前限制
    • 仅支持 application/json 请求体。
    • 尚不支持 HTTPS 上游。
    • 不支持结构化输出。
    • 某些 schema 细节(如 additionalProperties)需要进一步处理。

认证与授权

  • 基于 OAuth 的 MCP 认证:受保护资源的元数据会在类似 /.well-known/oauth-protected-resource/${resource} 的路径下暴露。
    • CORS 头会自动添加到元数据响应中,简化浏览器端 MCP 客户端的使用。
  • JWKS 处理
    • 公钥可以从 JWKS URL 或文件路径获取。
    • JWKS URL 可以从发行者 URL 与类型推导得到。
    • 密钥仅在配置解析期间加载,不会周期性刷新(代码参考)。
  • 授权 使用一组 CEL 表达式,根据 JWT 字段和 MCP 属性进行过滤。例如:
mcpAuthorization:
  rules:
    # 允许任何人调用 'echo'
    - 'mcp.tool.name == "echo"'
    # 只有 test-user 可以调用 'add'
    - 'jwt.sub == "test-user" && mcp.tool.name == "add"'
    # 具备 claim nested.key == "value" 的已认证用户可以访问 'printEnv'
    - 'mcp.tool.name == "printEnv" && jwt.nested.key == "value"'

在多路复用场景下,mcpAuthorization 在工具名称合并之前执行,因此规则看到的是原始工具名称(没有后端前缀)。

指标

Agentgateway 目前仅提供一个基础的 mcp_requests 计数器,缺少针对单个工具或延迟的细粒度指标。

A2A

针对 Agent‑to‑Agent (A2A) 协议场景,agentgateway 实现了两个主要功能:

  1. URL 重写 – 将 Agent 卡片的 URL 重写为指向网关,而不是被代理的后端。
  2. 请求解析 – 解析 A2A JSON 请求并记录请求方法,以便观测。

代理推理请求到 LLM 提供商

Agentgateway 能够代理对大语言模型(LLM)提供商的推理请求,并在单纯转发之上提供额外价值:

  • 可观测性 – 为 Server‑Sent Events (SSE) 流收集 token 使用量和首 token 响应时间(TTFT)指标。
  • 流式支持 – 专用解析器处理非 SSE 的流式格式,例如 AWS Bedrock 的事件流。
  • 限流与提示保护 – (细节将在后续文章中展开)。

与提供商无关的 API 表面

Agentgateway 将部分 LLM 客户端功能提升到网关层,以降低集成成本,提供兼容 OpenAI 的外部 API。当前支持两种路由类型:

ProviderRoute
OpenAI/v1/chat/completions
Anthropic/v1/messages

两条路由都是聊天式端点;OpenAI 的 /v1/chat/completions 在功能上等同于 Anthropic 的 /v1/messages。分别实现两者可简化仅面向单一提供商的 Agent 上手流程。

限制

  • 结构化输出(例如 OpenAI 的 structured outputs)尚未支持。
  • 向量嵌入、批处理等高级特性仍缺失。

推理扩展支持

Gateway API Inference Extensionhttps://gateway-api-inference-extension.sigs.k8s.io/)通过调度器(EPP)实现分布式推理,调度器使用 Envoy 的 gRPC ext_proc 协议与网关通信。

  • 调度器返回 x-gateway-destination-endpoint 头部,指示目标上游地址。
  • 网关将推理请求转发至该端点,充当轻量代理。

Red Hat 通过 LLMD 项目参与其中,并在 AI 工具(如 vLLM)上的投入表明,推理扩展有望成为 AI 工作负载的标准组件。

Back to Blog

相关文章

阅读更多 »

切换账户

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 正如大家所知,我正重新开始记录我的进展,我认为最好在一个不同的…

Strands 代理 + Agent Core AWS

入门指南:Amazon Bedrock AgentCore 目录 - 前置要求(requisitos‑previos) - 工具包安装(instalación‑del‑toolkit) - 创建…