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

Flutter调用GPT-3.5-Turbo API无预期输出,请求技术排查

GPT-3.5-Turbo API调用输出异常排查

核心问题定位与修复方案

1. API请求参数错误

在ApiService.sendMessage的请求体中,参数名写错了:

body: jsonEncode({
  "model": "gpt-3.5-turbo",
  "message": // 此处应为复数形式"messages"
  [{"role": "user", "content": prompt}]
})

OpenAI Chat Completions API要求的对话参数是**messages**(复数),单数message会导致API返回无效响应,无法正确解析内容。

2. 字符串处理无效

解析响应时,content.trim()未赋值回变量,原代码仅调用方法但未保存结果:

final String content = jsonDecode(response.body)["choices"][0]["message"]["content"];
content.trim(); // 需改为 return content.trim();

该问题虽不会导致完全无输出,但可能返回带首尾空格的内容,影响展示效果。

3. 错误处理缺失

当前代码仅判断statusCode == 200,未处理其他状态码(如401密钥无效、429请求超限、500服务器错误等),无法定位具体错误。建议添加日志打印:

if(response.statusCode == 200){
  // 原解析逻辑
} else {
  print("API请求失败: 状态码${response.statusCode},响应内容${response.body}");
  return "请求失败,请查看控制台日志";
}

通过打印响应内容,可直接获取OpenAI返回的错误详情,快速定位问题。

4. 聊天列表ID重复风险

sendTextMessage中使用DateTime.now().toString()作为消息ID,可能出现重复ID导致UI更新异常。建议改用唯一ID生成方式:

import 'package:uuid/uuid.dart';

// 生成唯一ID
final id = const Uuid().v4();

修复后完整代码示例

ApiService类

import 'package:http/http.dart' as http;
import 'dart:convert';
import '../constants/api_constant.dart';

class ApiService{
  static Future<String> sendMessage ({required String prompt}) async {
      var response = await http.post(Uri.parse("https://api.openai.com/v1/chat/completions"),
      headers: {
        'Authorization': 'Bearer $API_KEY',
        "Content-Type": "application/json"},
        body: jsonEncode({
          "model": "gpt-3.5-turbo",
          "messages":
          [{"role": "user", "content": prompt}]
        })
      );
      
      if(response.statusCode == 200){
        final String content = jsonDecode(response.body)["choices"][0]["message"]["content"];
        return content.trim();
      } else {
        print("API Error: ${response.statusCode} - ${response.body}");
        return "请求失败,请查看控制台日志";
      }
    }
  }

消息发送与列表更新方法

import 'package:uuid/uuid.dart';

void sendTextMessage(String prompt) async {
    final userMessageId = const Uuid().v4();
    addToChatList(prompt, true, userMessageId);
    final response = await ApiService.sendMessage(prompt: prompt);
    final aiMessageId = const Uuid().v4();
    addToChatList(response , false, aiMessageId);
  }

void addToChatList(String prompt, bool isMe, String id) {
    final chats = ref.read(chatsProvider.notifier);
    chats.add(ChatModel(
      id: id,
      prompt: prompt,
      isMe: isMe,
    ));
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:13:15