前几天, 把ChatGPT整合到了STEEM区块链上, 但最初的设计存在缺陷. 我发现其它机器人命令(!bing, !thumbup, !price, !info) 同样也有问题, 所以就借此机会重新设计重构了一下代码和结构. 这个DApps (ChatGPT机器人) 是使用JS (Node)编写的, 并由pm2管理器托管运行在一台云服务器上(VPS Server).
STEEM区块链ChatGPT DApps设计缺陷
原先的设计:
- 进程(Blockchain)监听STEEM区块链上所有的帖子, 把满足条件的评论(含有 !ask 命令)的操作入数据库.
- 进程(ask) 或其他命令从MySQL中获取相应的记录, 并立即处理它们, 然后在同一进程中同步地发布到STEEM区块链.
这里会有一个问题, 确实来说, 大量并发会有问题. 一个STEEM帐户每3秒才能发布一次评论, 因此在大规模同时处理时会出现问题. 多人同时在STEEM区块链上调用机器人在最后面发步到STEEM区块链的时候会造成阻塞.
最简单的方法就是在发表评论的时候加入一个尝试(Retry)处理, 但这会增加进程的开销和复杂性. 此外, 这可能会导致每个机器人的代码重复.
新的设计和架构: STEEM区块链ChatGPT DApps
重新设计后, 我添加了一个 comments 进程, 只做一件事: 每3秒从MySQL表中读取需要发的评论, 发布它们并将其标记为已完成.
以下是组件的整体设计:
当机器人完成处理, 例如ask进程调用了ChatGPT API返回结果时, 把评论存到MySQL表中, 而不是直接发布到Steem区块链. 所有处理过的评论(成功发布到区块链上的评论)都将记录在 logs 日志表中.
这有几个优点:
- 解耦组件(Decoupling): 区块链读取交易, “ask”进程获取消息并调用ChatGPT, 将答案推送到数据库. “comments”读取评论并将其发布到区块链上.
- 代码重用: 所有处理机器人共享相同的代码, 除了处理部分. 例如, “ask”调用ChatGPT, “thumbup”检索随机点赞动图, “bing”返回随机壁纸等.
- 减少错误: 以前, 仅在发布评论后才将记录标记为已处理, 但这会导致延迟, 可能触发另一轮处理, 这意味着相同的消息可能会在并行中处理多次.
使用此设计, 被取出的消息将立即被标记为已处理, 要被发表的评论则不受此状态影响.
经过了重构, 可靠性和可用性大大提升了, 下面显示了由pm2 manager运行的进程.
重试逻辑/策略
目前, 该系统没有重试策略. 例如, 在 Steem 区块链上发布可能会触发错误, 由于资源单元不足或网络问题等. 当出现这种情况时, 我们可以将记录重新排队到评论表中, 或者只需更新时间戳, 以便稍后可以取出它们(按先进先出顺序, 以便在”重试”消息之前可以选择其他新消息).
在高峰时段, 免费(Free Plan)计划的 ChatGPT 可能需要一段时间甚至几分钟才能返回响应. 目前, 在 Steem 区块链上的 ChatGPT DApp 设置为 120 秒的超时时间. 如果失败, 则可能返回错误的 JSON(SyntaxError: Unexpected end of JSON input), 然后我们必须将请求重新放回数据库(队列)并更新时间戳. 在一定数量的重试之后, 我们可能会中止请求并完全失败它.
单点故障
这个设计有个问题, 就是读取的进程一旦崩溃就会造成数据丢失. 解决单点故障: STEEM区块链ChatGPT机器人的多个读进程
结论
本文介绍了 Steem 区块链上机器人(命令)的系统设计. 我们用数据库(MySQL)来持久化和实现消息队列的两个目的. 如果性是个问题, 我们可能需要考虑使用高性能消息队列 Message Queue, 而不是数据库 Database.
当前的设计克服了在 Steem 区块链上每 3 秒发布 1 条评论的限制, 并允许多个机器人(Dapps) 同时处理消息.
Steem 坐火箭🚀!
- 您可以通过 rentsp 来租赁Steem Power!
- 您可以通过 tron2steem 交换 波场币/TRX/USDT/USDD 到 STEEM!
- 您可以通过 steem2sui 交换 STEEM/SBD 到 SUI!
- 您可以通过 steem2sol 交换 STEEM/SBD 到 SOL Solana 索拉纳!
- 您可以通过 steem2eth 交换 STEEM/SBD 到 ETH Ethereum 以太网!
- 您可以通过 steem2usdt 交换 STEEM/SBD 到 Tether USDT (波场U, TRC-20)!
- 您可以通过 steem2trx 交换 STEEM/SBD 到 波场 TRX (TRON)!
- 您可以通过 steem2bts 交换 STEEM/SBD 到 比特股 BTS (BitShares)!
- 在 SteemYY 免费注册 STEEM 帐户!
- Steem 区块链浏览器
- ChatGPT/Steem 机器人: 命令 !ask
- Steem 见证人排名/API
- 其它 Steem 工具
支持我的工作 支持我成为 见证人
我的一些贡献: SteemIt 工具, API接口, 机器人和教程ChatGPT 可以拿来做什么?
- 硅谷娇妻是怎么样的? 让四个大语言模型AI来告诉你
- 教娃编程之: ChatGPT写了一个Python交互程序调用x.ai的Grok大语言模型
- 软件工程师可以通过ChatGPT来帮助审核代码(提高代码质量)
- ChatGPT-4o好幽默:给我画了两张北京女孩穿吊带/迷你裙
- 可以用ChatGPT来轻松转换编程语言
- ChatGPT最擅长的任务之: 写邮件
- ChatGPT 使用 Promise.All 重构/重写代码(并行发送请求)
- ChatGPT-4 使用 Math Wolfram 插件解决数学脑筋急转弯问题
- ChatGPT (3.5和4) 解2023年高考数学题
- 问了ChatGPT比特币2023年年底多少钱(ChatGPT能预测或者估计将来?)
- 让ChatGPT给孩子讲讲什么是公司股票
- 教媳妇: 自定义ChatGPT攻略 | 币价查询GPT
ChatGPT 通用人工智能
- ChatGPT崛起让网站流量大幅度减少, 搞不到钱了
- 解决单点故障: STEEM区块链ChatGPT机器人的多个读进程
- 系统设计: Steem区块链ChatGPT机器人
- 整合 ChatGPT Prompt AI到 STEEM 区块链上!
- 整合 ChatGPT 到微信公众号机器人
- ChatGPT在数学和逻辑方面表现不佳
- 浅谈ChatGPT对用户生成内容 (UGC)的影响
- 我儿子也会 Prompt Engineering
- 未来10年的下一个技术趋势是什么?
Grok 3
Steem/Steemit区块链
- 如何构建一个具有重试机制的 Steem 区块链见证人投票检查器
- STEEM区块链上帐号等级80并且超100万SP - 终于成为了大户(大鲸鱼)
- STEEM兑换ETH以太网工具上线两个月一共兑换了10个ETH!
- 怎么样计算STEEM区块链的上线率(UpTime)和宕机时间(DownTime)
- 系统设计: Steem区块链ChatGPT机器人
- 《steem 指南》- 查看踩人与被踩的记录
- SteemIt Finally Reputation = 70! 盼星星盼月亮, 总算盼来70级!
- STEEMIT cn区最低保障系统 上线了! Introduction to the CN Wechat Group Voting Robot @justyy
- SteemIt 好友微信群排行榜 支持显示数据统计和API了!
- 数据初步分析系列 STEEM中文微信群排行榜单 - 中位数, 平均, 和标准方差
- 大家好才是真的好, YY银行足球队, 你还有啥理由不加入银行?
- YY 银行开启互抱大腿模式 (mutually-beneficial voting scheme)
- 哇哈哈, 我已经是 utopian-io 的 moderator 团队的一员了!
- 返璞归真, 重新成为小鱼 - 祭奠逝去的1万SP
loading...
上一篇: STEEM区块链上帐号等级80并且超100万SP - 终于成为了大户(大鲸鱼)
下一篇: 试用美图秀秀的AI绘画功能: 快乐是免费的-特别快乐可能就要花一些钱了
