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
相关产品推荐
相关产品推荐

