发布说明
本页汇总 AISIX 网关、控制面、控制台和部署包中面向用户的变更,按版本从新到旧排列。
发布产物包括 docker.io/api7/aisix 网关镜像、docker.io/api7/aisix-cp-* 下的控制面镜像、aisix-cp Helm Chart 和离线安装包。
0.10.0
发布日期: 2026 年 8 月 20 日
这个版本的主题是 Agent 流量。正向代理流量——把 IDE 或编码 Agent 指向网关——现在由一个显式、可审计的路由资源承载,而不再是那条需要猜测"该借用哪个凭证"的隐式隧道。MCP 支持了协议的 2026-07-28 修订版、面向无凭证客户端的匿名访问、OAuth 2.1 发现,以及一条统一的工具授权规则。模型组新增一致性哈希与优先级层级。网关在关闭前会保持一个排空窗口继续接受连接,不再拒绝负载均衡器尚未停止转发的请求;通过 OTLP 导出的链路追踪也形成了真正的层级结构。
行为变化
- 隐式的 passthrough 隧道被显式路由取代。
/passthrough/<provider>/<rest>不再按模型服务提供方的名字自动解析;未被任何路由认领的/passthrough/*路径返回410 Gone(error.code: endpoint_removed),并为每次命中打一条 WARN 日志指出调用方,便于找出尚未迁移的客户端。迁移方式:创建一条 passthrough 路由,path_prefix设为/passthrough/<provider>、target_url设为原先的 API base、provider_key_id设为它此前借用的那把 Key——客户端 URL 即可逐字节保持不变。有两处行为与旧隧道不同:路由是单次转发,上游 5xx 与传输层重试不再进行;由于路由不解析任何模型,这类流量也不再交叉标记模型冷却。访问权限是调用方 Key 上的显式授权(allowed_routes),没有授权的 Key 访问不到任何路由。参见 Passthrough 路由与面向 IDE AI 流量的正向代理。 - MCP 工具访问改为三层求交的一条规则。 环境策略、调用方所属团队的策略、以及 Key 自身的
mcp_access块,各自携带allow与deny列表。allow 取交集、deny 取并集,因此任何一层都无法放宽另一层已经收紧的范围;未设置的层不施加任何约束,而三层都没有的调用方没有任何 MCP 访问权限。策略与 Key 上的mode均已移除,Key 上的allowed_tools也已移除(Key 这一层就是mcp_access.allow),遗留 Key 的迁移流程一并删除。如果你配置过 MCP 工具策略,升级后请重新核对:最终生效的授权会按上述规则重新计算,可能与旧配置产生的结果不同。 其中两处变化影响最大:团队策略现在是在环境授权基础上进一步收窄,而不再是替换它,因此它无法再授予环境本身不允许的工具;没有mcp_access块的 Key 现在会跟随策略层,而不再游离于策略之外。每一层都必须写出allow,因此一个只打算做减法的层需要把 allow 侧显式写成["*"]。 - Guardrail 拦截 MCP 工具调用时,改为以工具错误的形式作答。 调用在协议层面返回成功,结果上带
isError: true,消息中指出是哪条 Guardrail 生效——绝不回显命中的内容——而不再返回 JSON-RPC 的-32600。调用方 Agent 因此看到的是一段可以据此调整的工具输出,而不是一条中断的传输通道。此前依据error.code == -32600判断拦截的客户端,需要改读result.isError。 weighted路由策略与sticky开关已移除。 权重现在是每个目标自身的属性,在所有策略下都可用:round_robin采用平滑加权轮询,因此权重相等或缺省时与此前的声明顺序轮转完全一致,权重不等时则严格保持比例。会话粘性成为独立策略consistent_hash。通过 AISIX Cloud 管理的部署会自动迁移。声明式配置需要手工更新:weighted改为round_robin并保留权重,weighted加sticky改为consistent_hash。仍然写着weighted的存量配置会加载失败,而不会被悄悄改变含义。迁移到一致性哈希后,会话与目标的对应关系会重新分布一次,因为它构建哈希环的方式不同。- 不受支持的 MCP 协议版本改为在 JSON-RPC 信封内被拒绝。 当请求的
MCP-Protocol-Version请求头指定了该端点不提供的修订版时,返回400并附带一个 JSON-RPC 错误,其中列出受支持的版本,而不再返回游离于所有网关信封之外的裸text/plain响应。该端点提供2025-03-26、2025-06-18、2025-11-25与2026-07-28;不再宣告2024-11-05——它只存在于 HTTP+SSE 传输时代。 - 通过 OTLP 导出的链路追踪现在形成层级结构。 一个请求会产生一个 HTTP SERVER span、一个覆盖全部重试与故障转移的逻辑 client span,以及每次上游尝试各一个子 span,取代了此前"每个用量事件一个扁平 span"的形状。任何以"每个请求一个 span"为前提的用法——span 数量告警、按名字计数——都会看到结构性 span 出现。承载完整属性集的是 attempt span,可用
aisix.attempt_index识别;结构性 span 只携带aisix.request_id,SERVER span 的 kind 为 2。另外,调用方的traceparent与tracestate不再转发给模型服务提供方;运营方为可信上游显式配置的default_headers条目仍然有效。 - 文本转语音的延迟改为按首字节计。
/v1/audio/speech现在边接收边转发合成的音频,而不再整体缓冲,因此播放器可以在首批字节到达时就开始播放,上报的延迟也随之从"到最后一个字节"变为"到第一个字节"。这与此处所有其他流式接口已有的口径一致。
新功能
- Passthrough 路由。 一条路由把一个网关入口——路径前缀、入站
Host白名单,或两者兼有——绑定到一个上游目标,因此可以把 IDE 或编码 Agent 指向网关,在不改动客户端的前提下对其流量进行审计。Host 匹配在路由之前进行 ,因此携带原始Host送达的正向代理流量可以认领网关同样在用的路径;路径匹配则作为路由器的兜底,因此一条路由绝不会遮蔽网关自身的 API。调用方可以用网关 Key 认证、把 Key 放在你指定的请求头里(从而让Authorization留给上游凭证),或者以受源 CIDR 白名单约束的绑定主体身份匿名访问。上游凭证要么由模型服务提供方 Key 注入,要么原样转发调用方自己的凭证——后者下网关自身的凭证绝不会泄漏到上游。可选的设备注入身份请求头会被记录为该请求的终端用户身份,用于按员工归因。请求信封按请求识别——chat、Responses、completions 或不透明——并据此驱动 Guardrail 取文、审计留存与 Token 计量;非 LLM 调用的流量不会产生虚假 Token。SSE 响应逐帧转发。 - 模型组的一致性哈希与优先级层级。
strategy: consistent_hash通过把请求键哈希到目标环上,将每个会话固定到同一个目标:相同的键始终命中同一个目标,权重决定各目标的份额,而某个目标故障时只有它自己的会话迁移到环上的后继目标,其余键的映射全部保持不变。请求键来自你配置的来源链(hash_on:请求头、Cookie、调用方 API Key 或客户端 IP),默认使用路由键请求头并回退到 API Key。此外,每个目标都可以设置priority:目标据此划分为若干层,数值越大越优先,只有当某一层内所有目标都失败或被健康状态摘除后,下一层才会收到流量——因此备用池可以在活跃池之后静默待命,而首个发现整层已死的请求也能在层内溢出并成功返回。 - MCP 2026-07-28。
/mcp与/mcp/{server}提供该规范的最终修订版,包含免握手的发现生命周期与无状态传输。已注册的 MCP Server 可选配置protocol_version,用于固定网关开启上游会话时使用的修订版——这是访问"不再响应旧握手"的 Server 的唯一方式;不配置时网关按此前方式协商,因此既有配置保持不变。两个方向上都是显式选择:网关既不探测也不静默回退,因此版本不匹配会明确失败,而不会悄悄协商到一个你本想排除的版本。 - MCP 匿名访问。 环境可以允许不携带任何凭证的 MCP 客户端访问指定入口,并以你指定的一把 API Key 的身份运行——该 Key 的工具授权、限流、预算与用量归因全部适用。它受一份必填的源 CIDR 白名单约束,需要列出所开放的入口,且聚合入口
/mcp需要显式开启。携带凭证的客户端仍按正常流程认证;凭证无效时会被拒绝,而不会被降级为匿名服务。 - 面向
/mcp的 OAuth 2.1 资源服务器发现。 配置了规范资源 URL 并启用了身份提供方后,网关会发布受保护资源元数据,并对未认证的 MCP 请求返回指向该元数据的WWW-Authenticate质询,使标准 MCP 客户端能够自行发现到哪里获取 Token。Bearer Token 的 audience 必须包含该 URL。 - Guardrail 可以限定到单个 MCP Server,从而只守护某一个已注册的 Server,而不必守护环境内所有 MCP 流量。Guardrail 现在还会扫描工具的结构化输出,而不只是文本块。
- 关闭时的排空窗口。 收到
SIGTERM后,网关立即将自身标记为未就绪,随后至少在shutdown.min_drain_secs(默认 30 秒)内继续接受新连接,然后才关闭监听器,使负载均衡器在其自身检测窗口内转发过来的连接仍能被正常服务。窗口期内 HTTP/1.1 响应会带上Connection: close,让使用 连接池的客户端在使用过程中自然退休这些连接。这个窗口是下限而非期限:只有窗口耗尽且没有请求在途时,监听器才会关闭。 - 现在会采纳 W3C 链路上下文。 合法的入站
traceparent会让网关产生的 span 成为调用方链路的子节点;格式错误或重复的请求头会被忽略并改用本地根节点,而不会导致请求失败。span id 与 trace id 每个请求只生成一次,因此投递重试会重发完全相同的 id,而不是新的一组。用量事件中携带 trace id 以便关联。 - 流式音频转写改为实时转发。
/v1/audio/transcriptions在stream=true时现在边接收边转发帧,而不再从完整读取的响应体作答,同时仍会记录该请求的 Token 用量。带拦截或掩码能力的输出 Guardrail 仍走缓冲路径,因为它必须在任何内容到达调用方之前看到完整的转写文本。 - Cloud Admin API 支持角色管理。 自定义角色的增删改查、组织角色分配,以及环境级角色绑定,现在都纳入了公开的 API 契约,并具备生成的绑定代码与请求校验。
改进
- 发布镜像现在采用基于性能剖析的优化(PGO)构建,内存分配器会在负载回落后通过后台线程把已释放内存归还给操作系统。
- 严格校验在拒绝"某个模型类型根本不读取的配置"时,现在会指出具体是哪个配置项,而不再只是报告文档校验失败。
- Passthrough 流量会记录其识别出的信封所携带的全部用量维度。
修复
- 流式音频转写此前一直按零 Token 计费。 网关的 SSE 解码器只在遇到一对换行符时才认为事件结束,而模型服务提供方在转写流中使用回车换行分帧,因此携带 Token 计数的终止事件从未被解码,每一次流式转写都记录为零 Token。事件现在在任意两个连续的行终止符处结束。该解码器被所有流式桥接路径共用,因此任何使用回车换行分帧的上游都受此影响,不限于音频。
- 在分层规则之前写入 MCP 访问配置的调用方 API Key 现在仍能正常加载,而不会被丢弃。
- deployment 与 fallback 计数器现在会被正确发射;分发前的失败不再计入其中,失败的请求也会归因到已解析出的调用方。
- Passthrough 流量在链路追踪与被拒请求事件中的归因已修正,基于请求头的认证返回
401时会指出它期望的请求头。 - 按 Host 匹配的正向代理路由现在可以认领网关保留的路径前缀,并镜像完整的请求路径。
- 音频元数据解析不再对普通上传文件输出告警日志。
- 控制台方面:创建模型时的选择器不再显示为"不支持",Dimensions 字段不再被错误标注为可选,页面路由切换有了加载态,MCP 认证设置也移到了 MCP Access 页面,与其余 MCP 配置放在一起。
升级注意事项
- 请先升级控制面,再升级网关。 这是受支持的顺序,中间的混合版本窗口可以持续任意长时间。在窗口期内,仍运行 0.9.x 的网关会停止服务此前使用
weighted加sticky的模型组(迁移后的配置使用了该版本不认识的策略名),也不会应用 MCP 工具策略(其存储形状已变化)。调用方 API Key 在整个窗口期内始终可以正常认证——只是在尚未升级的网关上,它们的 MCP 访问处于关闭状态,直到该网关完成升级。这两种情况都可以在控制台的数据面兼容性视图中看到。 - 通过 AISIX Cloud 管理的部署,会在升级后控制面首次启动时自动迁移存量的路由配置。声明式配置不会被自动迁移,需要按"行为变化"一节所述手工更新。
0.9.0
发布日期: 2026 年 8 月 13 日
这个版本让网关明显更快,也让 Agent 流量变得可观测。代理层改为按核独立的 worker 模型,吞吐大约翻倍、p99 延迟减半。缓存学会了匹配“意思相同”的请求,而不再只能匹配“写法相同”的请求。A2A 调用现在会记录它推进了哪个任务、消耗了多少;经过验证的 JWT 也可以代替调用方 API Key,由身份提供方的 claim 决定请求以哪个调用方的身份运行。
这个版本同时完成了 0.4.0 中宣布的 Admin API 弃用:网关自带的 Admin API 现在是只读的,资源改为声明式管理或通过 AISIX Cloud 管理。
行为变化
- 网关的 Admin API 不再写入资源。 Admin 监听端口保留全部读取能力——各类资源的列表与详情、 模型状态、健康检查、OpenAPI 参考和 Playground——但
/admin/v1/<kind>上的POST、PUT、DELETE现在返回405并带Allow: GET,API Key 轮转路由的两种拼写都返回404。这完成了 0.4.0 中宣布的弃用。请改用资源文件管理资源(用aisix validate --resources <file>校验,用SIGHUP重载),或直接写入 etcd;连接 AISIX Cloud 的网关从不暴露该监听端口,不受影响。声明式轮转调用方 Key 的方式是:用同一个资源 id 写入新的key_hash,写入传播后旧密钥立即失效。发布的 Admin API 参考中已不再包含写操作。参见资源文件。 - 缓存条目默认按调用方 API Key 隔离。 缓存策略新增
scope字段,默认值为api_key,因此一个调用方的应答绝不会被回放给另一个调用方。依赖环境内跨 Key 共享的部署需要显式设置scope: env。无论选择哪种,缓存键的形状都会发生变化,升级后会出现一次性的全量未命中。参见缓存。 - 首 Token 时间改为在第一个流式帧处停表,不再区分帧的类型。 此前它会一直等到出现携带生成内容的帧,因此对于“先静默思考再作答”的模型,记录到的是思考结束的时刻——这个数值可能超过该请求自身上报的延迟,也无法与前置网关的口径直接比较。思考所花的时间仍可从上游延迟中看到。按旧口径校准过的监控面板和告警阈值需要重新调整。参见指标与日志。
- 调用方传入的 request id 现在会被网关采用。 网 关默认接受
x-aisix-request-id:该值会原样回传、记入访问日志与用量事件,并转发给上游。id 必须是 1–256 个可见 ASCII 字符;不满足的一律忽略并由网关自行生成,因此格式错误的请求头绝不会导致请求失败。若还想遵循x-request-id约定,将其加入proxy.request_id.accept_headers;把该列表置空则恢复此前行为。由于该 id 现在由调用方控制,它既不唯一也不可信,因此不会被用作任何指标的标签。参见指标与日志。 - 某个模型类型运行时根本不读取的配置,现在会被拒绝,而不再是存下来却被忽略。 模型组上的
retries、auto_prompt_caching、cost,Ensemble 上的通用调用参数,以及语义路由上的auto_prompt_caching和cost,在写入时都会被拒绝并返回400。携带这类字段的资源文件将加载失败,并指出出问题的条目。已经存下这类字段的模型不受影响:网关会剥离该字段并按“部分兼容”上报,而不会让这个模型停止服务。反方向上,语义路由和 Embedding 模型现在接受timeout、stream_timeout和retries,此前这些是被拒绝的。 - 若干此前被静默接受的配置现在会被拒绝。 创建模型时携带属于其他类型的配置块、把通配符别名用作 Ensemble 成员或裁判模型、用作语义路由的目标或默认模型、用作缓存策略的作用目标,把被引用的模型改名为通配符,以及让缓存策略指向不存在的模型,现在都返回
400。这些操作此前都会被接受,然后被悄悄忽略。 - 经过通配符模型的流量按通配符自身的名字上报。 指标、限流计数桶和健康状态现在以配置中的通配符条目为准,而不再以各调用方随手写下的别名为准,因此一个模型就是一个身份,不会因写法不同而分裂成多条序列。按调用方别名过滤的监控面板,会看到对应序列在这个版本处中断。
- 升级注意事项。 控制面把用量表的
request_id列从uuid加宽为text,以便保存调用方自己的 id。在大表上这会触发整表重写——大约每 1000 万行 6 分钟——重写期间控制面不对外服务。Helm Chart 的启动探针预算已相应放宽到 30 分钟;如果你使用自己维护的编排清单,请在升级前同步调大。
新功能
- 代理层改为按核独立的 worker 模型。 每个 worker 拥有各自的运行时、监听套接字和上游连接池,因此一个请求的接收、派发和应答都在同一个线程上完成,不再需要在线程之间来回移交两次。在 4 核上,吞吐随并发度提升 54%–88%,p99 延迟大约减半,每请求的系统调用次数从 11.9 降到 5.0。Linux 上默认开启。两个启动期生效的配置项:
proxy.thread_per_core和proxy.workers,后者默认取进程可用的并行度并会跟随 cgroup 的 CPU 限制。当每个 worker 分到的客户端连接不足约 4 条时,内核的连接分配会不均,此模式反而慢于共享运行时;这种低并发场景请设置proxy.thread_per_core: false。 - 语义缓存。 缓存策略现在可以按语义匹配:未命中精确匹配的请求会被向量化,并从余弦相似度达到设定阈值的最近条目中返回结果。只有纯文本请求会走 这条路径——包含图片、音频或工具调用的请求一律走精确匹配。条目可以存放在各网关自身的内存中,也可以设置
backend: redis,借助 Redis 向量检索在多个副本间共享。共享方式要求 Redis 8 及以上版本或加载 search 模块;网关在启动时探测,若不具备该能力,则继续提供精确匹配并在日志中说明,而不会让流量失败。策略也可以在不删除的前提下整体清空。参见语义缓存。 - JWT Claim 映射。 新增的资源可以把经过验证的 OIDC claim 解析到一个已存在的调用方 API Key,从而无需为每个用户单独发放 Key,就能由身份提供方决定请求以哪个调用方的身份运行。规则按优先级顺序求值,第一条 claim 条件全部成立的规则选定目标 Key,随后请求完整继承该 Key 的模型与工具访问权限、限流和预算。条件支持对嵌套 claim 路径做精确字符串匹配和数组包含匹配。未命中任何规则的 Token 一律拒绝。用量事件会记录 subject、身份提供方和命中的映射——请注意 subject 属于最终用户标识,会随用量事件流向已配置的可观测性导出目标。参见 Claim 映射。
- A2A 调用现在具备协议级可观测性。 每次调用都会记录操作类型、任务 id、上下文 id 和最终任务状态,并对两套线上词汇做归一,避免同一个指标被拆成两份。流式调用还会额外记录首个事件的到达时间、事件数量,以及流结束时调用方是否仍在接收,因此中途挂断的调用不再被计为成功。由于该协议本身不携带 usage 字段,网关会依据流经的消息文本估算 Token 并标记为估算值;成本保持为零,因为 Agent 的计费方式不是网关能够知晓的。指标 按 Agent 和操作类型切分。参见 Agent 网关。
- 模型服务提供方返回的响应 id 现在会被记录。 它会出现在访问日志中,也会出现在每次上游尝试各输出一条的专门日志行里——后者覆盖了单条访问日志在结构上无法覆盖的两种情况:流式响应,以及重试或故障转移产生的后续尝试。控制台的日志详情面板也会展示该 id,因此排查上游侧问题时无需再手工跨系统关联记录。
- 限流策略支持
day窗口,按 UTC 自然日计数。参见限流策略。 - 控制台的请求日志按网关面拆分。 LLM、MCP 和 A2A 流量各有独立的标签页,且每个标签页只提供真正能用于筛选它的过滤条件,而不再是一个混合列表配一组只对部分流量有效的过滤器。
- 控制台的下拉选择框支持搜索。 模型、模型服务提供方 Key、调用方 API Key 等可能变长的选择框,现在都可以边输入边筛选,不必在完整列表中滚动查找。
- 控制台会提示网关的配置兼容性。 当你保存的某个配置并非环境内所有网关都能理解时,控制台会在保存时和数据面视图中给出提示,指明具体字段和引入该字段的版本,而不是让这个配置在旧版本网关上静默失效。
改进
- 除按核 worker 模型之外,每请求路径还做了一系列优化:改用 jemalloc 内存分配器并启用链接期优化、为零配置部署跳过不需要的处理环节、为每个 worker 缓存指标句柄、对下行连接设置
TCP_NODELAY、缓存上游端点 URL,以及每个请求只加载一次配置快照。 - 限流条件中的模型维度,现在会同时匹配调用方寻址的条目和实际派发到的目标,因此以模型组为条件的策略能够覆盖所有寻址到该组的请求。此前只比较派发目标,这类条件永远不会命中。
- 语义路由在选路时会遵守成员自身的访问规则,遇到调用方无权使用的成员会转向其他目标,而不是直接派发过去。
- 按模型的限流现在适用于所有模型类型,控制台也在每种类型上提供限流表单。
- 缓存策略的作用目标会在创建时校验;被策略引用的模型改名后,引用会同步更新。
修复
- 已过期的邀请不再继续占用邮箱地址,同一个人可以被重新邀请。仍在有效期内的邀请依然会阻止重复邀请。
- 创建资源时把布尔字段显式设为
false,现在会真正存为false。此前数据库列默认值会替换掉零值,导致创建时设为禁用的 OIDC 身份提供方被存成启用,API 也随之回显为启用。 - Realtime 端点上认证通过之后发生的拒绝,现在会归属到已解析出的调用方,而不再是没有身份信息的记录。
- 已停止上报心跳的网关不再计入控制台的配置兼容性提示,避免一个已下线的实例让健康的集群看起来处于部分不兼容状态。
- 从源码构建且未注入版本号的网关会上报一个占位版本号;该占位值现在被视为“版本未知”,而不再被当作某个真实的旧版本,因此这类集群不 会再对其实际可能支持的特性长期告警。
0.8.2
发布日期: 2026 年 8 月 11 日
这是一个面向 A2A 网关的维护版本。网关现在会向上游声明每台 Agent 所固定的协议版本,能找到发布在路径前缀下的 Agent Card,把 Card 上公布的每一个地址都指向自身,并把 message/stream 按事件到达的节奏实时中继,而不再缓冲整个响应体。此外,Agent 与 MCP 服务器的命名规则和凭据约束现在适用于所有配置路径,而不再只有网关自带的 Admin API。
行为变化
- 通过资源文件提供的 A2A Agent 与 MCP 服务器定义,现在会按 Admin API 相同的规则校验:名称格式、各
auth_type所需的凭据,以及基于 OpenAPI 的 MCP 服务器所需的字段。违反其中任何一条的文件不再加载,网关会指出是哪一条目缺少哪个属性,而不是带着一份无法工作的定义启动——名称中含/的 Agent 会把自己的/a2a/<name>路由劈成两段,auth_type: bearer却未设置secret则等于用空凭据向上游认证。通过控制面配置的部署不受影响,因为这些规则在创建资源时就已生效;由控制面托管的网关只会拒绝出问题的那一条,其余配置继续服务。发布前可用aisix validate --resources <file>先行检查。参见 Agent 网关。