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

调用Unity WebRequest请求OpenAI API异常:Editor正常WebGL参数缺失

解决Unity WebGL调用OpenAI API时「Provide Model Parameter」错误的方案

核心问题定位

编辑器与WebGL平台的HTTP请求处理、序列化机制存在差异,导致请求参数(尤其是model字段)未正确传递到OpenAI API;WebGL下Debug.Log(result)为空,是因为Unity WebGL的日志输出逻辑和编辑器不同。

具体排查与修复步骤

1. 替换请求参数序列化方式

Unity默认的JsonUtility在WebGL环境下对嵌套对象、特殊字符的处理存在兼容性问题,改用Newtonsoft.Json(需导入Unity官方提供的Newtonsoft.Json包)序列化请求payload:

// 替换原JsonUtility.ToJson代码
string payloadJson = Newtonsoft.Json.JsonConvert.SerializeObject(chatCompletionRequest);

确保序列化后的JSON字符串包含明确的"model": "gpt-3.5-turbo"(或你使用的目标模型ID)字段。

2. 强制设置请求Content-Type

WebGL下发送POST请求时,必须明确指定Content-Type为application/json,否则OpenAI API无法正确解析参数:

UnityWebRequest request = UnityWebRequest.Post(apiUrl, payloadJson);
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", "Bearer " + apiKey);

3. 调试WebGL下的实际请求内容

WebGL的Debug.Log无法直接输出完整请求内容,可通过浏览器控制台查看:
在发送请求前添加以下代码,将序列化后的JSON字符串传递给浏览器控制台打印:

#if UNITY_WEBGL && !UNITY_EDITOR
Application.ExternalCall("console.log", "Request Payload: " + payloadJson);
#endif

通过Chrome控制台确认实际发送的参数是否包含model字段。

4. 处理跨域请求限制

若WebGL部署在本地或非OpenAI允许的域名下,跨域限制会导致请求被拦截,参数无法正常传递。可通过以下方式解决:

  • 在Unity项目中配置CORS相关设置;
  • 在部署服务器上搭建反向代理,将OpenAI API请求转发到同源地址。

5. 验证API密钥的正确性

确保WebGL环境下API密钥未被过滤或加载异常,可通过上述Application.ExternalCall方式临时输出密钥(注意生产环境需删除该调试代码)。

验证修复

修改完成后,构建WebGL版本并在Chrome中运行,通过控制台确认请求payload包含正确的model字段,再调用API即可解决「Provide Model Parameter」错误。

内容的提问来源于stack exchange,提问作者Wasim Akhtar Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:23:33