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

Unity集成ChatGPT异常:请求返回随机无关响应(附C#代码)

Unity集成ChatGPT返回无关内容的问题排查

问题描述

在Unity项目中用C#集成ChatGPT功能,已完成请求/响应的JSON封装类,能成功发送请求并获取响应,但返回内容完全无关。例如询问What is a verb?,得到的却是关于成功播客影响因素的回答。

相关代码

请求类

namespace OpenAIAPIManagement
{
    [Serializable]
    public class OpenAIAPIRequest
    {
        public string model = "gpt-3.5-turbo";
        public Message[] messages;
        public float temperature = 0.5f;
        public int max_tokens = 50;
        public float top_p = 1f;
        public float presence_penalty = 0f;
        public float frequency_penalty = 0f;

        public OpenAIAPIRequest(string model_, Message[] messages_, float temperature_, int max_tokens_, float top_p_, float presence_penalty_, float frequency_penalty_)
        {
            this.model = model_;
            this.messages = messages_;
            this.temperature = temperature_;
            this.max_tokens = max_tokens_;
            this.top_p = top_p_;
            this.presence_penalty = presence_penalty_;
            this.frequency_penalty = frequency_penalty_;
        }
    }

    [Serializable]
    public class Message
    {
        public string role = "user";
        public string content = "What is your purpose?";

        public Message(string role_, string content_)
        {
            this.role = role_;
            this.content = content_;
        }
    }
}

请求发送方法

public static async Task<Message> SendMessageToChatGPT(Message[] message, float temperature, int max_tokens, float top_p, float presence_penalty, float frequency_penalty)
{
    string request = OpenAIAPIManager.SerializeAPIRequest("gpt-4", message, temperature, max_tokens, top_p, presence_penalty, frequency_penalty);

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}");
    HttpResponseMessage response = await client.PostAsync(_apiURL, new StringContent(request, System.Text.Encoding.UTF8, "application/json"));

    if (response.IsSuccessStatusCode)
    {
        Message responseMessage = OpenAIAPIManager.DeserializeAPIResponse(await response.Content.ReadAsStringAsync()).choices[0].message;
        Debug.Log("ChatGPT: " + responseMessage.content);
        return await Task.FromResult<Message>(responseMessage);
    }
    else
    {
        return await Task.FromResult<Message>(new Message("Error", "Status" + response.StatusCode));
    }
}

输入字段处理逻辑

public async void ProcessMessageFromInputField()
{
    if (_userInput && !string.IsNullOrWhiteSpace(_userInput.text))
    {
        _chatData.Clear();
        _chatData.Add(_userInput.text + _userPostfix);
        PostMessageToContentPanel(_chatData[0]);
        _userInput.text = "";
        Message userMessage = new Message("user", _userInput.text);
        Message chatAgentResponse = await OpenAIAPIManager.SendMessageToChatGPT(new Message[]{userMessage}, 0.7f, 256, 1f, 0f, 0f);
        PostMessageToContentPanel(chatAgentResponse.content + _aiPostfix);
    }
}

排查关键点

  • 输入字段处理逻辑错误:创建userMessage前已清空_userInput.text,导致发送给ChatGPT的是空内容。ChatGPT收到空请求时会返回训练数据中的随机内容,这是返回无关回答的核心原因。修正方法:先保存输入文本再清空输入框:
    string inputText = _userInput.text;
    _userInput.text = "";
    Message userMessage = new Message("user", inputText);
    
  • 验证请求序列化结果:检查SerializeAPIRequest生成的JSON,确保messages数组内的用户消息内容是正确的提问文本,而非空值。
  • 确认API端点正确性:_apiURL必须为ChatGPT对话接口https://api.openai.com/v1/chat/completions,若误用文本补全接口会导致异常响应。
  • 检查模型权限:确认账号有权限使用gpt-4模型,无权限时会降级或返回非预期内容,可先切换为gpt-3.5-turbo测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:45:00