使用.NET开发搭建OpenAI模型的中间服务端

时间:2022-12-16 14:05:30

前言:前不久微信上大家玩ChatGPT聊天机器人玩的不亦乐乎;不过随着ChatGPT被封杀,所以用微信聊天机器人有可能导致封号的风险。那如果自己不想每次都去OpenAI官网上进行对话【PS:官网上面聊天对话有局限性,例如回复的内容比较长,AI回答是一个一个字写的,就可能导致超过一定时间以后,变成请求超时之类的异常;而通过API直接访问,可以避免这个情况发生】,想要自己搭建一个服务来本地调用,是不是也可以?

于是,找了官方的一些资料,就动手咱们自己搭建一个服务端,方便给别人调用来提供服务。

官网文档地址:

https://beta.openai.com/docs/introduction

如果不知道怎么注册OpenAI账号,也可以参考我的上一篇文章,里面有一个申请英国手机号码的方式,地址:

https://www.cnblogs.com/weskynet/p/16973956.html

 

好了,接下来开始我们自己的表演。

1、新建一个webapi服务程序

使用.NET开发搭建OpenAI模型的中间服务端

 

2、我选择的是.NET6,大家也可以自己选择自己喜欢的环境,问题都不大。为了方便阅读,我选择了使用控制器和启用OpenAPI支持(swagger)。

使用.NET开发搭建OpenAI模型的中间服务端

 

3、创建好以后,在program里面,添加HttpClient服务的注册,用来访问openai的api会用到。

使用.NET开发搭建OpenAI模型的中间服务端

4、新建一个控制器,就叫 RobotController,用来提供webapi接口做测试使用。

使用.NET开发搭建OpenAI模型的中间服务端

5、在新建的控制器里面,做点最初的准备,例如对IHttpClientFactory注入进来备用。

使用.NET开发搭建OpenAI模型的中间服务端

6、官网上有一些资料,例如text-davinci-003模型的最大tokens是4000,所以后面有个请求参数的部分,不能超过这个数。

使用.NET开发搭建OpenAI模型的中间服务端

 

7、这个是一个参数建议,把temperature设为0.9f,把top_p设为1. 按照文档的解释,temperature的值会影响回答的内容的一些特性,例如可能设计不友好的回复的内容的比重等。

使用.NET开发搭建OpenAI模型的中间服务端

8、我们做个通用的请求实体类,用来当作访问我们提供的webapi接口所需的参数信息。三个信息比较重要的,当作参数,可以进行微调,例如文档建议的temp为0.9f,max tokens最大为4000,我们可以设为其他的值进行微调,等等。而message字段就是我们本身的请求参数,用来和机器人对话使用的。

使用.NET开发搭建OpenAI模型的中间服务端

9、然后是返回体,这个格式是解析openai的返回值进行配置的,大家也可以随意参考,或者不做解析直接返回字符串也是OK的,反正是一串Json数据,问题不大。

使用.NET开发搭建OpenAI模型的中间服务端

10、然后对刚才的Call方法做个完善,大体内容如下所示。其中,openaiKey是我个人的key,所以为了隐私泄露,我稍微打了马赛克,希望理解。其他代码内容,可以直接看截图代码。

使用.NET开发搭建OpenAI模型的中间服务端

11、最后,启动服务程序,进入到swagger里面进行调用接口。例如,message字段我传的 “帮我写一个C#版本的Hello World”,得到的返回值体里面,位于choises[]数组的第一条数据,text就是机器人回复的内容。

使用.NET开发搭建OpenAI模型的中间服务端

 

防盗链专用:本文博客原始链接为:https://www.cnblogs.com/weskynet/p/16987108.html

12、以上只是一个简单的写法,大家可以根据自己需要进行拓展或者改造。比如说,用已有的key和规律,写个其他语言的聊天服务,或者写个聊天客户端进行访问,等等,一切皆有可能。或者微信被封杀了,那就可以尝试自己搭建一个服务来间接继续实现某些APP的智能聊天服务等等。

如果不想自己撸代码的,也可以在我个人微信公众号【Dotnet Dancer】后台回复【robot】,即可获取本篇博客的源码。或者扫以下二维码,也可进入公众号后台:

使用.NET开发搭建OpenAI模型的中间服务端

 

以上就是该文章的全部内容,如果觉得有帮助,欢迎点赞、转发或评论,谢谢大家,祝大家和机器人玩的愉快~