400 messages[1].role must be either 'user' or 'assistant', but got 'system'

2026年05月29日 09:36 19.21 秒 success

错误信息

API Error: 400 messages[1].role must be either 'user' or 'assistant', but got 'system'

AI 解决方案

1. 🌐 错误翻译


原文:API Error: 400 messages[1].role must be either 'user' or 'assistant', but got 'system'
译文:API错误:400 错误:messages[1].role 必须是 'user' 或 'assistant',但得到了 'system'

2. 🎯 原因分析


这是一个 OpenAI 聊天补全 API 的典型错误。根本原因在于您向 API 发送的 messages 数组结构不符合规范。
  • 核心问题:在 OpenAI 的聊天模型 API 中,messages 数组的第一个元素(索引0)必须是一个 role"system" 的消息,用于设定助手的行为。从第二个元素开始(索引1及以后),role 必须是 "user""assistant",用于表示对话的交替进行。

  • 错误定位:您的代码错误地将一个 role"system" 的消息放置在了数组的第二个位置(messages[1]),这违反了 API 的规范。
  • 3. 💡 解决方案


    请检查并修正您构建 messages 数组的代码。正确的结构应如下所示:

    import openai
    
    messages = [
        {"role": "system", "content": "你是一个乐于助人的助手。"}, # 第一个元素必须是 system
        {"role": "user", "content": "你好,请介绍一下你自己。"},
        # assistant 和 user 的回复可以继续交替...
    ]
    
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages
    )
    

    // JavaScript / Node.js 示例
    const messages = [
        { role: "system", content: "你是一个乐于助人的助手。" }, // 第一个元素必须是 system
        { role: "user", content: "你好,请介绍一下你自己。" }
    ];
    
    // 后续 API 调用...
    

    关键点:确保 messages 数组的第一个元素system 角色消息,后续元素严格按 userassistant 的顺序交替排列。

    4. 🛡️ 预防措施


  • 查阅官方文档:在调用 API 前,务必查阅 [OpenAI Chat Completions API 文档](https://platform.openai.com/docs/api-reference/chat/create),明确 messages 数组的结构要求。

  • 代码校验与日志:在发送 API 请求前,可以在代码中添加日志或断言,检查 messages 数组的结构和 role 值,以便快速定位问题。例如,打印出整个 messages 对象进行审查。