资源文件参考
本文档逐字段说明开源 AISIX 网关可加载的声明式 resources.yaml 文件;启动配置需要设置 resources_file。有关编写、校验、加载和验证文件的操作说明,请参见开源 AISIX 网关快速入门、CLI 参考和配置状态。
文件格式
资源文件是单个 YAML 文档。顶层是一个映射,其中必须包含 _format_version,并且最多包含十个资源集合:
_format_version: "1"
provider_keys:
- display_name: openai-prod
provider: openai
api_key: ${OPENAI_API_KEY}
models:
- display_name: gpt-4o
provider: openai
model_name: gpt-4o-2024-11-20
provider_key: openai-prod
api_keys:
- display_name: ci-bot
key_env: CI_BOT_KEY
allowed_models: ["gpt-4o"]
rate_limit_policies:
- name: cap-gpt4o
scope: model
scope_ref: gpt-4o
window: minute
max_requests: 300
_format_version 必须是字符串 "1",需要加引号以确保 YAML 将其解析为字符串。缺少版本或版本无法识别会导致加载错误;未加引号的 1 会触发专用错误,提示你为它添加引号。
每个存在的集合都必须是映射序列。不存在或值为 null 的集合按空集合加载。未知顶层 Key 会导致加载错误,并列出 已知集合。
| 集合 | 条目标识 | 被以下位置引用 |
|---|---|---|
provider_keys | display_name | models[].provider_key |
models | display_name | api_keys[].allowed_models、routing、ensemble 和 semantic 内部的模型间引用,以及 rate_limit_policies[].scope_ref |
api_keys | display_name | rate_limit_policies[].scope_ref |
oidc_providers | name | api_keys[].jwt_provider |
guardrails | name | — |
mcp_servers | name(或 display_name) | — |
a2a_agents | name(或 display_name) | — |
cache_policies | name | — |
observability_exporters | name | — |
rate_limit_policies | name | — |
标识与派生 ID
每个条目的标识字段必须是非空字符串,并 且在集合中唯一;重复会导致加载错误,并指出两个冲突条目。对于 mcp_servers 和 a2a_agents,可以使用 name 或 display_name 作为标识;同时包含两种写法会导致加载错误,只能使用其中一种。
所有条目都不接受 id 字段。条目 ID 根据 <kind>/<identity> 以 UUIDv5 确定性派生,因此相同文件在重新加载和不同进程中始终生成相同 ID。由 ID 标识的引用和限流计数器因此可以跨 SIGHUP 重新加载保留。
名称引用
文件中的条目通过名称相互引用,加载器会把每个引用解析为派生 ID:
models[].provider_key指定服务提供方密钥的display_name。它与显式provider_key_id互斥;未知名称会导致加载错误,并列出已定义的服务提供方密钥。api_keys[].allowed_models、routing.targets[].model、ensemble.panel[].model、ensemble.judge.model和所有semantic模型引用均指定模型的display_name。无法解析到已定义模型的引用会导致加载错误;包含*的条目视为 Glob 模式,不执行存在性检查。- 当
scope为model或api_key时,rate_limit_policies[].scope_ref指定模型或调用方 API Key;对于其它作用域,该值原样传递。
与上述其它引用不同,api_keys[].jwt_provider 会保留为名称,而不解析成派生 ID。请将它设为允许声明该 Key 的 jwt_subject 的 OIDC 服务提供方 name。
环境变量插值
${VAR} 引用只会在字符串标量中根据网关进程环境解析。替换发生在已解析的 YAML 树中,因此环境变量值无法注入 YAML 结构,映射 Key 也不会被插值。
- 支持部分插值:
api_base: https://${UPSTREAM_HOST}/v1。 - 变量未设置或值为空都会导致加载错误;错误只指出变量名,绝不会包含变量值。
$$生成字面量$;没有大括号的$VAR原样保留;未闭合的${或空的${}会导致错误。- 整数、浮点数、布尔值和
null等非字符串标量不会被插值。
加载、错误与重新加载
启动、SIGHUP 重新加载和 aisix validate 使用相同的加载流程:读取 → 解析 YAML → 插值 ${VAR} → 转换各条目并解析名称引用 → Schema 校验(与其它所有配置来源相同)→ 交叉引用检查。
错误会在整个文件范围内聚合,并定位到问题条目和字段,例如 models[2] ("gpt-4o")。加载为全有或全无:任何错误都会拒绝整个文件。启动时,网关会快速失败并退出;SIGHUP 重新加载时,网关会继续提供上一个有效快照,记录聚合报告,并通过 GET /status/config 报告被拒绝的加载。网关不会监视文件,必须显式重新加载。
服务提供方密钥
服务提供方密钥保存上游服务提供方凭证及其连接形式。模型通过 display_name 引用服务提供方密钥。每个嵌套层级都会拒绝未知字段。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
display_name | string | 是 | 条目标识,在 provider_keys 中唯一。模型通过此名称引用该 Key。 |
api_key | string | 是 | 上游服务提供方 API Key。请以 ${VAR} 形式提供。也可以使用 secret 作为替代写法;两者必须且只能提供一个。对于凭证包含多个字段的服务提供方,例如 AWS Bedrock 或使用 Entra ID 的 Azure OpenAI,请通过一个环境变量提供 JSON 凭证文档;各凭证格式请参见服务提供方指南。 |
provider | string | 否 | 上游服务提供方标识符,例如 openai 或 deepseek。这是用于服务提供方专用分发的开放字符串,默认为空。 |
adapter | enum | 否 | 没有适用的服务提供方专用分发时所用的上游协议族:openai、anthropic、bedrock、vertex 或 azure-openai。参见适配器协议族。 |
api_base | string | 否 | 覆盖上游服务提供方的基础 URL。私有 OpenAI 兼容端点实际上必须设置此字段。支持部分插值,例如 https://${UPSTREAM_HOST}/v1。 |
strip_headers | 字符串数组 | 否 | 透传转发前删除的入站请求头。默认:authorization、cookie、set-cookie、x-api-key。条目会去除首尾空格、转成小写并去重。显式 [] 会禁用删除,不会回退到默认值。 |
tls | object | 否 | 此 Key 端点的 TLS 设置。缺省时使用部署级 upstream.tls 设置。子字段:ca_cert(此端点额外信任为签发者的 PEM 编码 CA 证书,支持包含多张证书的证书包)和 verify(默认 true;false 接受任意证书,仅用于测试环境)。参见 TLS 和 mTLS。 |
telemetry_tags | object | 否 | 通过该 Key 路由请求时发出的归因标签。 |
request | object | 否 | 分发前应用的请求格式覆盖。 |
response | object | 否 | 由支持的服务提供方桥接器应用的响应格式覆盖。 |
telemetry_tags 的所有字段均可选:kind(catalog 或 byo)、featured(布尔值,默认 false)、branded_provider(目录条目的品牌 Slug)、pk_label 和 byo_label(运维人员定义的标签,例如 production 或团队名称)。
request 的所有字段均可选:
| 字段 | 类型 | 说明 |
|---|---|---|
request.param_renames | 字符串到字符串的映 射 | 分发前,把左侧指定的顶层请求体 Key 重命名为右侧 Key。 |
request.param_constraints.temperature_min、.temperature_max | number | Chat Completions 请求体中 temperature 的截断边界。省略某一边界表示不对该侧截断。 |
request.default_headers | 字符串到字符串的映射 | 添加到出站请求的请求头。值可以使用 ${...} 变量引用请求上下文,例如 ${request.api_key.team_id};某个请求中变量无值时,该请求头会被丢弃,而不是发送空值。它们的优先级高于 forward_client_headers 转发的请求头,但网关自身设置同名请求头时会跳过它们。保留的身份认证请求头会作为纵深防御被丢弃。参见上游请求头。 |
request.forward_client_headers | 字符串数组 | 转发到上游的入站客户端请求头,可以是精确名称或 x-trace-* 之类的单 * Glob,匹配不区分大小写。空值(默认)不转发任何请求头。身份认证、传输、x-aisix-* 和 x-stainless-* 请求头绝不会转发。参见上游请求头。 |
request.default_body_fields | 字符串到 JSON 值的映射 | 调用方未设置时添加到出站请求的顶层请求体字段。 |
response 的所有字段均可选:
| 字段 | 类型 | 说明 |
|---|---|---|
response.stream_done_marker | enum | 上游 SSE 流是否应发出 data: [DONE]:required、optional 或 none。省略时两种情况均可接受。 |
response.content_list_to_string | boolean | 为 true 时,在分发前把 messages[*].content 文本块数组展平为一个字符串。默认 false。 |
response.reasoning_field | string | 从服务提供方响应中提取推理内容的路径,例如 delta.reasoning_content。 |
response.error_envelope | string | 为兼容控制面配置而保留的错误信封首选项;代理目前不会应用。 |
_format_version: "1"
provider_keys:
- display_name: openai-prod
provider: openai
api_key: ${OPENAI_API_KEY}
- display_name: internal-vllm
provider: internal-vllm
adapter: openai
api_base: https://${UPSTREAM_HOST}/v1
api_key: ${INTERNAL_LLM_KEY}
# 仅当此端点的证书由私有或企业 CA 签发时才需要。
tls:
ca_cert: |
-----BEGIN CERTIFICATE-----
MIIB...
-----END CERTIFICATE-----
模型
模型条目是面向调用方的模型别名:调用方会把其 display_name 放入请求的 model 字段。直接、向量嵌入、合议和语义别名也会出现在 /v1/models 中;路由别名和通配符模式不会列出(参见模型别名)。每个条目只包含一种分发形态:直接模型三元组(provider + model_name + provider_key_id)、routing 块、ensemble 块或 semantic 块。在同一条目中混合不同形态会导致加载错误,每个嵌套层级也都会拒绝未知字段。
所有形态均接受以下字段:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
display_name | string | 是 | 条目标识,在 models 中唯一,也是面向调用方的别名。 |
timeout | 整数(ms) | 否 | 非流式上游调用的端到端截止时间。缺省时依次回退到路由模型的 timeout 和部署级 upstream.timeout_ms 默认值(6000000 ms,即 6000 s)。0 会对此模型禁用超时。 |
stream_timeout | 整数(ms) | 否 | 上游流式分块之间的最长间隔。0 或缺省时依次回退到路由模型的 stream_timeout、模型(或路由模型)的 timeout 和部署默 认值。 |
rate_limit | object | 否 | 按模型设置请求、Token 和并发限制,见下文。 |
allowed_cidrs | 字符串数组 | 否 | 采用 CIDR 表示法的客户端 IP 允许列表(支持 IPv4 和 IPv6)。空值或缺省允许所有客户端。配置限制后,缺少或格式错误的源 IP 会被拒绝。 |
cost | object | 否 | 用于预算跟踪和 least_cost 排序的每 Token 成本:input_per_1k 和 output_per_1k,单位均为每 1,000 个 Token 的美元;存在该块时两者都必填。 |
rate_limit 子字段均可选,缺省时不限制:rps、rpm、rph、rpd(分别为固定的 1 秒、60 秒、3,600 秒和 86,400 秒窗口内的请求数)、tpm、tpd(60 秒和 86,400 秒窗口内的 Token 数),以及 concurrency(最大进行中请求数;它是信号量,不是窗口)。
直接模型
直接模型指定一个服务提供方密钥背后的一个上游模型:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
provider | string | 是 | 服务提供方标识,例如 openai 或 anthropic。首字符必须为小写字母或数字;后续可使用 .、_ 和 -;长度 1–64 个字符。 |
model_name | string | 是 | 在服务提供方请求中发送的上游模型标识,例如 gpt-4o-2024-11-20。 |
provider_key | string | 是* | provider_keys 条目的名称。与 provider_key_id 互斥;在资源文件中请使用 provider_key。 |
embedding | object | 否 | 将模型标记为支持向量嵌入:dimensions(必填,向量维度)和 normalize(默认 true,端点是否已经返回 L2 归一化向量)。随后该模型可以服务 /v1/embeddings 并支持语义路由器。 |
background_model_check | object | 否 | 后台健康检查,参见健康检查。存在该块时,子字段 enabled、interval_seconds(最小 5)、timeout_seconds、prompt、max_tokens 和 stale_after_seconds 必填;ignore_statuses(状态码数组)可选。 |
cooldown | object | 否 | 发生可重试上游失败后的请求路径冷却,见下文。 |
cooldown 子字段均可选:enabled(默认 true)、default_seconds(没有可用 Retry-After 请求头时的 TTL,默认 30)、max_seconds(使用 Retry-After 时的上限,默认 600)、honor_retry_after(默认 true)、trigger_statuses(默认 [401, 408, 429, 500, 502, 503, 504];设置该字段会替换整个列表)、trigger_on_timeout(默认 true)和 trigger_on_transport(默认 true)。
只有直接模型可以配置 embedding、background_model_check 和 cooldown。