协议参考
ai-proxy 和 ai-proxy-multi 插件使用相同的请求协议检测与转换流程。该流程会先识别客户端格式,再将请求路由到已配置的服务提供方或所选实例。
有关插件专用配置,请参阅 ai-proxy 和 ai-proxy-multi。
请求协议检测
插件会先识别客户端协议,再将其与所选服务提供方或实例支持的协议进行匹配。以下检测规则适用于两个插件。
请求要求
如果请求包含 Content-Type,其值必须为 application/json。如果省略该请求头,插件会将请求体视为 JSON。在选择服务提供方或实例前,插件会拒绝不支持的内容类型和无效请求体。
请求体不能超过 max_req_body_size,默认值为 67,108,864 字节。超过此限制的请求会收到 HTTP 413 响应。在 API7 网关中,此配置自 3.9.x 版本线的 3.9.14 和 3.10.x 版本线的 3.10.1 起可用;在 APISIX 3.17.0 及更高版本中可用。
检测顺序
插件按以下顺序检查规则:
| 客户端协议 | 请求体信号 | 路径要求 |
|---|---|---|
| Bedrock Converse | 请求体包含 messages 数组。 | 路径以 /converse 结尾;允许自定义前缀。 |
| Anthropic Messages | 请求体是 JSON 对象。 | 路径以 /v1/messages 结尾;允许自定义前缀。 |
| OpenAI Responses | 请求体包含 input。 | 路径以 /v1/responses 结尾;允许自定义前缀。 |
| OpenAI Chat Completions | 请求体包含 messages 数组。 | 路由匹配的任意路径。 |
| OpenAI Embeddings | 请求体包含 input,且前面的规则均不匹配。 | 路由匹配的任意路径。 |
路径特定规则会先于仅基于请求体的规则执行,从而避免将包含 messages 的 Bedrock Converse 和 Anthropic Messages 请求识别为 Chat Completions。Responses 和 Embeddings 请求都使用 input,因此包含 input 但不包含 messages 的请求会被识别为 Embeddings,除非其路径以 /v1/responses 结尾。
其他任何非空 JSON 对象都会按透传处理。只要请求转换未改变请求体,此模式会保留原始请求路径,并可以复用原始请求体。服务提供方身份认证和 override.endpoint 仍然生效。空请求体或无效请求体会被拒绝。
透传模式不会向下游 AI 感知插件提供 AI 协议模型,因此不会执行用量提取、提示词装饰或模板处理、内容审核文本提取以及协议转换。
检测后处理
对于已命名的协议,如果所选服务提供方支持该协议,插件会直接使用检测到的协议而不执行转换。否则,插件会查找已注册的转换器,将请求转换为服务提供方支持的协议。如果既没有原生支持,也没有兼容的转换器,请求会被拒绝。
检测到的协议和请求体决定日志插件将 request_type 记录为 ai_stream 还是 ai_chat。响应解析则根据上游响应的内容类型区分流式与非流式响应。
请求覆盖优先级
最终插件配置使用 override.llm_options.max_tokens 进行服务提供方感知的 Token 限制映射。服务提供方先将该值映射到目标协议预期的字段,再应用匹配的 override.request_body 对象。
请求体对象采用递归合并;数组和标量直接替换,不会合并。request_body_force_override: false 时客户端字段优先,覆盖配置只补充缺失字段;设为 true 时覆盖值优先并替换同名客户端字段。请求体键使用完成协议转换后的目标协议名称,例如 openai-chat、anthropic-messages 或 bedrock-converse。
失败响应
| 条件 | 客户端可见行为 |
|---|---|
请求体超过 max_req_body_size | 413 Request Entity Too Large |
| 在收到可用响应前,LLM 连接或读取超时 | 504 Gateway Timeout |
| 流式转换器无法按所选格式解析响应 | 502 Bad Gateway |
ai-request-rewrite 收到没有请求体的请求 | 400 Bad Request |
如果在流式输出开始后达到响应限制,网关会关闭下游响应流。已发送的字节无法替换为新的 HTTP 错误响应。
Anthropic 到 OpenAI 的转换
Anthropic Messages 客户端可以通过 ai-proxy 或 ai-proxy-multi 向支持 OpenAI Chat Completions 的后端发送请求。插件会将客户端请求转换为 OpenAI 格式,并将后端响应转换为 Anthropic 格式。此转换只支持 Anthropic Messages API 的一部分:保留部分字段、转换其他字段,并丢弃不支持的字段。
何时执行转换
当请求路径以 /v1/messages 结尾且请求体是 JSON 对象时,插件会将其识别为 Anthropic Messages 请求。如果所选服务提供方支持 Anthropic Messages,请求会直接使用该协议而不进行转换。如果服务提供方支持的是 OpenAI Chat Completions,共享转换器会转换请求和响应。
不支持相反的客户端/后端组合:OpenAI Chat Completions 客户端不能使用此转换器调用 Anthropic Messages 后端。
对于 ai-proxy-multi,是否需要转换由所选实例决定。转换配置示例使用 ai-proxy;有关多实例配置,请参阅 ai-proxy-multi。