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
相关产品推荐
相关产品推荐

