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

