大家好, 在一个被闪亮、超现实的图像和无法实现的视觉标准支配的世界中,社交媒体向我们提供了由rigid算法管理的短视频,没有留下任何真正选择的空间。想象力已经失去了地位。闭上眼睛,听着,脑海中想象一个故事已经成为一种失落的艺术。它让我回到了我的青少年时期,作为一个宅男玩MUDs,甚至在那之前,我沉迷于纸质游戏手册——两者都对这个项目产生了巨大的影响。在这个项目中,我自己的小小梦想是带领人们回归到:想象,梦想。在今天的无休止的编码、数据库模式和服务器架构循环中,我想谈谈“为什么”。我一直在夜深人静时与监视器纠缠的真正梦想。我不想再创造出固定的、无菌的规则的游戏,所有的东西都是静止的。我想让生命充满活力的混乱占据整个宇宙。一个世界在那里没有任何东西是不可改变的,但每件事情都在不断变化。 我想让现实成为每件东西,每片草叶,每个NPC都有故事要讲的地方。一个地方在那里非玩家角色不是简单的卡片剪影重复着台词,而是有梦想、策划、攀登社会阶梯,或者在不断演化的模拟经济中坍塌的实体。 在屏幕的另一边,我想让玩家不仅仅是被动的消费者。我想让一个世界迫使你想象,真正地倾听,成为自己创造者。 # 服装服务器和午夜冻结 在所有这一切中,有一种美丽而又令人沮丧的irony。虽然我花时间设计一个持续的、不朽的数字宇宙,建立在想象之上,现实世界的家用硬件却经常提醒我谁才是真正的主宰。如图所示,我专用的迷你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模型处理它,完成后,将结果放入响应队列。RabbitMQ作为一个持久的缓冲区,安全地保存所有世界生成任务,即使网络完全断掉。 # 最终目标, 为了完全诚实,我长期的梦想不是仅仅关于代码。我的秘密希望是这个项目最终会带来一些收入,使我能够升级到一个更强大的服务器。让我们面对现实吧,也许开始为实际的离婚文件存钱,因为我的妻子一定会注意到本地LLM在24小时内在衣柜中运行的电力消耗增加了我们的电费。 🤣 我的所有devlogs都在 Patreon 上免费发布,因为我想与任何对这个开源开发之旅感兴趣的人分享。 我将在评论中留下一个免费devlog的链接。 感谢阅读,朋友们。下次见!