我做了第一个ChatGPT .net api聊天库

我做了第一个ChatGPT .net api聊天库 

最近这个ChatGPT很火啊,看了B站上很多视频,自己非常手痒,高低自己得整一个啊,但是让我很难受的是,翻遍了github前十页,竟然没有一个C#的ChatGPT项目,我好难受啊!那能怎么办?自己搞一个吧。
但是,等等,现在的ChatGPT项目基本都是网页逆向获取几个token,我不会啊,我都不知道哪些cookie是重要的,那我只能找一个其它语言的ChatGPT API项目,自己造(翻译)一个c#的ChatGPT API库了。

目录

  • ChatGPT是啥?
  • 准备
    • 第一步:注册OpenAI账号
  • 万事具备,直接撸代码
    • 1.网页获取所需token和cookie
    • 2.创建一个session用来表示一个会话
    • 3.创建机器人绑定一个会话
  • 效果截图(仅测试)
  • 源码(欢迎star)

ChatGPT是啥?

先了解GTP,摘自官网的一段话“A set of models that can understand and generate natural language”,其实,就是一个自然语言处理的模型。所以ChatGPT顾名思义就是基于GPT3的一个聊天AI。
但是想让他做苦力帮忙写代码的话所需要的其实不是这个模型,而是Codex这个模型,按照官网所说“Most capable Codex model. Particularly good at translating natural language to code. In addition to completing code, also supports inserting completions within code.”。真的是碉堡了!

准备

第一步:注册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<string, string>();Cookies = new Dictionary<string, string>();Proxies = new Dictionary<string, string>();
}

Session可以刷新自己的AccessToken和Session_token

