4

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

 1 year ago
source link: https://www.cnblogs.com/weskynet/p/16987108.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

官网文档地址:

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

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

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

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

1、新建一个webapi服务程序

1995789-20221216125137567-2107483168.png

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

1995789-20221216125200228-161164819.png

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

1995789-20221216125305992-1223881287.png

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

1995789-20221216125350813-1382019845.png

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

1995789-20221216125430300-1013090249.png

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

1995789-20221216125522609-1577628635.png

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

1995789-20221216125609571-38898817.png

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

1995789-20221216125740951-2103442773.png

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

1995789-20221216125944609-1673709260.png

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

1995789-20221216130100793-920718357.png

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

1995789-20221216130245431-175051253.png

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

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

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

1995789-20221216130938193-531789204.jpg

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK