范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

开源利用。NET开发第一个ChatGPT聊天系统

  最近ChatGPT很火,借此机会给大家推荐一个利用C#开发的开源的ChatGPT聊天系统,话不多说,直接上主题。  准备第一步:注册OpenAI账号
  因为对大陆以及中国香港地区不开放,所以我们需要小小的科学一下。
  来一个我就是参照着申请账号的园子的文章:
  https://www.cnblogs.com/chatgpt/p/how-to-register-chatgpt-in-china.html
  当然手机那里可以淘宝找,几块钱就能帮忙注册手机,账号里面默认还有18美元余额。
  注意点:如果搭建了科学还是提示不对你的国家提供服务的话,尝试清空浏览器缓存或者打开浏览器的无痕窗口。Chrome默认在右上角三个点打开就能找到"打开新的无痕式窗口"。 万事具备,直接撸代码1.网页获取所需token和cookie
  我们需要三个东西:UserAgent,CfClearance,Session_token
  我们需要先打开ChatGPT官方网站:https://chat.openai.com/chat 然后按下F12打开浏览器的开发者模式
  UserAgent在网络里(只需要复制UserAgent:后面的值):
  CfClearance和Session_token在应用程序->cookie里面
  2.创建一个session用来表示一个会话public OpenAISession(string session_token,string cfClearance,string userAgent) {     Session_token = session_token;     CfClearance = cfClearance;     UserAgent = userAgent;     Headers = new Dictionary();     Cookies = new Dictionary();     Proxies = new Dictionary(); }
  Session可以刷新自己的AccessToken和Session_token public async Task RefreshSessionAsync() {     if (string.IsNullOrEmpty(Session_token))     {         throw new Exception("No tokens provided");     }      // Set cookies     Cookies.Put("__Secure-next-auth.session-token", Session_token);     Cookies.Put("cf_clearance", CfClearance);     string cookiesString = GetCookiesString();     Dictionary map = new Dictionary();     Headers.Put("User-Agent", UserAgent);     Headers.Put("cookie", cookiesString);     Headers.Put("Cookie", cookiesString);      var response = await GetAsync("https://chat.openai.com/api/auth/session");     if (!response.IsSuccessStatusCode)     {         Console.WriteLine("err code: " + response.StatusCode);         Console.WriteLine("cf_clearance: " + CfClearance);         Console.WriteLine("token: " + Session_token);         Console.WriteLine("userAgent: " + UserAgent);         Console.WriteLine("请检查以上参数是否正确,是否过期。");          throw new Exception("无法获取token!请重试");     }      try     {         string name = "__Secure-next-auth.session-token=";         var cookies = response.Headers.GetValues("Set-Cookie");         var stoken = cookies.FirstOrDefault(x => x.StartsWith(name));         Session_token = stoken == null ? Session_token : stoken.Substring(name.Length, stoken.IndexOf(";") - name.Length);         Cookies.Put("__Secure-next-auth.session-token", Session_token);         var result = await response.Content.ReadAsStringAsync();         AccessToken = JsonSerializer.Deserialize(result, _jsonSerializerOptions)?.AccessToken;         RefreshHeaders();     }     catch (Exception ex)     {         Console.WriteLine(#34;Error {nameof(RefreshSessionAsync)}:{ex}");         throw new Exception(#34;Error {nameof(RefreshSessionAsync)}", ex);     } }
  获取到的最新的AccessToken更新到header里,Session_token更新到cookie里 private void RefreshHeaders() {     Headers.Put("Host", "chat.openai.com");     Headers.Put("Accept", "text/event-stream");     Headers.Put("Authorization", #34;Bearer {AccessToken}");     Headers.Put("User-Agent", UserAgent);     Headers.Put("X-Openai-Assistant-App-Id", string.Empty);     Headers.Put("Connection", "close");     Headers.Put("Accept-Language", "en-US,en;q=0.9");     Headers.Put("Referer", "https://chat.openai.com/chat"); }  string name = "__Secure-next-auth.session-token="; var cookies = response.Headers.GetValues("Set-Cookie"); var stoken = cookies.FirstOrDefault(x => x.StartsWith(name)); Session_token = stoken == null ? Session_token : stoken.Substring(name.Length, stoken.IndexOf(";") - name.Length); Cookies.Put("__Secure-next-auth.session-token", Session_token); 3.创建机器人绑定一个会话public Chatbot(OpenAISession openAISession) {     OpenAISession = openAISession;     ResetConversation(); }  ///  /// 重置Conversation,开启一个新的会话 ///  public void ResetConversation()  {     _conversationId = null;     _parentMessageId = Guid.NewGuid().ToString(); }
  如何保持上下文聊天以及多用户隔离?
  上下文聊天已经内置,会自动与机器人的回复进行关联,当需要重新开启一个对话的时候,可以调用ResetConversation,这样对应的机器人对象发过去就是开启了一个新的对话。
  如何多用户隔离?比如联合微信机器人使用,可以将一个人或者一个群对应一个Chatbot对象,并且利用id与机器人做关联。
  当然这个_clientID需要使用者做唯一性管理 //可以作为隔离不同客户端聊天上下文的凭据,即一个机器人绑定一个客户端 //客户端编号可以是,微信id,qq id,飞书id,亦或者自己开发的软件的用户id private readonly string _clientID;   public Chatbot(OpenAISession openAISession, string clientID) {     OpenAISession = openAISession;     _clientID = clientID == null ? Guid.NewGuid().ToString() : clientID;     ResetConversation(); }
  最后构造对话对象,发送到对应api public async Task GetChatReplyAsync(string prompt) {     var conversation = new Conversation();     conversation.Conversation_id = _conversationId;     conversation.Parent_message_id = _parentMessageId;     conversation.Messages = new Message[]     {         new Message()         {             Content = new Content             {                 Parts = new string []{ prompt }             }         }     };      return await GetChatResponseAsync(conversation); }  ///  /// 获取响应 ///  ///  ///  /// 服务器返回非200 private async Task GetChatResponseAsync(Conversation conversation) {     using (var client = new HttpClient())     {         var response = await OpenAISession.PostAsync(_conversation, JsonSerializer.Serialize(conversation, _jsonSerializerOptions));         if (!response.IsSuccessStatusCode)         {             throw new Exception(#34;Faild to request.StatusCode:{response.StatusCode}");         }         var msg = await response.Content.ReadAsStringAsync();         var data = msg.Split(" ")?.ToList().Where(x => !string.IsNullOrEmpty(x) && !x.Contains("data: [DONE]")).LastOrDefault()?.Substring(5);         var reply = JsonSerializer.Deserialize(data, _jsonSerializerOptions);         _conversationId = reply.Conversation_id;          return reply;     } } 效果截图(仅测试)OpenAISession openAIOptions = new OpenAISession(Session_token, CfClearance, UserAgent); await openAIOptions.RefreshSessionAsync(); Chatbot chatbot = new Chatbot(openAIOptions); Console.WriteLine("用c++写个冒泡查询"); var reply = await chatbot.GetChatReplyAsync("用c++写个冒泡查询"); Console.WriteLine(reply.Message.Content.Parts.FirstOrDefault());
  获取源码:关注我并私信回复:"ChatGPT聊天"。
  欢迎点赞+转发+关注!大家的支持是我分享最大的动力!!!

浙江一镇喜迎拆迁,被数亿资金砸中,村民将苦尽甘来身价上涨浙江是一座独具特色的省区,本地的文化内涵浓厚,有着丝绸之府,鱼米乡的美誉,浙江是一座经典的江南风情,有着着许多的游玩景点,这种旅游景点的发生,让浙江的影响力也提升了许多,浙江最著名15月房车销量领先随着人们的生活水平的提高,对于生活品质的追求也在提高,相对应的追求旅游舒适化的感官也在提升。应运而生的房车市场也收到了消费者的欢迎。说走就走的旅行这句话可能是很多人的心理写照,前期别再用物质奖励孩子了我们平时在商场的时候都会看到有很多妈妈带着孩子在商场购物,买玩具买好吃的好玩的,但是也会听到很多这样的言论妈妈,我期中考试考了第一名,你答应说给我买玩具的好的妈妈说到做到,要是你期实用指南如何提升孩子的模仿能力?1模仿是什么?很重要吗?模仿其实是一种本能的倾向,是天生便会的能力。通过模仿,会学习到新的原来不会的行为动作,也会使原来有的行为更加巩固或改变有时也能将潜在的未表现的行为表现出来。寻访旅顺盘龙山堡垒战迹碑前天探寻盘龙山堡垒未果,怏怏而归,心里总有一种割舍不下的情怀,今天也不顾雨后山中道路泥泞,继续出发。导航的线路还是和前天一样,但心中的目标似乎愈发清晰起来。路过这座水库,上次还是干广西那良古镇那良古镇,位于广西壮族自治区十万大山南麓的防港城市,与越南山水相连,建成于清顺治年间,拥有370多年的悠久历史。鸟瞰那良古镇那良,当地方言意为肥沃的田地。那良古镇地形独特,丘陵起伏我在千灯湖的荷塘边千灯湖是很久没去了,距离远,还有一些故事停留在那里。其实,白天和夜晚的照片都有,何必大费周章从嘉禾望岗出发呢?究竟该怎样去述说这个故事,我坐在荷塘边想着。微风掠过,一片落叶缓缓落下周口店遗址6月26日27日临时闭馆闭园周口店遗址临时闭馆闭园的公告尊敬的各位观众根据上级有关要求,6月26日午后至27日房山区将迎来一次区域性暴雨过程,局地将出现大暴雨,为保证广大观众的生命安全,周口店遗址博物馆周口店如诗如画颐和园万寿山西翼景区之前山西翼景点(一)(一)云松巢湖光山色共一楼的东侧,在两条上山甬道夹持中,有一个山石堆砌的平台,平台上是一个垂花门,门前有高约五米的云步踏垛,大门终日紧闭,四周松林茂密。院墙依山扶摇而上,山墙上镶嵌米兰回国的航班有哪些?米兰回国机场流程是什么关注航旅在线了解更多省钱小妙招。米兰是被评为全球国际活动常住地,拥有大量文化艺术的机构,还有很多著名学府,很多人都在当地上学,学习服装设计,在米兰工作,Z近两年受到疫情影响,很多同牡丹花丛里的蒙古包,有着怎样的来历?唯有牡丹真国色,花开时节动京城。五一假期正是牡丹花开时在圆明三园内种植牡丹面积最大花开最盛的当属长春园的含经堂赏花之际花丛间的蒙古包同样惹人关注仿佛让你置身草原心胸也开阔起来然而此
名人效应!乔布斯Apple1被拍卖出百万天价,其价值到底在哪?美国时间8月18日,苹果公司创始人乔布斯曾经拥有的Apple1原型机正式拍卖成交,最终价格为67。71万美元,折合人民币高达461万元,作为苹果第一代原型机,有其特殊的历史价值,那你坐过主驾无人出租车吗?逐渐突破雨天夜间等多种场景,自动驾驶全无人商业化试点开放你坐过主驾无人出租车吗?小马智行出租车在路口等待红灯,安全员端屏幕实时显示路况。百度自动驾驶展厅陈列的6代自动驾驶车辆。夜间61岁郎平带着丈夫罕见露面,与惠若琪聚餐,网友女排后继有人前段时间,前中国女排主教练郎平在女排运动员张常宁婚礼前夕回到祖国,消息一时引起了轰动。之后她公开露面,参加了电竞活动就再无音讯,也并没有如网友所说的那样,专为张常宁而来。正当网友们披哥2初舞台年纪大的宝刀未老,年纪轻的却是油腻满满?披荆斩棘的哥哥第二季初舞台落下帷幕,32位哥哥轮番上阵,最终任贤齐潘玮柏郑钧荣登个人喜爱值的前三名。而本次的披哥也夹杂着不少争议油腻大赏夹带私货倚老卖老究竟是情怀满满还是油腻满满,47岁牛莉和老公秀恩爱,两人同框如父女,网友不愧是双冠军牛莉曾晒出她和老公的照片,引起很多网友围观,牛莉趁老公睡着,嘟起嘴巴依偎在一起,感情真的很甜蜜,不少细心的网友发现,虽然已经47的她,但是保养的很好,脸上并没有什么岁月的痕迹,而他李立群最新回应!不会再来内地拍戏,反复强调立场近日,李立群在社交平台上发布了最新动态,再次回应了之前的采访言论,引起了不少网友的关注。在视频中,李立群身穿一件蓝白条纹Polo衫,带着一副棕色镜框的眼镜,头发也已经花白了,看起来仅播二集,拿下全国收视第二,侯勇一出手,就给央视带来王炸又一根难啃的硬骨头,被央视啃下来了工业大剧。在此之前,一部人世间,一举拿下年度国剧的美誉,在北京卫视播放第三轮,依然能打入收视第七,年代大剧彻底火了。一部大山的女儿,豆瓣9。2分,油腻大叔?44岁陆毅发福近照罕见曝光!脖子消失,脸圆了好几圈在普遍目光注视下明星们大多是光鲜亮丽的,而且拥有着让大家都非常羡慕的颜值和身材,尤其是一些比较厉害的明星,特别是接下来提到这位男明星想必大家都很熟悉,那就是陆毅,近年他一直都没有出王为念我因划算娶了第一任妻子,跟小香玉离婚后才明白她不容易文丨柠一编辑丨娱阿姨在娱乐圈,很多人都是跨行发展。唱歌唱的好的可以去演戏,还可以去主持,做导演或者制片,满身才华无处释放。王为念就是这样一个人。他本来是戏曲演员,结果跨行做了电影演演完三国演水浒的10位演员,脱胎换骨成经典,选角真恰当1994年5月,三国演义还未上映,央视就开启了水浒传项目,决定趁热打铁,把四大名著都搬上荧幕。导演选择张绍林,他既是三国的分组导演,负责南征北战这段,也是一位福将,导演的作品大多都看了上错花轿嫁对郎两版演员的对比后!得要说一句勇气可嘉小时候这部剧真的天天追,看到要翻拍的演员我沉默了。老版杜冰雁看上去妥妥的就是大家闺秀,聪颖贤惠。新版的这是啥?很抱歉,没看出一点气质。老版李玉湖灵动可爱,敢爱敢恨,但不傻。这新版的