在 ChatGPT 推出之前,一些 OpenAI 员工对该项目能否成功持怀疑态度,你对此有何看法?
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
在ChatGPT推出之前,一些OpenAI员工对该项目能否成功持怀疑态度。一些员工由于每天接触最先进的人工智能系统而变得麻木,认为建立在两年前的人工智能模型上的聊天机器人可能会显得无聊。OpenAI的总裁格雷格・布罗克曼曾在Twitter上说,该服务的用户已经达到200万。首席执行官山姆・奥特曼要求他删除这条推文,奥特曼担心对ChatGPT的过度炒作可能会引起监管部门的反弹,或者对未来的产品产生过高的期望,并告诉他,为如此快速的增长做广告是不明智的。瑞士银行巨头瑞银集团2月3日的一份报告显示,在人工智能聊天机器人ChatGPT推出仅两个月后,它在2023年1月末的月活用户已经突破了1亿,成为史上用户增长速度最快的消费级应用程序。根据Sensor Tower的数据,TikTok达到1亿用户用了9个月,Instagram则花了2年半的时间。
【内幕曝光:#ChatGPT火热度惊呆OpenAI# ,CEO担心过度炒作】在ChatGPT推出之前,一些OpenAI员工对该项目能否成功持怀疑态度。一些员工由于每天接触最先进的人工智能系统而变得麻木,认为建立在两年前的人工智能模型上的聊天机器人可能会显得无聊。OpenAI的总裁格雷格・布罗克曼曾在Twitter上说,该服务 ...全文我认为有些持怀疑态度是可以理解的,因为任何新技术都存在一定的风险,特别是对于OpenAI来说,它要在竞争激烈的AI领域中取得成功,不是一件容易的事情。
但我也相信,OpenAI的团队拥有专业的知识和技能,他们肯定可以成功实现ChatGPT的应用。
在 KubeGems 上部署 ChatGPT 飞书机器人
ChatGPT是由 OpenAI 开发的一个人工智能聊天机器人程序,于2022年11月一经推出,就凭借优秀的对话体验刷爆了全网,并获得地表最强 AI 聊天机器人的称号。目前ChatGPT有很多应用场景,不限于 、、、等等,当下甚至已经出现很多个人或公司开始基于 ChatGPT 开发出一些特定÷场景的应用例如 、等等。虽然 ChatGPT 目前存在一些 和 的问题,但和它的其它同行相比已远远领先。作为一个天然适合聊天的 AI 服务,本篇文章自然也将指导用户在 KubeGems 中部署 ChatGPT API 并将其接入到飞书机器人中为个人和企业快速提供简单的对话服务来体验 ChatGPT。
开始之前,我们先看下效果
注意:由于OpenAI 目前还没有开放api,同时它近期还接入了Cloudflare的防火墙,来阻止部分bot的调用,所以文中的时效性仅适合当前,不代表以后
但是由于Cloudflare防火墙限制,首先我们需要找到一个可以绕过防火墙的方法。在GitHub上我们找到了这个项目
GitHub - transitive-bullshit/chatgpt-api: Node.js client for the unofficial ChatGPT API.
它基于 puppeteer, 并模拟一个正常的用户登陆到 OpenAI, 然后在浏览器中嵌入脚本来发起对话请求;
Puppeteer 是一个 Node.js 库,它提供了一组用于控制 Chrome 浏览器的 API。你可以使用 Puppeteer 自动化浏览器操作,如页面导航、表单提交、JavaScript 执行等
但是这个项目有些限制,它只能一个一个账号启动一个实例,不支持账号池,所我们还需要自己完成账号池的功能;
既然有了账号池,我们还需要完成对话和账号的关联保持,例如:id 为 xxx-xxx 的的会话发生在账号 account1上,如果与这个会话的消息发到了 account2的实例上,那就会发生上下文错落的情况;
此外,还需要尽可能让账号池的账号关联的会话,尽可能保持均衡,避免某个实例的请求过多导致OpenAI限流。
由此,打造自己个人或者企业的ChatGPT 飞书机器人,我们需要对 chatgpt-api 这个工程进行以下的改造.
- 将 chatgpt-api 改造成支持容器化,
- ,我们决定基于kubernetes statefulset来实现,让每个pod 实例拥有独立的 OpenAI 账号
- 处理与逻辑
- 提供业务层代理来保持具体 和Pod 实例之间的关联,并支持和
- 开发程序,响应群内@会话事件,并将ChatGPT结果返回给用户
最终改造后的架构如下:
第一步、封装 http 服务
基于express, 很容易支持将 chatgpt-api 暴露成为http服务, 我们直接在demos目录下添加一个 文件
Express.js 是一个基于 Node.js 的 Web 应用框架。它提供了一组强大的特性,帮助你创建各种 Web 应用和 API。
添加一个service,这非常简单!
第二步、支持账号池
chatgpt-api 目前仅支持单个 OpenAI 账号,如果有账号池需求,我们就需要启动多个实例。为了支持账号池,我们计划通过 的方式启动多个实例,每个实例获取以自己ID后缀结尾的账号和密码,这样多个实例启动的时候,每个实例就使用它自己的id对应的账号,例如 就会使用配置中的 对应的账号 和 对应的密码,以下是核心的实现逻辑
第三步、通过环境变量传递账号
由于 会读取 下的内容作为环境变量,所以我们将OpenAI账号按照以下格式,放到 secret 中,将其作为 .env 文件挂载到 pod中
第四步、运行X SERVER
运行 还需要有 X SERVER,不然启动的时候会报错(pupepteer在非headless环境下需要),在容器环境下,使用 来运行应用
第五步、处理验证码
ChatGPT 在登录账号的时候会触发验证码,我们使用 插件来帮助自动完成这个过程(当然,这是一个付费服务,最低$5/月),如果你想通过远程vnc手动去浏览器中输入验证码也是可以的。不过我们在这里直接使用 的服务,毕竟多账号的时候,挨个去容器中认证很麻烦,还有在容器重启的时候处理也非常繁琐。
当我们提供了Y的环境变量的时候,gptchat-api 会自动安装插件并启用这个服务,遇到有验证码的界面的时候,它会自动帮我们处理,完全不用我们操心验证码了
NopeCHA 是一个基于AI的验证码自动识别服务提供商,它目前提供了浏览器插件的支持
第六步、代理 (负载均衡 + 会话保持 + 节点注册)
由于需要支持账号池,我们启动了多个实例,且会话的上下文是通过 来保持的,我们需要一个proxy来将请求发送到关联的实例,也需要它帮我们将新的对话请求自动分配给"最闲"的节点;
为了实现负载均衡,我们需要在代理上保存,它记录了每个节点的会话详情,开始时间和最后活跃时间,有了这些数据,我们便可以实现,(这很像路由表的功能)。
具体实现逻辑:
- 当一个没有 的请求进来时,我们就认为这是个一个新的会话,负载均衡从 中找到 数最少的节点转发请求,并且从 中获取 , 将这个 记录在节点的中
- 当请求带着 时,则找到这个 所在节点转发
ChatGPT API节点注册则直接利用了Kubernetes 的 Endpoint。Proxy 服务启用了一个协程专门用于 , 它负责维护节点的状态,当一个节点不健康的时候,转发记录表中的节点的 online 状态会被标记为 ,当请求来的时候,只会选择 online 为 的节点进行筛选, 即使请求带了 , 这儿也不会将请求转发给不健康的节点,这种请求将转发到一个新节点,并且会将 重置。
第七步、对接飞书机器人
我们简单开发一个飞书机器人并对接上 chatgpt api,这样就可以在飞书的个人或群组上对它进行聊天交互。那么它具体的设计如下:
- 飞书机器人订阅发给它或者它所在的群里的消息
- 飞书机器人后端收到订阅事件后,先检查是否是机器人关注的类型(单聊消息和群聊@机器人的消息)
- 如果是机器人关注的消息,那么机器人检查是否和发消息的人存在了一个 ,如果不存在,就新建一个,并且让这个开始执行对话机制; 这个的对话机制就是从Session单独的消息队列中取消息,访问chatgpt-appi,获取对应的响应,然后通过飞书发给用户,如果存在了Session,那就直接讲对话放入这个Session的订阅队列中。简单的说就是订阅聊天消息事件,识别出 的消息,将消息放入队列中
- 维持了一个对话过期时间,每次有消息传递的时候,这个时间都会重置到预先设定的超时时间段之后的时刻
- 飞书机器人在启动的时候还有有一个协程,每过几秒执行一次扫描,将过期的会话删除,并且在删除前,先指定的用户发送会话过期的提示
前面讲了很多我们的开发设计,但如果你仅仅只想快速部署体验的话,可以尝试在本地部署运行起来。我们已经将应用用 Helm 打包并发布到了 KubeGems 在线应用商店,用户可以在 KubeGems 中实现一键部署。
- 在 KubeGems 的管理员后台,进入应用商店添加仓库地址 https://charts.kubegems.io/kubegemsapp
- 创建飞书机器人应用,在飞书开放平台中,创建企业自建应用,并启用机器人,这一步需要拿到 飞书 和 。在应用管理后台 -> "事件订阅" 页面,拿到
以上三个变量需要在部署应用的时候使用
- 准备OpenAI的账号
注册 OpenAI 账号,并取得和
因为一些众所周知的原因,本文不会介绍注册流程,读者可在网上自行寻找方法
- 进入应用商店,选择刚刚添加的 KubeGems 在线商店,并进入 这个应用,将它部署到你的指定环境中
- 应用配置,准备values.yaml,将里面的配置内容换成你的个人数据
将上述配置粘贴在应用部署过程中的配置框中,点击部署,等待服务运行
- 配置飞书机器人的服务地址。将飞书应用后台的事件订阅地址,修改成刚才部署的feishu-bot service的地址
- 最后发布飞书机器人即可完成
OpenAI 的API返回的是一个,chatgpt-api 项目是将 ,所以这儿有很大的延迟,返回的内容越长,延迟越大。我们可以想办法将EventSource的内容转发给下游(但是我不太熟悉puppteer,所以我还没解决这个问题)
现阶段还有另外一个项目 https://github.com/ChatGPT-Hackers 可以考虑。它的做法是在浏览器内部部署agent,反向注册到代理服务上,有兴趣的同学可以试试。
大战openAI,如何与击败了Ti世界冠军的人工智能深度学习的刀塔机器人OpenAi对战。体验实录。给电脑人吊打系列Ti9世界唯一指定冠军OpenA
大战op,大战红孩儿,大战史莱姆,大战中的插曲相关游戏:DOTA2 第一P是与AI对战的教程 第二P是率领4个OpenAi对战五个OpenAi。打的是斯温。全场我最坑 第三P是率领四个普通电脑人对战五个OpenAi。玩的是女王,中单单杀了一次火枪一次冰女 同时在评论区里招募一同挑战openAi的靓仔。水平不限。凑得齐再说。 对了。测试对战平台是https://arena.openai.com/#/ V社在寻找能够连续击败OpenAi的队伍,有一个排名榜记录着。等待人类挑战机器人。现在世界纪录第一名的队伍是坚持了0时31分37秒分钟才输的。 另外一提,在合作模式里服务器会变得很卡。可能是计算性能不够的原因。建议还是竞争模式,和小伙伴一起挑战。只要一起通过控制台输入联机指令就可以和小伙伴一起挑战啦。 有什么问题欢迎在评论区问我。前一两天时时在线读评论