您现在的位置是:首页 >技术杂谈 >基于C#制作一个ChatGPT桌面助手网站首页技术杂谈

基于C#制作一个ChatGPT桌面助手

摔跤猫子 2024-06-17 10:48:58
简介基于C#制作一个ChatGPT桌面助手

基于C#制作一个ChatGPT桌面助手,在工作或者学习时提升自己的效率,工欲善其事,必先利其器。

一、前言

1.1、什么是ChatGPT

ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文 等任务。

1.2、ChatGPT官网及key申请

官网地址点此访问
注册的流程是免费的,网上也有很多注册的教程,这里不再一一赘述,当然也可以直接去购物平台购买;
注册并登录后,右上角点击Personal,在菜单中点击Create new sccret key进行创建key的操作,创建成功后将其复制保存。

在这里插入图片描述
在这里插入图片描述

二、后台项目

2.1、项目创建

打开Visual Studio,右侧选择创建新项目。

在这里插入图片描述

搜索框输入winform,选择windows窗体应用,填写对应的保存路径点击下一步,创建成功后如下图。

在这里插入图片描述
在这里插入图片描述

2.2、界面设置

在左侧工具箱分别拖拽出textBox、button、richTextBox等控件,用于接收用户输入的key和问题,同时将返回的数据进行渲染

在这里插入图片描述

2.3、获取版本

双击发送按钮,生成对应的点击事件,在里面获取用户输入的API Key以及你的魔法地址,因为你直接去调用它的这个接口是没用的,需要使用你指定的URL和回避设置初始化的新实例。

在这里插入图片描述

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls;
 string proxyAddress = $"http://{proxyIP}:{proxyPort}";
 WebProxy proxy = new WebProxy(proxyAddress, true);
 WebRequest.DefaultWebProxy = proxy;
 string apiEndpoint = "https://api.openai.com/v1/models";
 var  request = WebRequest.Create(apiEndpoint);
 request.Method = "GET";
 request.ContentType = "application/json";
 request.Headers.Add("Authorization", "Bearer " + API);

 var response = request.GetResponse();
 StreamReader streamReader = new StreamReader(response.GetResponseStream());
 string sJson = streamReader.ReadToEnd();

2.4、发送信息

携带参数调用ChatGPT接口,同时将结果响应到界面上的richTextBox控件

在这里插入图片描述

var content = new StringContent(JsonConvert.SerializeObject(data));
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                var response = await client.PostAsync("https://api.openai.com/v1/chat/completions", content);
                using (Stream responseStream = await response.Content.ReadAsStreamAsync())
                {
                    using (StreamReader streamReader = new StreamReader(responseStream))
                    {
                        while (!streamReader.EndOfStream)
                        {
                            string message = await streamReader.ReadLineAsync();
                            JObject jsonObject = JObject.Parse(message);
                            string contentValue = jsonObject["choices"][0]["message"]["content"].ToString();
                            contentValue = string.Join(Environment.NewLine, contentValue.Split('
'));
                            messageHistory.Add(contentValue);
                            return contentValue;
                        }
                    }
                }
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。