写 TypeScript 和 React Native,业余折腾两个东西:
一个会自己运转的 MUD 世界。NPC 不是站桩念台词的木偶,他们会种田打铁、互相认识、偶尔记仇。
底层是类 Paradox 的数据驱动 + 事件系统。参考维多利亚 3 那种思路——不做脚本叙事,靠底层数据模型驱动一切。NPC 几点起床、跟谁关系好不好、打架谁赢、经济怎么流转,全是数据算出来的。事件不是手写的,是从数据状态里自然触发的:粮价涨了 → 触发饥荒事件 → 难民涌入 → 治安下降 → 触发暴动。
上层是 LLM 层,只在需要内容生成的时候介入:NPC 跟你聊天现编台词、灾荒了帮忙想个后果、文化分化了起个新方言名字。LLM 产出写回 ContentPool,下一轮数据引擎接着算。
为什么这么设计。 市面上有全 LLM 驱动的方向——Stanford 的 Generative Agents(2023),25 个 NPC 住在 Smallville 小镇里,每个 NPC 的思考、计划、对话、社交全部调 API,行为很灵活,但成本随 NPC 数量线性涨,几百个 NPC 直接跑不动。
这套架构走了另一个方向:日常运转交给数据引擎,LLM 只在需要内容生成时介入。几千个 NPC 同时活着不烧钱,大规模模拟可行,同时 NPC 跟你说话的时候该有温度的还是有温度。
游戏内容全在 26 个 YAML 文件里。想加个新职业或者调一下战斗伤害公式,改 YAML 就行,不用碰代码。
目前可以在终端里跑起来,纯键盘操作,WASD 走路,每天结束给一份章回体游记汇报今天世界上发生了什么。
[TypeScript · Bun · Solid.js]
让 AI Agent 在 Obsidian vault 上有长期记忆。工作流:Agent 干活 → supervisor 盯着别跑偏 → 经验通过 matcha 写进 vault → 下次干活时 pearl 帮 Agent 搜出以前踩过的坑、做过的决策,作为上下文注入。
- pearl:语义搜索 vault,Agent 动手前先翻翻历史笔记
- matcha:帮 agent 把工作记忆写进 vault,自动整理归档
- supervisor:盯着 agent 干活,别跑偏了。(自己用,还没公开)