400 Failed to deserialize the JSON body into the target type: messages[1].role: ...

2026年05月29日 09:59 23.61 秒 success

错误信息

API Error: 400 Failed to deserialize the JSON body into the target type: messages[1].role: unknown variant `system`, expected `user` or `assistant` at line 1 column 4838 (request id: 20260529095817463959597o7ho5WW2)

AI 解决方案

1. 🌐 错误翻译


原文:unknown variant `system`, expected `user` or `assistant`
译文:遇到了未知的变体`system`,期望的是`user`或`assistant`

2. 🎯 原因分析


根本原因在于您发送给API的请求体(JSON Body)中,messages数组内的一个消息对象的role字段值使用了system,但该API接口仅支持userassistant两种角色。错误明确指出问题发生在messages[1].role(即消息数组的第二个元素),这表明您可能在构建对话历史时,直接复制了某些支持多角色(如system/user/assistant)的API格式,而DMXAPI的该接口仅实现了基础的用户-助手对话模型。

3. 💡 解决方案


您需要修改请求中的messages数组,移除system角色的消息,或将system消息的内容合并到第一条user消息中。

错误的请求结构示例:

{
  "messages": [
    {"role": "user", "content": "第一条用户消息"},
    {"role": "system", "content": "你是一个助手"}, // <-- 错误根源
    {"role": "assistant", "content": "助手回复"},
    {"role": "user", "content": "当前用户问题"}
  ]
}

修复后的正确结构示例:

{
  "messages": [
    {"role": "user", "content": "第一条用户消息"},
    {"role": "assistant", "content": "助手回复"},
    {"role": "user", "content": "当前用户问题"} // 原system指令可整合到这里或第一条消息
  ]
}

或者,将system指令并入第一条user消息:
{
  "messages": [
    {"role": "user", "content": "你是一个助手。第一条用户消息"},
    {"role": "assistant", "content": "助手回复"},
    {"role": "user", "content": "当前用户问题"}
  ]
}

4. 🛡️ 预防措施


  • 📄 阅读文档:在调用任何API前,务必仔细阅读其官方文档,明确消息对象role字段允许的值(如user, assistant, system, tool等)。

  • 🔍 验证输入:在代码中对构造的messages数组进行验证,确保每个对象的role字段值在允许的范围内。