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

Flutter集成gpt-3.5-turbo时如何给Prompt添加System消息

解决Flutter集成gpt-3.5-turbo添加System消息时的400错误

核心问题分析

400 Bad Request错误几乎都是因为请求格式不符合OpenAI的API规范。gpt-3.5-turbo对messages数组的格式有严格要求:

  • 每条消息必须包含role(取值为system/user/assistant)和content字段
  • System消息必须放在messages数组的最开头,不能与用户、助手消息交错
  • 所有消息的content字段不能为空

正确的消息转换实现

假设你用ChatMessage类存储聊天记录,修改convertToJSON函数时,要先插入System消息,再拼接历史聊天内容:

List<Map<String, dynamic>> convertToJSON(List<ChatMessage> chatHistory, String systemPrompt) {
  // 初始化消息列表,先加入System消息
  final messages = <Map<String, dynamic>>[
    {
      "role": "system",
      "content": systemPrompt, // 必须保证该内容非空
    },
  ];

  // 遍历历史聊天记录,添加用户和助手消息
  for (final msg in chatHistory) {
    messages.add({
      "role": msg.isUser ? "user" : "assistant",
      "content": msg.text, // 确保消息文本不为空
    });
  }

  return messages;
}

完整API请求示例

确保请求体结构正确,并且用jsonEncode正确序列化:

// 构建请求体
final requestBody = {
  "model": "gpt-3.5-turbo",
  "messages": convertToJSON(chatHistory, "你的系统提示词内容"),
  "temperature": 0.7, // 可选参数,按需调整
};

// 发起API请求
final response = await http.post(
  Uri.parse("https://api.openai.com/v1/chat/completions"),
  headers: {
    "Authorization": "Bearer 你的OpenAI API密钥",
    "Content-Type": "application/json",
  },
  body: jsonEncode(requestBody),
);

额外排查点

  • 检查API密钥是否有效、是否有剩余额度
  • 打印jsonEncode(requestBody)的结果,确认生成的JSON格式合法,没有语法错误
  • 检查聊天记录中是否存在空内容的消息(比如用户未输入就发送),这类消息会导致API报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:55:16