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

开源利用。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聊天"。
  欢迎点赞+转发+关注!大家的支持是我分享最大的动力!!!

鸟中大熊猫青头潜鸭亮相江西瑞昌湿地安家9月26日,江西省瑞昌市安定湖省级湿地公园,几只青头潜鸭雏鸟在水面上游弋嬉戏。魏东升摄青头潜鸭素有鸟中大熊猫之称,被列入世界自然保护联盟濒危物种红色名录极危物种。魏东升摄9月26日股权融资拥抱银发经济,养老产业将步入黄金发展期一弘福天数智养老完成百万级天使轮融资9月23日,综合养老服务商弘福天数智养老近日宣布完成百万级天使轮融资投资方暂未透露,本轮资金将重点围绕居家养老和政府监管服务两个方向,用于强化软甘肃省乡村产业发展推进会在武威召开王嘉毅出席并讲话全省乡村产业发展推进会在武威召开王嘉毅出席并讲话每日甘肃网武威讯(新甘肃甘肃日报记者金奉乾)全省乡村产业发展推进会议9月20日至21日在武威市召开。省委副书记王嘉毅出席会议并讲话。最新报告中国机器人产业按下加速键进一步巩固全球制造业主导地位中国日报网9月21日电机器人被誉为制造业皇冠顶端的明珠。近年来,中国各行业使用机器人的意愿持续提升,机器人产业发展按下加速键,安装量大幅提升,进一步巩固了中国在全球制造业的主导地位柬埔寨金边西港高速公路成立高速交警大队来源人民网国际频道原创稿人民网曼谷9月20日电(记者赵益普)9月20日上午,柬埔寨金边西港高速公路(金港高速)高速交警大队举办成立揭牌仪式。中国驻柬埔寨大使馆经济商务参赞邬国权和柬扬文明和合复兴,聚初心物联重构人类最大和最有用的进步,一定是大合作与大协作,而竞争和战争将会伴随着全球云计算数字贸易的盛行和数字区块链技术的日趋成熟,而成为和平的鲶鱼效应。随着生产力的发展,特别是互联网物联网人武陵源区举行旅游智库专家颁证仪式红网时刻张家界9月23日讯(武陵源区融媒体中心记者唐小花通讯员陈城)9月23日,武陵源区委书记张龚主持旅游智库专家颁证仪式,区委副书记,张管局党委副书记常务副局长谢贵湘,区委常委组天问一号火星探测最新研究成果发布我国科学家揭示火星浅表结构近日,我国科学家利用天问一号火星探测任务获得的科学数据,揭示了现今火星浅表精细结构和物性特征,为深入认识火星地质演化与环境气候变迁提供了重要依据。相关研究结果于北京时间9月26日晚河南省2城开通地铁,8城进入全国百强市,6县成为全国百强县河南省,地处我国中部地区,总面积为16。7万平方公里,在2021年的常住人口为9883万,仅次于广东和山东。在不少人的印象中,河南省是我国农业大省,对这个没错,然而近年来,河南省还每天晚饭喝点小酒,会咋样?医生提醒喝酒前,做好4件事喜事宴请,工作聚餐,朋友聚会都少不了酒这种暖场神器,在这些场合喜欢喝酒也就罢了,无非是与亲朋好友大醉一场。而有一些人虽然有酒瘾,每天晚上也会在吃饭时喝上一两白酒,但是家人却难以接受柳江双线特大桥部分桥墩现雏形来源柳州市重点项目建设办公室重大项目作为湘桂铁路柳州枢纽扩能改造项目重要控制工程的柳江双线特大桥,于2021年11月开工建设。大桥全长1688米,共有38个桥墩(其中水中墩6个)2
双点校园换皮版双点医院,但仍旧很有趣我相信没有一个模拟经营爱好者没有尝试过双点医院这款游戏,一个本身就容易让人沉迷的模拟经营游戏配上无厘头又搞笑的设定,轻松上手的同时不知不觉时间就此流逝。不过坦白来讲双点医院在后期玩LGD化身终极水鬼!抗住压力击败RNG!后者将与EDG相遇相信很多小伙伴们都知道,在LPL的常规赛赛季末一直都会上演各种剧情,爆冷的剧情经常都会有,因为每一场BO3甚至每个小场都会影响到名次和季后赛的名额,所以说LPL打到最后时刻才是精髓普尔交易可能提前!曝魔术愿送出当家后卫,3换1方案令勇士心动最近一篇关于乔丹普尔的报道吸引整大量球迷关注,原因是一位不愿意透露姓名的球队高管向媒体透露,如果勇士在明年休赛期之前没能开出一份令普尔满意的续约报价,导致后者成为一名受限制的自由球大爆冷!国乒劲敌全军覆没,单局011惨败,混双四强名单诞生乒乓球欧锦赛激战正酣,北京时间8月15日,混合双打的四强名单已全部诞生!国乒劲敌东道主德国队惨遭爆冷,目前已经全军覆没,两对组合居然连八强都没打进,其中邱党米特汉姆更是惨遭110吊蔡斌确定留任女排,郎平时代三大强将同时归队,女排能拿冠军?中国男排夺冠后,非常激励中国女排,目前中国女排是处于低谷期,需要不断地调整,才能找回当初的状态,重返巅峰!目前中国女排是在休赛阶段,接下来9月中旬将出发打世锦赛,这对于中国女排来说恭喜易建联!35岁的中国篮坛一哥有望走马上任,杜锋终于放心了北京时间8月13日,中国男篮也在欧洲拉练期间,以7789输给了阿拉巴马大学,周琦并未出场,之前的亚洲杯最被球迷诟病的胡明轩依然表现不佳,贡献了7次失误,占了全队失误的三分之一。本次中国男排夺得亚洲杯冠军!盘点一下男排今年的比赛先恭喜这支年轻的球队拿到了第一个冠军亚洲杯冠军合照现在的这支男排国家队,戴卿尧91年,张秉龙94年,其他的都是95后。这次亚洲杯的最佳主攻,MVP张景胤是99年,最佳副攻张哲嘉95男排亚洲杯中国队3比0击败日本队夺冠8月14日,中国队球员张景胤(右一)在比赛中扣球。新华社记者王腾摄当日,在泰国佛统举行的2022年男排亚洲杯决赛中,中国男排以3比0击败日本队,时隔十年再度夺得亚洲杯冠军。8月14又是一场红毯明争暗斗李宇春鞋子亮眼,艳压全场还看刘亦菲每年的微博之夜看似是个颁奖典礼,但实际上,明星们的心思却都在红毯上,因为在这里即使你不想也得被迫争奇斗艳,可以说这是一场明星之间明争暗斗的比拼。2022年8月14日,微博电影之夜如Nature世界上最大的冰原受到温水潮的威胁南极洲东部的冰块正在以惊人的速度变薄。来源Torsten红木盖蒂一项研究发现,最近几十年,西风正将温暖的海水吹向南极东部冰盖,并以惊人的速度使该地区的冰块变薄。科学家们说,这项发表跻身世界500强的比亚迪销量再创佳绩浅析新能源领头羊的成功之道转眼间2022年已过半,8月1日北京又开启了新一轮的小客车指标申请,身为一个摇号9年未果的老司机,我终于决定开始以家庭为单位排新能源指标。曾经作为越野玩家深信大排量自吸有着不可取代