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

Unity调用OpenAI GPT-3接口POST请求报400错误求助

解决Unity调用OpenAI GPT-3接口返回400 Bad Request的问题

嘿,我看了你的代码,找到几个导致400错误的关键问题,咱们来一步步修正:

首先说核心问题:你混淆了表单请求和JSON请求的格式——OpenAI的接口要求JSON格式的请求体,但你的代码用了WWWForm(表单格式)却又设置了JSON的Content-Type,这直接导致请求格式完全不匹配,服务器自然返回400错误。

另外还有两个小细节需要修正:

  • Content-Type头写错了:正确的JSON内容类型应该是application/json,不是你写的json
  • 日志字符串有语法错误:成功日志里的双引号没闭合,这会导致编译问题

下面是修正后的完整代码:

private IEnumerator Upload()
{
    // 构建符合OpenAI要求的JSON请求体
    var requestPayload = new
    {
        prompt = prompt,
        max_tokens = maxTokens,
        model = model,
        temperature = temperature
    };
    string jsonBody = JsonUtility.ToJson(requestPayload);

    using (UnityWebRequest wR = UnityWebRequest.Post("https://api.openai.com/v1/completions", string.Empty))
    {
        // 替换上传处理器,直接发送JSON字节数组
        byte[] rawBody = System.Text.Encoding.UTF8.GetBytes(jsonBody);
        wR.uploadHandler = new UploadHandlerRaw(rawBody);
        wR.downloadHandler = new DownloadHandlerBuffer();
        
        // 设置正确的请求头
        wR.SetRequestHeader("Authorization", "Bearer " + apiKey);
        wR.SetRequestHeader("Content-Type", "application/json");

        yield return wR.SendWebRequest();

        if (wR.result != UnityWebRequest.Result.Success)
        {
            // 打印错误时顺便输出服务器返回的详细信息,方便调试
            Debug.LogError("请求失败:\n错误信息: " + wR.error + "\n服务器响应: " + wR.downloadHandler.text);
        }
        else
        {
            Debug.Log("请求成功!\n服务器响应: " + wR.downloadHandler.text);
        }
    }
}

再给你几个调试小建议:

  • 确认model变量的值是正确的,比如text-davinci-003这类OpenAI支持的GPT-3模型名称,模型名错误会直接返回400
  • 检查你的apiKey有没有多余的空格或者拼写错误,权限问题也可能触发400错误
  • 如果还是出错,一定要看wR.downloadHandler.text里的内容,OpenAI会在响应里明确告诉你具体问题,比如参数类型不对、prompt格式不符合要求等等

内容的提问来源于stack exchange,提问作者Dolev Mitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:40:39