【.Net/C#之ChatGPT开发系列】一、开发准备及实现与ChatGPT的初次对话

前言

当下ChatGPT可谓是炙手可热的人工智能产品,它不仅可以与人类进行智能对话,还能够理解人类的想法和需求。涵盖了内容创作、营销、智能客服、教育、投资等诸多领域和场景,有很大的商业价值。

上周末有空闲,我花了点时间研究了ChatGPT聊天机器人。虽然之前也体验过,但没深入了解过。网上有很多一键搭建ChatGPT聊天机器人的教程,我也部署了几个相关的开源项目,感觉都很不错,功能也很完善。但作为一个程序员,我更想知道它的实现原理,所以我决定尝试开发自己的ChatGPT聊天机器人。

上网找了有关.Net与 ChatGPT开发的文章,发现很少,因此打算把我开发过程中的一些关键问题和解决方法分享出来,和大家一起学习,正好公众号没想好要发表的内容,就先以这个教程为主吧,也请大家关注一下。

👇

为了方便大家阅读,我尽量用保持代码简单、清晰、易懂(主要高深的我也不会0dc165441a183f9685f18ce2a1eae52b.png),具体会有多少章节,目前还没想好,我会根据自己的时间来边写边延伸。

开发准备

开发工具:Visual Studio 2022

开发技术:.Net core 7.0 、C# 8.0

开发框架:ASP.NET Core Web应用(模型-视图-控制器)

开始之前,你需要先申请一个ChatGPT API KEY(SK),也就是与ChatGPT通信的Authorization  Token。网上有很如何申请的教程,很简单,搞不懂可以公众号私信我。

API Key查看地址:

https://platform.openai.com/account/api-keys

2a16effc8f9115ba45ee327411e64e6a.png

涉及文档:

//ASP.NET Core Web应用开发文档:
https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/choose-web-ui?view=aspnetcore-7.0//ChatGPT API文档:
https://platform.openai.com/docs/introduction/overview//ChatGPT SDK文档
https://github.com/betalgo/openai/wiki

开始开发

一、 新建一个ASP.NET Core Web应用应用

为了方便大家查看,我会为每一个章节新建一个项目,第一章节项目命名为:ChatGPT.Demo1

349077174a2fe3a5f0f685769cd272a6.png

目录结构:

36807da1afa7d7d5415558fd50056f80.png

二、安装ChatGPT SDK

ChatGPT SDK官方只提供了Python库,其它语言的SDK为社区版本,.Net SDK官方推荐了三个:

e34b653281825fa0d54da4c5dbebeed6.png

这里我选择第一个 Betalgo.OpenAI,然后进行安装

Install-Package Betalgo.OpenAI

eff7071762e7a7b1c2da3f3c1d8eb435.png

三、开始编码

1、项目中找到Program.cs文件并打开,然后配置Betalgo.OpenAI服务,和设置Api Key。

using OpenAI.Extensions;builder.Services.AddOpenAIService(settings =>
{settings.ApiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
});

614b4a59113f7def9f08923a619c7a93.png

2、鼠标右键Controllers文件夹,添加一个名为ChatController的控制器,控制器的类型我们使用Api控制器。

2fa604816d54131c51f91ba9fec049e1.png

3、打开ChatController,引入命名空间:

using OpenAI.Interfaces;
using OpenAI.ObjectModels.RequestModels;

注入Service服务:

private readonly IOpenAIService _openAiService;
public ChatController(IOpenAIService openAiService)
{_openAiService = openAiService;
}

添加一个Action,然后调用ChatGT的/v1/chat/completions接口,并指定模型gpt-3.5-turbo来与我们对话:

[HttpGet]
public async Task Input()
{//访方法实现了ChatGT的/v1/chat/completions接口var completionResult = await _openAiService.ChatCompletion.CreateCompletion(new ChatCompletionCreateRequest{//聊天信息Messages = new List{ChatMessage.FromUser("你好!")},//指定模型Model = OpenAI.ObjectModels.Models.ChatGpt3_5Turbo,//设置Tokens数量限制MaxTokens = 50});if (!completionResult.Successful)return "请求失败";return $"ChatGPT:{completionResult.Choices.First().Message.Content}";
}

下面为大家附上ChatGPT提供的API和模型文档,大家可以先了解一下,后续章节我将进行详细讲解。

//ChatGTP API文档
https://platform.openai.com/docs/api-reference
//ChatGPT模型介绍
https://platform.openai.com/docs/models/overview

完整代码如下:

0f91bfcbe63fc177a74b4e499f032df5.png

在Input方法中,我们向ChatGPT发送一句问候,然后输出ChatGPT的回复内容。F5启动项目,在地址栏后追加api/chat路径访问Input方法,来看一下ChatGPT给我们的回复:

9e01a84c789548537e34a65ad55ff5ff.png

这样,我们就完成了与ChatGPT的第一次对话。

4、设计一个简单的web聊天界面

为了方便,我选择Mvc自带的bootstrap V5.1前端框架来实现。

项目中找到Views/Home/Index.cshtml文件并打开,然后把页面中的Html标签替换为下面的内容:

AI对话

div>

页面中我们加入了标题、内容显示框、消息输入框及发送按钮,效果如下:

4b68ccb92b06b19325523e8b0a9289e9.png

接下来,在页面的底部加入以下js代码:

我们对发送按钮绑定了一个点击事件,用于提交对话内容,通过定义一个XMLHttpRequest对象,来实现异步发送请求和接收响应,并采用POST方式提交,因此服务端需要做稍微调整,把ChatController中的Input方法由HttpGet改为HttpPost,并增加了一个从form表单中接收消息的message参数,传递给ChatGPT,如下图所示:

81d5b4565f263cebc849f6364f962c9f.png

我们运行项目看一下效果:

acac14bb89c2b3a1ea194a09a6b61764.png

此时还有一点小瑕疵,与ChatGPT的对话是有限制的,在发出消息至收到ChatGPT的回复期间内,我们是不可以再发起请求的,因此在消息发出后是需要锁定发送按钮的,太晚啦,就先到这吧,还有很多要改进的地方,一点点来,在这里先做个预告,接下来我将使用ChatGPT的流式响应及C#8.0中的异步流输出来提高服务端性能,采用SSE通信并实现打字机效果,请大家多多关注。

//源码地址
https://github.com/ynanech/ChatGPT.Demo

👇感谢阅读,点赞+分享+收藏+关注👇


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部