每个人, 在一个被闪亮、超现实的图像和无法实现的视觉标准所支配的世界里,社交媒体喂养我们短视频,受僵化算法管理,根本没有给我们选择的空间。想象力已经失去了地位。闭上眼睛,听着,脑海中想象一个故事正在成为一种失落的艺术。 这让我回到了我年轻时做的MUD游戏和纸质游戏手册的日子,两者都极大地影响了这个项目。 在我自己的小小世界里,我希望这个项目能带来的人们回归想象,回归梦想。 把今天的代码、数据库架构和服务器架构暂时放在一边,我想谈谈“为什么”。 我的真实梦想让我深夜盯着监视器。 我不想创造另一个有固定的、僵硬的规则的游戏,所有东西都是静止的。 我想让生活在充满生机的混乱中的一个宇宙。 一个世界,什么都不能改变,但一切都在不断变化。 我想在每个地方,每片草叶和每个NPC身上都有一个故事要说。 一个地方,非玩家角色不仅仅是重复表述的纸板剪影,而是有梦想、有计划、爬上社会的阶梯,或者在不断演变的模拟经济中陷入破产的实体。 另一边的屏幕上,我想让玩家不仅仅是被动的消费者。 我想让世界让你想象,让你真正听着,让你成为创造者自己。

衣柜服务器和午夜冻结

所有这一切都有着美丽而又令人沮丧的反讽。 我花了时间设计一个生存的、不朽的数字宇宙,依靠想象力。 但现实世界中的家用硬件却爱惜地提醒我,谁才是真正的主人。 如你所见,在照片中,我的专用小型PC服务器运行着整个生态系统(Java引擎、Postgres with pgvector和本地GGUF模型)。 为了让它不显眼,我把它放到了我的衣柜里,高高地挂在一个架子上,实际上被两个无线路由器包围,周围是冬季大衣。 最近,“混乱”的主题被取得太过了:系统在半夜完全冻结。 我最初把原因归咎于冬季大衣引起的热量调节,但我刚刚发现了滑稽的真相:我的家庭路由器自动在凌晨2:30至6:30之间禁用互联网。 当连接断开时,容器化服务如Cloudflare Tunnel进入了混乱的无限重连接循环。 它们会在Docker日志中产生每秒数千个错误,完全阻塞磁盘I/O和冻结整个CPU,直到早上。

异步架构如何拯救了我

这个家用基础设施的噩梦让我做出了一个决定:让整个架构变得更苗条、更有韧性。 我最近使用RabbitMQ将我的项目Homer的整个游戏循环分离出来,使其异步和事件驱动。 Java游戏引擎和RAG模块(同样使用Java开发)不再直接通信。 相反,消息被放入两个不同的队列:

  • 请求队列:从引擎到RAG。
  • 响应队列:从RAG返回到引擎。

当引擎需要什么时,它会将消息放入请求队列。 RAG读取它,使用本地LLM模型通过Lemonade处理它,并在完成后将结果放入响应队列。 RabbitMQ作为一个可靠的缓冲区,安全地保存了所有世界生成任务,甚至如果网络完全下线也不会丢失。

最终目标

说实话,我长期的梦想不仅仅是关于代码。 我秘密地希望这个项目最终会带来一些收入,使我能够升级到一个更强大的服务器。 并且,老实说,可能开始储蓄一些离婚协议,因为我的妻子肯定会注意到我的家里的LLM在24小时内运行的电费。 🤣 Patreon上的所有开发日志都是免费的,因为我想与任何对这个开发过程感兴趣的人分享。 我会在评论中留下链接到免费的开发日志。 感谢阅读,各位。 再见!