public async Task RefreshSessionAsync()
{if (string.IsNullOrEmpty(Session_token)){throw new Exception("No tokens provided");}// Set cookiesCookies.Put("__Secure-next-auth.session-token", Session_token);Cookies.Put("cf_clearance", CfClearance);string cookiesString = GetCookiesString();Dictionary<string, string> map = new Dictionary<string, string>();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<Profile>(result, _jsonSerializerOptions)?.AccessToken;RefreshHeaders();}catch (Exception ex){Console.WriteLine($"Error {nameof(RefreshSessionAsync)}:{ex}");throw new Exception($"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", $"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();
}/// <summary>
/// 重置Conversation,开启一个新的会话
/// </summary>
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<Reply> 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);
}/// <summary>
/// 获取响应
/// </summary>
/// <param name="conversation"></param>
/// <returns></returns>
/// <exception cref="Exception">服务器返回非200</exception>
private async Task<Reply> GetChatResponseAsync(Conversation conversation)
{using (var client = new HttpClient()){var response = await OpenAISession.PostAsync(_conversation, JsonSerializer.Serialize(conversation, _jsonSerializerOptions));if (!response.IsSuccessStatusCode){throw new Exception($"Faild to request.StatusCode:{response.StatusCode}");}var msg = await response.Content.ReadAsStringAsync();var data = msg.Split("\n")?.ToList().Where(x => !string.IsNullOrEmpty(x) && !x.Contains("data: [DONE]")).LastOrDefault()?.Substring(5);var reply = JsonSerializer.Deserialize<Reply>(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());

源码(欢迎star)

GitHub - BruceQiu1996/NChatGPTRev: ChatGPT C# SDK. Lightweight package for interacting with ChatGPT's API by OpenAI. Uses reverse engineered official API. ChatGPT 聊天机器人 .net 版. 开箱即用.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5274.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作&#xff0c;不仅可以写一些基础的类似python、java、js的代码段&#xff0c;还可以做一定量的调优&#xff0c;于是就开始担忧起来&#xff0c;到哪天我的开发工作会不会被ChatGPT这个工具给取代了&#xff1f; 目录 1. ChatGPT…

从零开发基于chatGPT的社区交友系统 (前后端分离)丨环境配置 01

01 环境配置 项目介绍安装配置Node.js下载安装配置淘宝镜像 安装vue脚手架(vue-cli)可视化创建vue项目运行vue项目 总结 项目介绍 本项目是一个基于ChatGPT人工智能技术开发的社区社交类应用程序。我们致力于为用户提供高质量的社区社交体验&#xff0c;让您的社交生活更加丰富…

无法连接到 reCAPTCHA,请检查您的网络连接

无法连接到 reCAPTCHA,请检查您的网络连接 https://www.pianshen.com/article/42341046536/ 浏览器&#xff1a;Chrome 电脑版 无法连接到 reCAPTCHA,请检查您的网络连接 第一步 安装Header Editor 插件 点击右侧蓝色按钮 后 &#xff0c;如图所示就可以了 第二步 配置插…

使用Python调用ChatGPT

import openai # Set up the OpenAI API client openai.api_key "你的KEY" # Set up the model and prompt model_engine "ada" prompt input(请输入字符串&#xff1a;) # Generate a response completion openai.Completion.create( enginemodel_eng…

ChatGPT 开源替代品 - Open Assistant 使用说明

文章目录 概述注册使用Chat 概述 Open Assistant 机器学习模型是由一家德国非营利组织 LAION 运营。 OpenAssistant 项目开始于 2022 年 12 月, Open Assistant 的目标是创建一个和 ChatGPT 具有相同能力的开源人工智能助手。 官网&#xff1a; https://open-assistant.io/ …

ChatGPT开源模型3.5 API调用示例

调用开源api POSTMAN 这里我用的是postman&#xff0c;主要看请求头、body 、其它工具语言都是一致的 参数说明 地址 &#xff1a; https://api.openai.com/v1/chat/completions 请求方式 &#xff1a;post 请求头 &#xff1a; application/json Content-Type&#xff1a;ap…

ChatGPT开源平替来了,开箱即用!前OpenAI团队打造,GitHub刚发布就揽获800+星

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 丰色 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT的开源平替来了&#xff0c;源代码、模型权重和训练数据集全部公开。 它叫OpenChatKit&#xff0c;由前OpenAI研究员共同…

ChatGPT开源优秀项目推荐

作为一名开发者&#xff0c;总是希望能够找到一些优秀的开源项目来学习、使用和贡献。而随着人工智能技术的不断发展&#xff0c;ChatGPT作为一个开源的大型语言模型&#xff0c;已经成为了人们学习和开发自然语言处理应用的重要工具。在这篇技术博客中&#xff0c;我将向大家介…

复旦版 ChatGPT 正式开源,太强了!!

点击上方“Java基基”&#xff0c;选择“设为星标” 做积极的人&#xff0c;而不是积极废人&#xff01; 每天 14:00 更新文章&#xff0c;每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应…

【关于ChatGPT的30个问题】28、如何评价ChatGPT的安全性?/ By 禅与计算机程序设计艺术

28、如何评价ChatGPT的安全性? 目录 28、如何评价ChatGPT的安全性? ChatGPT安全性评价

openAi ChatGPT调用性能优化的一些小妙招

参考的demo:GitHub - ddiu8081/chatgpt-demo: A demo repo based on OpenAI API. 扭曲调教&#xff1a; openai提供的chat接口&#xff08;https://api.openai.com/v1/chat/completions&#xff09;由于其模型很大&#xff08;什么1750亿个参数啥的&#xff09;&#xff0c;单…

逆天了!ChatGPT回答癌症问题,准确性与美国国家癌症研究所标准答案不相上下...

编译丨王聪 编辑丨王多鱼 排版丨水成文 ChatGPT&#xff0c;是由人工智能研究实验室 OpenAI 于2022年11月30日发布的全新聊天机器人模型——人工智能技术驱动的自然语言处理工具。ChatGPT能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&…

脑洞|ChatGPT加持下,ChatOps将如何革新团队协作与运维管理?

要说近期科技圈 “顶流”&#xff0c;非 ChatGPT 莫属。 比起目前常见的语音助手与聊天 bot&#xff0c;这位机器人显得更有 “人味儿”&#xff0c;不仅能模拟人类的语气&#xff0c;跟你聊得有来有回&#xff0c;还能写剧本、编音乐、写代码。 说到聊天工具&#xff0c;就让…

ChatGPT 太强大 感觉无所不能

今天开发的项目需要在C# 中调用Matlab仿真模型 读取仿真数据&#xff0c;在百度查了大半天还是没搞定&#xff0c;试着问问ChatGPT&#xff0c;结果给的方法还真好使&#xff0c;有着怎样的小伙伴可以借鉴一下。 废话不多说直接贴代码&#xff1a; ChatGPT体验连接&#xff08…

设计界 ChatGPT ?有哪些强大功能? #Uizard Autodesigner ,

每一个使用过 ChatGPT 的人大概都会被这一强大的工具所折服&#xff0c;写代码、写论文、写情书......无所不能。 除了 AI 生成文字&#xff0c;设计界的 ChatGPT 也有强大的生成功能。 比如 Uizard 最新推出的 AI 设计功能—— Autodesigner 。 Uizard Autodesigner Autodesi…

向AI提问,这个新职业火了

将深燃设为“星标⭐” 第一时间收到文章更新 深燃&#xff08;shenrancaijing&#xff09;原创 作者 | 唐亚华 编辑 | 黎明 最近几个月&#xff0c;AI火爆空前&#xff0c;甚至催生了一个新职业&#xff0c;AI提示词工程师&#xff08;Prompt Engineer&#xff09;。 这个职业最…

AI提问师,这个新职业能火嘛

深燃&#xff08;shenrancaijing&#xff09;原创 作者 | 唐亚华 编辑 | 黎明 最近几个月&#xff0c;AI火爆空前&#xff0c;甚至催生了一个新职业&#xff0c;AI提示词工程师&#xff08;Prompt Engineer&#xff09;。 这个职业最早出现在美国求职网站Indeed上&#xff0c…

10个可以实现高效工作与在线赚钱的 AI 工具网站

自 2020 年以来&#xff0c;内容开发领域已经感受到人工智能工具的存在。 目前&#xff0c;营销人员和内容创作者正在利用这些工具来加快他们的工作流程。 如果您拥有最流行的 AI 工具之一&#xff0c;例如 CopyAI、Jasper AI 或 Content at Scale&#xff0c;您可能正在考虑…

GPT-4的前世、今生和未来!

作者 | 王思若 编辑 | 夕小瑶的卖萌屋 点击下方卡片&#xff0c;关注“自动驾驶之心”公众号 ADAS巨卷干货&#xff0c;即可获取 前言 诚然&#xff0c;从关系数据库到互联网信息检索&#xff0c;每一次知识表示和调用方式的跃迁都会在科技史引起一场巨大的技术变革。当ChatGP…

Auto-GPT的5大用例:建网站、当客服、数据分析......

Auto-GPT仅用了30多天的时间在github就突破了10万颗星&#xff0c;成为一款风靡全球的开源程序。Auto-GPT帮助ChatGPT突破了AI的界限&#xff0c;充当其“四肢”使得跨业务流程、平台实现超级自动化成为了可能。 由于Auto-GPT调用的是GPT-3.5或GPT-4的API&#xff0c;在代码开…