发布说明
本页汇总 AISIX 网关、控制面、控制台和部署包中面向用户的变更,按版本从新到旧排列。
如果一次升级跳过了若干版本,其间每个版本的升级说明依然适用。请按从旧到新的顺序阅读——从你当前版本的下一个版本开始,一直读到目标版本。支持的升级路径和升级顺序参见升级 AISIX。
发布产物包括 docker.io/api7/aisix 网关镜像、docker.io/api7/aisix-cp-* 下的控制面镜像、aisix-cp Helm Chart 和离线安装包。
1.7.0
发布日期: 2026 年 10 月 22 日
组织现在可以按部门、业务组或子公司归因成本:为 API Key 、团队和成员设置标签后,每一行用量都会带上请求解析出的标签。标签可用于预算、限流,以及新的组织级成本分析页面。定价新增组织币种(USD 或 CNY)、按输入长度分档的价格、模型组价格、模型组低峰折扣、按上游服务档位的价格,以及 1 小时缓存写入费率,Claude 模型默认按输入费率的 2 倍为其计费。网关提供两个决策端点 /v1/systemone 和 /v1/decisions,可由 TypeSafe、Microsoft Foundry、OpenRouter 和 OpenAI 提供服务。OTLP Span 现在遵循已发布的 OpenTelemetry GenAI 语义约定,OTLP、Datadog 和阿里云 SLS 导出器会携带包含推理和工具调用的结构化消息。每个导出器现在各自选择要记录的请求头和上游响应头。控制台的语言依次取浏览器内的选择、组织设置或浏览器语言,概览和用量页面改为从按小时汇总的数据加载。Amazon Bedrock 和 Vertex AI 上的 Claude 在 /v1/messages 和 /v1/messages/count_tokens 上原生提供服务,提示词缓存(包括 auto_prompt_caching)也在这些平台上生效。Bedrock 模型服务提供方凭证和 Bedrock 安全护栏可以使用 Bedrock API Key、AWS 默认凭证链或扮演的 IAM 角色进行认证。聊天请求中的图像、音频和文件现在会送达 Vertex Gemini、Anthropic、Vertex AI 上的 Claude 和 Bedrock,而不再被丢弃;经路由模型组的 /v1/responses 对话会留在产生其上下文的目标上。Bedrock 和 Realtime 流量现在遵循网关的代理环境变量,网关和控制面代调用方访问 URL 时由统一的 SSRF 防护设置管控。
行为变化
可观测性
- OTLP Span 遵循 OpenTelemetry GenAI 语义约定(v1.41.1)。 基于旧名称的已保存查询和看板必须更新:
gen_ai.system已移除,请改用gen_ai.provider.name(托管平台优先,因此 Bedrock 上的 Claude 为aws.bedrock)。gen_ai.request.model现在是发往上游的模型名。调用方发送的模型或模型组名称移到aisix.requested_model。- 对于 Anthropic 形态的用量(Anthropic、Bedrock Converse,以及上报
cache_*_input_tokens的透传路由),gen_ai.usage.input_tokens现在包含缓存 Token。OpenAI 形态的用量不变。Datadog 导出器的gen_ai.usage.input_tokens也有同样变化,其aisix.*计数不变。 - Span 名称变化:操作 Span 为
{operation} {上游模型}(例如chat gpt-4o),而不再是chat.completions;SERVER Span 为POST /v1/chat/completions等;MCP Span 为tools/call {tool}。 - 成功的 Span 不再设置状态,而不是设为
OK。4xx不再把 SERVER Span 标记为错误,调用方挂断(499)在任何 Span 上都不算错误。 - OTLP Span 上移除了
gen_ai.prompt/gen_ai.completion。设置content_mode: full时,内容以gen_ai.input.messages、gen_ai.output.messages、gen_ai.system_instructions和gen_ai.tool.definitions导出;不是消息列表、或被采集上限截断的内容仍放在aisix.content.prompt/aisix.content.response下。 aisix.client_source_ip/aisix.client_user_agent改为client.address/user_agent.original,它们与http.request.header.*一起移到 SERVER Span 上。- 只有尝试 Span 携带
gen_ai.operation.name/gen_ai.request.model,因此统计 GenAI Span 的追踪系统对每次尝试只计一次,而不是三次。 - 资源属性
service.name取observability.service_name(默认aisix),而不再是固定的aisix-dp。
- Datadog 和阿里云 SLS 导出器携带结构化内容(
content_mode: full)。 在 SLS 上,prompt被input_messages(存在时还有system_instructions和tool_definitions)取代,response被output_messages取代,每个都是 JSON 字符串。在 Datadog 上,gen_ai.prompt被gen_ai.input.messages(以及gen_ai.system_instructions和gen_ai.tool.definitions)取代,gen_ai.completion被gen_ai.output.messages取代。输出消息按顺序包含text、reasoning和tool_call部分,finish_reason使用约定中的取值(stop、length、tool_call、content_filter、error)。被截断或不是消息列表的一侧(Embeddings、图像、音频、任务、A2A、MCP)仍放在旧的扁平字段中并带有content_truncated,因此一条记录可能两种形态并存。对象存储导出器不变。 observability.usage_event.request_headers不再起作用。 请求头采集移到了各个导出器(见新功能)。仍设置该键的网关可以启动,会记录一条警告,并且在其导出器列出 这些请求头之前不再记录它们。- 用量事件的
model_id只指向自己执行派发的模型。 对于在选定目标之前就失败的模型组(routing 或 semantic)或 ensemble(护栏拦截、预算、入口级限流、模型被禁止、语义解析失败),以及 routing 或 semantic 模型组的响应缓存命中,/v1/chat/completions和/v1/messages上的model_id现在为空,而不再是模型组的 ID;requested_model_id仍指向该模型组。直接模型在/v1/responses、/v1/embeddings及其他单次调用端点上派发前的失败,现在带有该模型自己的 ID,而不再为空。1.6.x 及更早版本的网关保持旧的上报方式。用量事件查询见 API 变化。 - 透传路由按其承载的协议计量用量。 被识别为 chat、Anthropic Messages、Responses、Completions、Embeddings、图像或 Rerank 的透传交换,会用该端点自己的用量解析器读取,并在 LLM 请求层(
aisix_llm_requests_total、aisix_llm_request_duration_seconds、aisix_llm_*Token 指标族以及首 Token 时间 / 端到端延迟)中只计一次,endpoint="/passthrough_route",model为请求体中的模型(未注册的名称归为unresolved)。不再读取未识别流上的用量对象。智能体后端的token_usage帧不再把缓存读取计两次。同时带有 Chat 和 Anthropic 信封的缓冲响应,现在会被失败即拦截的输出护栏拒绝。透传访问日志的total_tokens现在与类型化端点一样包含缓存 Token。 /v1/responses的用量事件携带finish_reason(stop、tool_calls、length、content_filter,失败或取消的响应为空) ,由调用方收到的结果推导。- 只要模型服务提供方发送了请求 ID,就会记录
provider_request_id。 失败的上游尝试、/v1/messages/count_tokens调用,以及响应本身没有 ID 的成功调用(Bedrock Converse 和 InvokeModel、Embeddings、音频、图像、Rerank),现在会在用量事件和访问日志中记录服务提供方的请求 ID 响应头(x-amzn-requestid、x-request-id、request-id、x-ms-request-id、apim-request-id、x-goog-request-id或cf-ray);响应对象自己的 ID 仍然优先。因此在失败的尝试上,它可能出现为 OTLP / Datadog 的gen_ai.response.id。每次重试的尝试都带有自己的 ID。此前为空的 Bedrock Converse 响应id现在是该请求 ID。失败请求的访问日志行会写出请求实际发往的服务提供方,而不再是unknown(在/v1/chat/completions上则是没有服务提供方);multipart 图像编辑和音频路由会写出请求的模型。 - 服务提供方拒绝请求形态时归类为
invalid_request_error。 网关无法为目标服务提供方转换请求,或下载的媒体使请求超过proxy.request_body_limit_bytes时,用量事件、访问日志和导出器(OTLPaisix.error_class、Datadog、SLS)记录的error_class/error_kind为invalid_request_error,而不再是invalid_config。调用方收到的错误不变。 - 所有上报
total_tokens的端点族都会记录它。 Embeddings、Rerank、音频转录与翻译、图像生成与编辑、Realtime、批次完成归因,以及按这些族计量的透传路由,其用量事件现在带有上游上报的total_tokens,此前为null。Realtime 会话和batch_completion事件记录各次上报总数之和;只要有一次计入 Token 的调用没有上报总数,该字段就为null。客户端响应、限流和 Prometheus 计数不变。
端点与模型服务提供方
-
图像、音频和文件会送达原生协议的上游。
/v1/chat/completions中的image_url、input_audio、file等媒体部分(以及转换为 chat 的/v1/messages//v1/responses中的媒体部分),现在会被转换为上游自己的媒体块,发往 Vertex Gemini、Anthropic、Vertex AI 上的 Claude 和 Bedrock(Claude InvokeModel 和 Converse),流式与非流式均适用;此前它们会被丢弃,调用方从一个根本没看到媒体的模型那里得到200。上游无法接收的媒体(例如发给 Claude 的音频)现在会返回400,并指出messages[i].content[j]。Anthropic(https://)和 Vertex Gemini(https:///gs://且媒体类型已知)仍直接接收 URL。其他http(s)媒体 URL 由网关下载后内联发送;其他协议或无法下载的 URL 返回400并指出该部分,消息中会去掉 URL 的查询字符串和片段。下载:- 拒绝解析到非公网地址的主机(回环、私有和 CGNAT 地址段、链路本地地址包括
169.254.169.254、IPv6 唯一本地地址等),每一跳重定向都会检查,除非该主机列在outbound.ssrf_protection.allowed_hosts中,或通过outbound.ssrf_protection.enabled: false关闭检查。检查开启时,即使由代理承载下载,主机也必须能从网关解析; - 与其他上游调用一样经过
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY/NO_PROXY,按upstream.tls(verify、ca_file)校验证书,并且从不转发调用方的请求头; - 每个 URL 的上限为
upstream.media_fetch.max_bytes(默认 50 MiB),与请求共享上游超时时间,并与请求体一起计入proxy.request_body_limit_bytes(超出时同样返回413 request_too_large)。
网关新增的静态配置
upstream.media_fetch(enabled,默认true;max_bytes)控制下载。设置enabled: false时,发往无法自行读取 URL 的上游的 URL 部分返回400。地址检查由新增的顶层网关配置outbound.ssrf_protection负责(enabled,默认true;allowed_hosts,默认为空,取值为host、host:port或[v6]:port;环境变量为AISIX_OUTBOUND__SSRF_PROTECTION__ENABLED和AISIX_OUTBOUND__SSRF_PROTECTION__ALLOWED_HOSTS)。它管控网关代调用方访问的每一个由调用方提供的 URL,目前即这些媒体下载;运维人员配置的 URL 不受影响。两者都已在 1.7.0 的aisixHelm Chart values 中声明。使用兼容 OpenAI 端点的服务提供方仍和以前一样原样转发媒体部分。 - 拒绝解析到非公网地址的主机(回环、私有和 CGNAT 地址段、链路本地地址包括
-
上游的错误信息会送达调用方。 来自所有 Amazon Bedrock 操作、Azure OpenAI 和 Vertex AI 的错误,以及来自所有服务提供方的
5xx错误,现在携带上游自己的错误信息,而不再是固定的状态短语或upstream returned <status>