使用chat_gpt_sdk调用OpenAI仅“hi”可用,其他Prompt失效求助
问题描述
- 使用OpenAI的chat_gpt_sdk插件调用接口时,仅输入Prompt为“hi”能正常响应,其他Prompt均无法工作
- 已确认账户有剩余Token和可用额度
调用代码如下:
final request = ChatCompleteText( model: GptTurbo0301ChatModel(), messages: _messagesHistory, maxToken: 2000, ); try { final response = await _openAI.onChatCompletion(request: request); for (var element in response!.choices) { if (element.message != null) { setState(() { _messages.insert( 0, ChatMessage( user: _gptChatUser, createdAt: DateTime.now(), text: element.message!.content), ); }); } } } on OpenAIRateLimitError catch (err) { log.e('catch OpenAIRateLimitError ->${err.data?.error?.toMap()}'); } on OpenAIServerError catch (err) { UtilityFunctions.createToast( context, "You have exceeded the limit.\nPlease try again later."); log.e('catch OpenAIServerError ->${err.data?.error?.toMap()}'); } catch (e) { log.e(e); }
附错误及Prompt截图:
排查与解决方案
校验消息历史格式
确认_messagesHistory的每条消息都包含合法的role(如user/assistant)和content字段,ChatGPT API对消息格式要求严格,格式错误会导致非简单请求失败。打印完整错误详情
在通用catch块中补充打印错误堆栈:log.e('错误详情:', e);通过具体错误信息定位问题(比如上下文过长、格式不合法等)。
测试极简请求
临时替换_messagesHistory为仅当前用户输入的消息:messages: [ChatMessage(role: Role.user, content: "测试Prompt")]若能正常响应,说明问题出在消息历史的拼接逻辑上。
调整模型与Token设置
- 尝试切换到新版
gpt-3.5-turbo模型,替代旧版的GptTurbo0301ChatModel - 计算消息历史+预期返回内容的总Token数,若接近2000上限,适当调小
maxToken或截断历史消息
- 尝试切换到新版
检查输入内容
确认其他Prompt是否包含特殊字符、代码块或API不支持的格式,可先输入纯文本类Prompt测试。
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

