首页 > 其他分享 >使用.NET开发搭建OpenAI模型的中间服务端

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

时间:2022-12-16 13:22:06浏览次数:40  
标签:webapi 微信 机器人 OpenAI 聊天 NET 服务端 搭建

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

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

官网文档地址:

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

 

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

1、新建一个webapi服务程序

 

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

 

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

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

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

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

 

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

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

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

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

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

 

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

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

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

 

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

 

标签:webapi,微信,机器人,OpenAI,聊天,NET,服务端,搭建
From: https://www.cnblogs.com/weskynet/p/16987108.html

相关文章

  • 【windows】服务端开启 winrm服务
    1.管理员权限打开powershell2.打开winrm服务查看winrmservice的运行状态,默认情况没有开启,执行命令为空代表没有启动.winrmenumeratewinrm/config/listener......
  • log4net参考链接-全是链接
    ​​https://logging.apache.org/log4net/release/features.html​​​​https://longsheng.org/post/3466.html​​​​https://developer.aliyun.com/article/61899​​​......
  • .net 方法内容缓存简化
    调用publicstringGetNodeName(stringnodeNum){Func<string>func=()=>{returndb.FirstOrDefault<......
  • VS2022生成控制台引用程序,.net应用导出成exe文件,发部成独立文件的详细图解
     使用vs自带的发布功能就行右键选择发布  选择文件夹模式进行操作   继续选择文件夹操作  路径自己设置,不要怕忘记了,外面可以直接点路劲找到文件夹 ......
  • netstat命令输出详解
    netstat命令输出详解1.列出所有的TCP和UDP端口2.命令输出详解Proto:协议名(tcp协议还是udp协议)recv-Q:网络接收队列,send-Q:网路发送队列a.recv-Q:网络接收队......
  • .NET 7 RC1 正式发布
    从年初2月份发布第一个预览版,经历7个预览版后,Microsoft西雅图时间9月14日发布了.NET7RC1:​​https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-1/​​......
  • 记一次 .NET 某工控MES程序 崩溃分析
    一:背景1.讲故事前几天有位朋友找到我,说他的程序出现了偶发性崩溃,已经抓到了dump文件,Windows事件日志显示的崩溃点在clr.dll中,让我帮忙看下是怎么回事,那到底怎么回事呢?......
  • 强化学习 学习资料汇总强化学习:Q-learning与DQN(Deep Q Network)
    python机器学习四(强化学习)DQN算法流程​​https://www.jianshu.com/p/42507aa63b05/https://www.jianshu.com/p/42507aa63b05/​​基于深度强化学习的智能体系结构参数调......
  • 【云原生 | Kubernetes篇】自建高可用k8s集群搭建
    文末有惊喜文章目录​​自建高可用k8s集群搭建​​​​一、所有节点基础环境​​​​1、环境准备与内核升级​​​​2、安装Docker​​​​二、PKI​​​​三、证书工具准备......
  • Kubernetes(k8s) kubectl rollout resume常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......