使用.net core winform 写一个调用chatgpt3.5接口的聊天窗体

发布时间 2023-06-23 16:48:11作者: 孤幽影暗

在.NET Core WinForms中调用ChatGPT-3.5接口的基本步骤如下:

  1. 创建一个新的.NET Core WinForms应用程序项目。
  2. 添加所需的包管理器。
  3. 在UI上创建一个聊天窗体,包含输入框和消息显示区域等控件。
  4. 在聊天窗体代码中,编写逻辑以处理用户输入和接收来自ChatGPT-3.5接口的响应。
  5. 添加代码以使用HTTP客户端与ChatGPT-3.5接口进行通信,并发送用户输入并接收返回的聊天响应。
  6. 在用户输入时调用聊天接口,并将返回的响应显示在消息显示区域中。

下面是一个简单的示例代码,帮助你开始构建一个调用ChatGPT-3.5接口的聊天窗体。

  1. 创建一个新的.NET Core WinForms应用程序项目。

  2. 添加所需的包管理器。在Visual Studio内,选择“项目”->“NuGet程序包管理器”->“管理NuGet程序包”。添加以下包:

    • System.Net.Http.Json:用于处理HTTP请求和JSON序列化。
    • Newtonsoft.Json:用于处理JSON数据。
  3. 在聊天窗体的设计视图上,添加一个TextBox控件用于接收用户输入,并添加一个ListView控件或一个TextBox用于显示聊天消息。

  4. 在聊天窗体的代码视图中,添加以下代码:

    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace ChatGPT3
    {
        public partial class ChatForm : Form
        {
            private readonly HttpClient httpClient;
            private const string chatGptApiUrl = "https://api.openai.com/v1/chat/completions";
            private const string apiKey = "YOUR_API_KEY";
    
            public ChatForm()
            {
                InitializeComponent();
                httpClient = new HttpClient();
                httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
            }
    
            private async void SendButton_Click(object sender, EventArgs e)
            {
                string userInput = inputTextBox.Text;
                if (string.IsNullOrEmpty(userInput))
                    return;
    
                // 发送用户输入并接收聊天响应
                string chatResponse = await SendChatRequest(userInput);
    
                // 如果有聊天响应,则将其显示在消息区域
                if (!string.IsNullOrEmpty(chatResponse))
                {
                    DisplayChatMessage(userInput, true);
                    DisplayChatMessage(chatResponse, false);
                }
    
                // 清空输入框
                inputTextBox.Text = "";
                inputTextBox.Focus();
            }
    
            private async Task<string> SendChatRequest(string userInput)
            {
                try
                {
                    // 构造聊天请求
                    var requestContent = new
                    {
                        messages = new[]
                        {
                            new { role = "system", content = "You are GPT-3.5, a large language model trained by OpenAI." },
                            new { role = "user", content = userInput }
                        }
                    };
    
                    // 发送HTTP POST请求到ChatGPT-3.5 API
                    var response = await httpClient.PostAsJsonAsync(chatGptApiUrl, requestContent);
    
                    // 处理响应
                    if (response.IsSuccessStatusCode)
                    {
                        var chatResponse = await response.Content.ReadAsAsync<ChatResponse>();
                        return chatResponse.choices[0].message.content;
                    }
                    else
                    {
                        MessageBox.Show("发送聊天请求时发生错误。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("发生异常:" + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
    
                return null;
            }
    
            private void DisplayChatMessage(string messageText, bool isUser)
            {
                var message = new ListViewItem(messageText);
                if (isUser)
                {
                    message.BackColor = System.Drawing.Color.LightGray;
                }
                else
                {
                    message.BackColor = System.Drawing.Color.White;
                }
    
                messagesListView.Items.Add(message);
            }
        }
    
        public class ChatResponse
        {
            public List<Choice> choices { get; set; }
        }
    
        public class Choice
        {
            public Message message { get; set; }
        }
    
        public class Message
        {
            public string content { get; set; }
        }
    }

    上述代码中,使用了HttpClient来发送POST请求到ChatGPT-3.5接口,并设置了合适的请求头以及API密钥。在发送用户输入并接收聊天响应后,将响应显示在消息区域中。

    请注意,上述示例中的apiKeychatGptApiUrl需要根据你自己的访问密钥和API URL进行替换。同时,还需根据你的UI设计来调整代码以适应不同的控件。

    这只是一个基本的示例,你可以根据自己的需求来扩展和优化代码,例如处理各种错误,添加聊天历史记录,优化UI等。