请求参数处理
发给 AISIX 的请求经常带着一些参数,所选上游对它们的处理方式与客户端原本面向的 API 不同:某个模型不接受的惩罚参数、某个模型系列拒绝的 stop,或者 Anthropic 没有对应字段的 OpenAI 字段。本页说明 AISIX 如何处理每个请求参数,帮助你预先判断一个参数是会到达模型、被丢弃,还是让请求失败。
AISIX 如何决定
AISIX 按目标平台自身 API 对字段的定义来处理调用方发送的每个字段。无论请求使用上游本身的协议,还是由 AISIX 做协议转换,规则都相同:
- 目标定义了该字段,且取值符合定义。 AISIX 按调用方发送的值写入;当目标对该字段的命名或位置不同时,写入含义相同的字段,例如 OpenAI 的
stop写为 Gemini 的stopSequences。AISIX 不会丢弃、改写这个值,也不会代替上游预先校验它。模型拒绝时,上游的状态码和错误信息会返回给调用方。 - 目标没有可以放置该字段或取值的位置。 AISIX 静默丢弃,不记录日志、不添加响应头,也不计入指标。
- 该取值在调用方自身的协议里就不合法,且目标无法按原样接收。 AISIX 以
400 invalid_request_error拒绝请求,错误信息会点名该字段。 - 上游返回 的内容完整返回。 参见完整返回上游答复。
AISIX 可以根据对某个模型或模型系列的了解,决定一个值写到哪里:哪个字段、哪条上游路由、用什么名称。它不会据此决定一个值是否被丢弃、拒绝或改写。因此,你发给某个模型、而该模型不支持的参数会到达模型,你会收到服务提供方自己的错误。
不做协议转换时
当调用方的协议就是上游的协议时,例如 /v1/chat/completions 发往 OpenAI 兼容服务提供方,或 /v1/messages 发往 Anthropic,客户端能发送的每个字段都由目标定义。AISIX 按原样转发请求体,包括 AISIX 自身不认识的字段,由上游判断每个字段。AISIX 仍会做的改动只有服务提供方页面中记录的那些,例如 OpenAI 上的推理模型 Token 上限,以及运维人员在服务提供方密钥上配置的改动,例如 request.param_renames。
做协议转换时
当 AISIX 转换请求时,例如把 OpenAI 风格的请求发往 Claude 或 Gemini,或把 /v1/messages 请求发往 OpenAI 兼容模型,每个字段都会映射到目标中含义相同的字段。目标协议中没有对应字段 的字段会被丢弃。调用方协议本身就不允许的取值,例如数字形式的 stop,会以点名该字段的 400 拒绝,因为转换后的请求没有地方能把它原样交给上游判断。
各转换的映射关系见以下页面:
- OpenAI 客户端调用 Anthropic 上游
/v1/messages发往非 Anthropic 上游时的转换路径上的请求字段- Amazon Bedrock
- Vertex AI 上的 Gemini
有意保留的例外
以下四种行为有意偏离上述规则:
- Claude 客户端添加到
system中的 Anthropic 归属标识行,对 Anthropic 自有 API 以外的所有上游都会被移除。参见 Anthropic 归属标识行。 - 集成模型的裁判调用使用网关设置的采样参数,而不是调用方的参数。
- 单个空字符串
stop不会发送给 Amazon Bedrock Converse,因为 Converse 会拒绝它。 - Responses 桥接承载 Codex 等编码智能体发送的 Responses API 字段,其余 Responses API 字段不在其范 围内。
调用方会收到什么
| 情况 | 结果 |
|---|---|
| 目标接受该参数。 | 参数到达模型。 |
| 目标定义了该参数,但模型拒绝该参数或其取值。 | 上游的状态码和错误信息,例如 Amazon Bedrock 返回的 400,信息为 This model doesn't support the stopSequences field. Remove stopSequences and try again. |
| 目标没有放置该参数的位置。 | 请求成功,参数不生效。 |
| 在转换路径上,取值在调用方协议中不合法。 | 400 invalid_request_error,错误信息点名该字段。 |
| 请求体是合法 JSON,但不符合端点的请求格式。 | 400 invalid_request_error,错误信息以 invalid request body: 开头并点名字段路径,例如 max_tokens 或 messages[0]。消息 content 为数字、布尔值或对象时也会这样拒绝。 |
需要提前规划的后果:过去在网关静默忽略某个参数的情况下成功的请求,现在可能收到上游的 400。请停止向该模型发送这个参数,或改用接受它的模型。1.7.0 及更早版本的网关会自行丢弃其中一些参数;发生变化的情况列在现在会失败的请求中。