winform快速开发(用winform开发ChatGPT对话应用)
用winform开发ChatGPT对话应用
最近ChatGPT非常火热 ,本着有热闹就凑的心理 ,我也上手玩了一把 。不玩不知道 ,玩了吓一跳 ,这家伙的火 ,是自己把自己点燃的 。不客气的说 ,OpenAI给人类重新创造了一个神 ,上帝的无所不能是在人类的想象中 ,而ChatGPT的无所不能是在人类的眼前耍大刀;
闲话不扯 ,进入正题,今天我尝试用C#开发一个对话应用 ,让我们能跳过网页验证 ,跳过科学上网,直接与AI对话。本着一贯偷懒的态度 ,来到CSDN来抄袭一把 ,查到用C#开发的示例非常少,而且对于我这总代码水平复现他们操作也相对困难 。求助于ChatGPT ,可他给出的代码一直跑不起来 ,我把代码放在这里 ,有哪位大神能看出那里有问题 ,帮我指出来 。 using System; using System.Net.Http; using System.Text; using System.Windows.Forms; using Newtonsoft.Json; namespace chatGTP对话应用 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void btnSubmit_Click(object sender, EventArgs e) { string input = txtInput.Text; string response = await GetResponseFromChatGPT(input); txtResponse.Text = response; } private async System.Threading.Tasks.Task<string> GetResponseFromChatGPT(string input) { using (var client = new HttpClient()) { var request = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri("https://api.openai.com/v1/engines/text-davinci-002/jobs"), Content = new StringContent("{\"prompt\": \"" + input + "\", \"max_tokens\":100}", Encoding.UTF8, "application/json") }; request.Headers.Add("Authorization", "Bearer <API-KEY>"); var response = await client.SendAsync(request); var result = await response.Content.ReadAsStringAsync(); dynamic data = JsonConvert.DeserializeObject(result); return data.choices[0].text; } } } }这段代码总是报API-KEY错误 ,JSON格式无法解析 ,模块接口错误;昨天完胜测试了很久都没有通过 ,可能AI大神对比较新的需求跟我们一样也需要经过一段时间的消化;
虽然以上代码无法跑起来 ,但在解决这个问题的过程中参考的很多其他博友的解决思路;重要的思路之一就是调用OPENAI的API 。有了这个思路就开干 ,建立winform项目后,直接在Nuget中搜索 ,果然找到OPENAI 。在这里哦 ,贴心吧!
把这个API安装到项目中后,接下来就是要看怎么用了?这是一个比较犯愁的地方 ,因为我没有在CSDN中找到可参考的;就只能找官方文档了 ,你知道的,凭我的英文水平 ,天然是对官方文档有有抵触情绪的;不过还好 ,内容不是很多 ,并且提供的用法和解释也十分清楚 ,这里我把官方文档的链接放在这里 ,方便兄弟们查看:openai说明文档
有了这些鸟语的支持 ,那进度就快很多了;首先是跑起来了 ,我用的这段代码: var result = await api.Completions.GetCompletion("One Two Three One Two");能跑 ,也能获取回应 ,但是内容不全,而且只有几个字 ,这显然不是AI大神的风格 。本着有错就一定是我的错的原则 ,以及之前代码中关于异步方法的浅薄理解,我果断选择下面这段代码:
await api.Completions.StreamCompletionAsync( new CompletionRequest("My name is Roger and I am a principal software engineer at Salesforce. This is my resume:", Model.DavinciText, 200, 0.5, presencePenalty: 0.1, frequencyPenalty: 0.1), res => ResumeTextbox.Text += res.ToString());当然这样选择还有一个原因 ,这段代码的参数比较全 ,如果运行效果不理想,我可以对这些参数进行调整;经过这样的修改和参数调整后 ,效果跟在网页中AI大神的表现就差不多了;接下来我把完成的代码贴在这里 ,楷了大家这么多年的油 ,今天也算是还一笔这么多年欠下的一份人情了;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Http; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Newtonsoft.Json; using OpenAI_API; using OpenAI_API.Completions; using OpenAI_API.Embedding; using OpenAI_API.Models; namespace chatGTP对话应用 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private async void btnSubmit_Click(object sender, EventArgs e) { var api = new OpenAI_API.OpenAIAPI("你的API密钥"); await api.Completions.StreamCompletionAsync( new CompletionRequest(txtQuestion.Text, Model.DavinciText, 2000, 1, presencePenalty: 0.1, frequencyPenalty: 0.1), res => txtAnswer.Text += res.ToString()); textBox1.Text = Model.DavinciText.ModelID; } private void button1_Click(object sender, EventArgs e) { txtQuestion.Text = string.Empty; txtAnswer.Text = string.Empty; textBox1.Text = string.Empty; } } }好了 ,展示一下效果:
下面展示一下问答测试和翻译功能:
chatgtp问答测试和翻译测试
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!