You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure APIM中OpenAI视觉请求JSON验证异常问题咨询

APIM验证Azure OpenAI视觉请求时的错误匹配问题

我将Azure OpenAI API 2024-12-01-preview版本的Swagger文件上传至Azure APIM,配置了如下JSON请求验证策略:

<validate-content unspecified-content-type-action="ignore" max-size="4194394" size-exceeded-action="detect" errors-variable-name="requestBodyValidation">
    <content type="application/json" validate-as="json" action="prevent" allow-additional-properties="true" />
</validate-content>

普通文本请求的验证正常,但发送包含image_url的合法视觉请求时,被APIM验证拦截并返回400错误。

请求示例

{
    "messages": [
       { 
           "role": "system", 
           "content": "" 
        },
       { 
           "role": "user", 
           "content": [
               { 
                   "type": "text", 
                   "text": "describe"
               },
               {
                   "type": "image_url",
                   "image_url": {
                       "url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP8AAAD/CAYAAAA+CADKAAAAAXNSR0IArs4c6QAAIABJREFUeF7svYeSXNeVJbquS+/Ke3hPEiRFeanNaDrmxUzEvHjxPnHmF6bnzUy0mVaPRKlJ0YOEIYACUN6nz7z2xdr7nMwsSGJ3U2qVKFQxigCysjLznnu2W3vtdZz/8h//a4bzr/MVOF+BV24FnSJQfFUDLarphQVLQQ7/KIG+mP+9/+OJdSXheRWcR7WpppkaToLd1nl2AWzVOKPmju5650G49gucl6OBZzHe5PAE/afuSDkvLuz/DrcKLa8vv/H6D9yL14BMhIWGQjq6lN7ho0IuQVSfWbFwJOGiqQf0or+/wFrbnH3sR7ztgAAAABJRU5ErkJggg=="
                       }
                   }
               ]
           }
       ],     
     "stream":true
}

错误响应

{
     "statusCode": 400,
     "message": "Body of the request does not conform to the definition which is associated with the content type application/json. Path:messages[1].role Message: Value \"user\" is not defined in enum. Line: 8, Position: 20 SchemaId: #/components/schemas/chatCompletionRequestFunctionMessage/properties/role"
 }

错误提示显示请求匹配了chatCompletionRequestFunctionMessage schema,但该请求实际应匹配chatCompletionRequestUserMessage和chatCompletionRequestUserMessageContentPart schema。需要排查是Swagger规范本身存在问题,还是APIM验证器的逻辑导致错误匹配。

排查方向

  • 检查Swagger中chatCompletionRequestMessage的多态判别逻辑:确认role字段是否被正确设置为多态的判别属性,且user角色对应的schema是否正确关联了chatCompletionRequestUserMessage。
  • 验证Swagger中chatCompletionRequestUserMessage的定义:确认其支持数组类型的content(包含text和image_url类型的内容块),且该schema的role枚举包含user值。
  • 测试APIM验证器的多态处理能力:尝试简化请求(比如只保留用户消息的image_url内容),观察是否仍出现错误匹配;或者临时修改验证策略为action="detect",查看详细的验证日志,确认验证器遍历schema的顺序和匹配逻辑。
  • 对比原始Swagger与APIM导入后的差异:检查APIM是否对Swagger的多态定义(如oneOf/anyOf)进行了转换或截断,导致判别逻辑失效。
  • 查看APIM的版本兼容性:确认当前使用的APIM版本是否支持OpenAPI 3.x中的复杂多态定义,尤其是带有判别字段的oneOf结构。

内容的提问来源于stack exchange,提问作者Jayendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:16:10