基于C#制作一个ChatGPT桌面助手,在工作或者学习时提升自己的效率,工欲善其事,必先利其器。
- 一、前言
- 1.1、什么是ChatGPT
- 1.2、ChatGPT官网及key申请
- 二、后台项目
- 2.1、项目创建
- 2.2、界面设置
- 2.3、获取版本
- 2.4、发送信息
一、前言
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('\n'));
messageHistory.Add(contentValue);
return contentValue;
}
}
}