系统设计: Steem区块链ChatGPT机器人


前几天, 把ChatGPT整合到了STEEM区块链上, 但最初的设计存在缺陷. 我发现其它机器人命令(!bing, !thumbup, !price, !info) 同样也有问题, 所以就借此机会重新设计重构了一下代码和结构. 这个DApps (ChatGPT机器人) 是使用JS (Node)编写的, 并由pm2管理器托管运行在一台云服务器上(VPS Server).

STEEM区块链ChatGPT DApps设计缺陷

原先的设计:

  1. 进程(Blockchain)监听STEEM区块链上所有的帖子, 把满足条件的评论(含有 !ask 命令)的操作入数据库.
  2. 进程(ask) 或其他命令从MySQL中获取相应的记录, 并立即处理它们, 然后在同一进程中同步地发布到STEEM区块链.

这里会有一个问题, 确实来说, 大量并发会有问题. 一个STEEM帐户每3秒才能发布一次评论, 因此在大规模同时处理时会出现问题. 多人同时在STEEM区块链上调用机器人在最后面发步到STEEM区块链的时候会造成阻塞.

最简单的方法就是在发表评论的时候加入一个尝试(Retry)处理, 但这会增加进程的开销和复杂性. 此外, 这可能会导致每个机器人的代码重复.

新的设计和架构: STEEM区块链ChatGPT DApps

重新设计后, 我添加了一个 comments 进程, 只做一件事: 每3秒从MySQL表中读取需要发的评论, 发布它们并将其标记为已完成.

以下是组件的整体设计:

the-system-design-of-steem-blockchain-bots-with-logs 系统设计: Steem区块链ChatGPT机器人 ChatGPT (OpenAI) STEEM 区块链 SteemIt 人工智能 (AI) 区块链 教程 系统设计 软件 软件工程

Steem区块链机器人系统设计图

当机器人完成处理, 例如ask进程调用了ChatGPT API返回结果时, 把评论存到MySQL表中, 而不是直接发布到Steem区块链. 所有处理过的评论(成功发布到区块链上的评论)都将记录在 logs 日志表中.

这有几个优点:

  • 解耦组件(Decoupling): 区块链读取交易, “ask”进程获取消息并调用ChatGPT, 将答案推送到数据库. “comments”读取评论并将其发布到区块链上.
  • 代码重用: 所有处理机器人共享相同的代码, 除了处理部分. 例如, “ask”调用ChatGPT, “thumbup”检索随机点赞动图, “bing”返回随机壁纸等.
  • 减少错误: 以前, 仅在发布评论后才将记录标记为已处理, 但这会导致延迟, 可能触发另一轮处理, 这意味着相同的消息可能会在并行中处理多次.

使用此设计, 被取出的消息将立即被标记为已处理, 要被发表的评论则不受此状态影响.

经过了重构, 可靠性和可用性大大提升了, 下面显示了由pm2 manager运行的进程.

pm2-manager-steem-blockchain-bots-process 系统设计: Steem区块链ChatGPT机器人 ChatGPT (OpenAI) STEEM 区块链 SteemIt 人工智能 (AI) 区块链 教程 系统设计 软件 软件工程

PM2 Manager shows running Steem Blockchain Processes

重试逻辑/策略

目前, 该系统没有重试策略. 例如, 在 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) 同时处理消息.

whale-300x200 系统设计: Steem区块链ChatGPT机器人 ChatGPT (OpenAI) STEEM 区块链 SteemIt 人工智能 (AI) 区块链 教程 系统设计 软件 软件工程

Steem 坐火箭🚀!

  • 您可以通过 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 可以拿来做什么?

ChatGPT 通用人工智能

GD Star Rating
loading...
本文一共 1167 个汉字, 你数一下对不对.
系统设计: Steem区块链ChatGPT机器人. (AMP 移动加速版本)
上一篇: STEEM区块链上帐号等级80并且超100万SP - 终于成为了大户(大鲸鱼)
下一篇: 试用美图秀秀的AI绘画功能: 快乐是免费的-特别快乐可能就要花一些钱了

扫描二维码,分享本文到微信朋友圈
042e79060a9359156bfd41ca6c7e82cb 系统设计: Steem区块链ChatGPT机器人 ChatGPT (OpenAI) STEEM 区块链 SteemIt 人工智能 (AI) 区块链 教程 系统设计 软件 软件工程

评论