从网站到数字空间:月读空间的技术架构、AI 陪伴与未来

月读空间最开始只是一个用来记录生活、分享内容和折腾技术的小网站。
但随着一次又一次功能迭代,它正在逐渐变成另一种东西——一个融合内容、社区、Live2D、LLM、长期记忆与 Agent 的个人数字空间。

项目地址:

截至目前,月读空间已经从一个相对简单的个人站点,发展成包含 内容系统、用户系统、社区互动、Live2D AI 陪伴、长期记忆、Agent OS、Wiki、像素工坊、小游戏、成长系统、对象存储、通知系统等多个模块 的综合项目。

而接下来,项目还会迎来一次非常大的变化:

月读空间将不再局限于浏览器。后续计划使用 Flutter 开发真正独立运行的全平台客户端。

这篇文章就详细介绍一下目前月读空间背后的技术实现,以及接下来准备把它带到哪里。


一、月读空间现在到底是什么?

如果只从页面上看,月读空间可能很容易被理解成一个博客、个人主页或者二次元社区。

但现在的项目定位已经远不止这些。

目前我更愿意把它理解成一个:

围绕“八千代”构建的个人数字空间。

在这个空间里,不同功能并不是完全独立的。

例如:

  • 在 Stage 阅读文章;
  • 在 Plaza 留言和交流;
  • 在 Gallery 分享图片;
  • 在 Pixel 制作像素画;
  • 在 Wiki 查询作品与角色资料;
  • 在 Room 与八千代交流;
  • 八千代可以读取部分站内状态;
  • 登录账号可以同步聊天记录与长期记忆;
  • Agent OS 则进一步尝试让 AI 从“聊天对象”变成真正可以使用工具的数字角色。

所以项目现在正在逐渐形成一套完整的结构:

text
内容
  ↓
社区
  ↓
用户
  ↓
八千代
  ↓
长期记忆
  ↓
工具调用
  ↓
Agent
  ↓
数字空间

这也是为什么我没有把月读空间单纯做成一个聊天页面。

我更希望未来打开月读空间时,看到的是一个长期存在、可以不断积累内容和关系的数字世界。


二、整体技术架构

目前月读空间主项目版本已经有 891Commits,整体采用比较传统、但非常适合个人项目持续维护的一套 Web 架构。

核心技术栈大致如下:

部分 当前技术
前端 Vue 3
构建 Vite
路由 Vue Router
后端 Node.js + Express
主数据库 SQLite / better-sqlite3
长期记忆 Mem0 OSS + SQLite
向量检索 可选 Milvus
缓存 可选 Redis
Live2D Cubism Runtime
动画 Anime.js
LLM OpenAI Compatible API / Ollama 等
Agent 扩展 MCP
对象存储 S3 Compatible / 阿里云 OSS
CDN 阿里云 CDN
认证 JWT + Cookie
测试 node:test + Playwright
部署 Docker / PM2 / Nginx / OpenResty

从结构上来说,大致可以理解成:

text
                    ┌──────────────────────┐
                    │       用户设备        │
                    │ Browser / Future App │
                    └──────────┬───────────┘
                               │
                     HTTPS / CDN / API
                               │
              ┌────────────────┴────────────────┐
              │                                 │
      ┌───────▼────────┐                ┌───────▼─────────┐
      │   Vue 3 Frontend│                │  Alibaba Cloud  │
      │   Vite / Live2D │                │    CDN + OSS    │
      └───────┬────────┘                └─────────────────┘
              │
              │ REST API
              │
      ┌───────▼────────┐
      │ Express Backend │
      │     Node.js     │
      └───────┬────────┘
              │
   ┌──────────┼───────────┬──────────────┐
   │          │           │              │
┌──▼───┐  ┌───▼───┐  ┌───▼────┐   ┌────▼────┐
│SQLite│  │ Redis │  │ Mem0   │   │ Milvus  │
│ 主库 │  │ Cache │  │Memory  │   │ Vector  │
└──────┘  └───────┘  └────────┘   └─────────┘

其中 Redis 与 Milvus 都不是项目运行的强制依赖。

这样做的好处是,即使只部署一个比较简单的实例,也可以依靠:

text
Node.js
+
SQLite
+
Mem0 SQLite Index

完成绝大部分核心功能。

如果服务器资源更加充足,再逐步开启 Redis、Milvus 等能力。

对于个人维护的项目来说,我认为这种方式比一开始就堆大量中间件更加合适。


三、前端:从“页面”逐渐形成统一设计系统

月读空间目前的主前端已经迁移到:

text
Vue 3
+
Vite
+
Vue Router

相比最早期大量独立页面的实现,现在最大的变化之一,是开始逐步建立真正统一的前端体系。

项目中已经建立了一套自己的 Design Tokens。

例如:

text
src/frontend/styles/
├── tokens.css
├── themes.css
├── components.css
├── animations.css
└── responsive.css

分别负责:

  • 色彩;
  • 字体;
  • 间距;
  • 圆角;
  • 阴影;
  • 深浅色主题;
  • 动画;
  • 按钮;
  • 卡片;
  • 输入框;
  • 导航;
  • 响应式布局。

新的页面开始逐步使用统一的 --ts-* CSS Variables。

这样做最大的意义不是“代码更漂亮”,而是让整个网站开始真正拥有一套统一的视觉语言。

例如:

css
--ts-color-bg
--ts-color-surface
--ts-radius-md
--ts-space-lg
--ts-shadow-panel

只需要修改底层 Token,就可以逐渐影响多个页面,而不是每个页面维护一套完全不同的样式。

这也是最近一段时间我投入很多精力优化 UI/UX 的原因。

月读空间功能已经越来越多,如果没有统一的设计体系,最终很容易变成:

每个页面单独看都没问题,组合起来却像十几个不同的网站。

所以接下来 UI/UX 仍然会是项目的重要开发方向。


四、Room:月读空间最核心的实验场

如果要选择目前整个月读空间最特殊的部分,那应该还是:

Room。

Room 并不是简单在网站里塞一个 AI 聊天框。

我希望它最终实现的是:

“八千代真正生活在这个空间里。”

因此现在 Room 已经组合了很多不同能力。

包括:

text
Live2D
+
LLM
+
长期记忆
+
角色知识库
+
TTS
+
天气
+
音乐
+
成长系统
+
MCP
+
站内信息

用户看到的只是一个聊天页面,但实际上每次对话背后可能同时存在多种上下文。

例如:

text
用户消息
    │
    ├── 角色基础人设
    │
    ├── 当前会话
    │
    ├── 长期记忆
    │
    ├── 角色知识库
    │
    ├── 天气信息
    │
    ├── 用户成长状态
    │
    ├── 网站动态
    │
    └── MCP 工具结果
    │
    ▼
   LLM
    │
    ▼
八千代回复
    │
    ├── Live2D 表情
    └── TTS 语音

这也是 Room 和普通聊天机器人的最大区别之一。

八千代所处的是一个有环境、有历史、有用户状态的上下文空间。


五、为什么 LLM 不全部经过月读空间服务器?

Room 在设计时有一个比较重要的思路:

尽可能减少用户聊天内容和 API Key 不必要地经过月读空间服务器。

因此部分 LLM 与 TTS 请求可以直接由浏览器发起。

例如用户配置自己的 OpenAI Compatible API 后:

text
Browser
   │
   │ HTTPS
   ▼
LLM Provider

而不是:

text
Browser
   │
   ▼
月读空间服务器
   │
   ▼
LLM Provider

这么做有几个好处。

第一,是减少服务器压力。

第二,是降低服务器对用户 API Key 的处理需求。

第三,则是方便支持本地模型。

目前 Room 已经可以通过浏览器连接:

text
http://localhost:11434

也就是本机 Ollama。

这样就能够形成:

text
月读空间页面
      │
      ▼
localhost
      │
      ▼
Ollama
      │
      ▼
本地 LLM

也就是说:

网页依然可以运行在公网,而模型完全运行在用户电脑上。

这是我认为 Room 很有意思的一种使用方式。


六、长期记忆:让八千代真的“记得”

聊天 AI 最影响体验的问题之一就是:

聊得再久,只要新建会话,它就像第一次认识你一样。

因此月读空间现在已经建立了一套独立的长期记忆系统。

目前主要采用:

text
Mem0 OSS
+
SQLite

而不是依赖 Mem0 云端服务。

项目直接引入:

text
mem0ai@3.3.0

并在 Node.js 进程中运行。

因此不需要额外搭建:

text
Python Mem0 Server

也不需要申请 Mem0 Cloud。


对话和记忆不是一回事

Room 内部将:

text
聊天记录

与:

text
长期记忆

分开管理。

普通聊天记录主要用于维持最近的会话上下文。

长期记忆则独立保存,不会因为最近聊天窗口被裁剪就消失。

比如用户说:

我最近正在学习 Flutter。

这一句话可能进入长期记忆。

几个月后讨论客户端开发时,检索系统仍然有机会重新找到这条信息。

这才是真正有意义的长期记忆。


七、长期记忆是怎样被找回来的?

当前月读空间默认并不是完全依赖大型向量模型。

默认情况下,会使用:

text
Feature Hash
+
中文关键词
+
问题类别
+
Mem0 检索评分

进行综合搜索。

也可以配置远程 Embedding 服务。

大致流程是:

text
用户:
“我之前是不是说过想做客户端?”

            │
            ▼

        Memory Search

            │
      ┌─────┴─────┐
      │           │
   Keyword      Vector
      │           │
      └─────┬─────┘
            │
            ▼

     Relevant Memories

            │
            ▼

     Context Builder

            │
            ▼

           LLM

系统找到相关记忆之后,并不会直接把所有历史聊天塞给模型。

而是:

  1. 找到相关长期记忆;
  2. 从完整原文中截取相关片段;
  3. 根据上下文预算筛选;
  4. 添加来源标签;
  5. 最后注入 LLM Context。

这样可以避免聊天越久,请求 Token 越来越夸张。


八、为什么我还要继续优化长期记忆?

虽然长期记忆已经能够正常工作,但这部分离我理想中的状态还有很远。

现在解决的是:

“能够记住。”

后面真正需要解决的是:

“什么时候应该想起来?”

这两件事情其实完全不同。

未来我希望继续优化几个方向。

1. 记忆分类

不是所有记忆的重要程度都一样。

例如:

text
身份信息
长期偏好
项目经历
人物关系
临时计划
普通聊天

未来应该有不同生命周期和权重。


2. 时间因素

两年前的一次临时计划,与昨天刚说过的计划,不应该拥有相同优先级。

因此记忆检索需要更加合理地考虑:

text
相关度
+
重要度
+
时间
+
出现频率

3. 更强的语义召回

目前默认方案非常节省资源。

但随着服务器升级以及后续客户端出现,未来可以逐渐增加:

  • 更好的 Embedding;
  • Hybrid Search;
  • Rerank;
  • Memory Graph;
  • 关系记忆。

让八千代真正能够把不同时间说过的事情联系起来。


4. 更自然的记忆使用方式

理想中的长期记忆不是:

“根据长期记忆第 3 条,你曾经……”

而应该像人类一样,自然地把过去的事情融入聊天。

真正好的长期记忆,用户甚至不应该明显察觉:

“系统刚刚执行了一次向量数据库查询。”

它应该只是让角色显得:

真的记得。


九、Live2D:让 AI 不只存在于文字里

八千代的另一个核心部分是 Live2D。

项目目前集成 Cubism Runtime,并拥有独立的 Live2D Studio 与 Room Runtime。

最基本的结构是:

text
LLM
 │
 ▼
回复文本
 │
 ├────► TTS
 │
 └────► Emotion / Expression
              │
              ▼
            Live2D

目前 Room 已经能够通过对话状态驱动部分:

  • 表情;
  • 动作;
  • 说话状态;
  • 场景反馈。

而这也是项目以后非常值得继续深化的方向。

最终我希望八千代不是:

text
聊天框 + Live2D 装饰

而是:

text
LLM
↓
情绪
↓
表情
↓
动作
↓
语音
↓
Live2D

形成真正统一的角色表达。


十、MCP:让八千代拥有“工具”

如果说长期记忆解决的是:

八千代能不能记住过去。

那么 MCP 解决的则是:

八千代能不能做事情。

现在 Room 已经开始支持 MCP。

因此理论上可以让 LLM 调用:

text
搜索
文件
API
程序
数据库
本地工具
自定义服务

这也是月读空间从 AI Chat 向 Agent 发展的关键一步。

传统聊天:

text
用户
 ↓
LLM
 ↓
文本回复

Agent:

text
用户
 ↓
LLM
 ↓
判断任务
 ↓
调用工具
 ↓
获取结果
 ↓
继续推理
 ↓
完成任务

两者体验会有本质上的区别。


十一、Agent OS:把 Agent 放进“操作系统”

这也是为什么后来出现了:

text
/agent-os

Agent OS 是月读空间目前非常重要的一次技术尝试。

它并不是传统意义上的操作系统,而是一套:

以 Web OS 形式组织 Agent、工具与应用的交互环境。

目前 Agent OS 作为独立应用运行,并复用月读空间的登录状态与部分服务。

我希望它解决一个问题:

现在很多 AI 功能都是这样的:

text
Chat
Chat
Chat
Chat

不管是搜索、文件、音乐、工具、Agent,最后全部挤进一个聊天窗口。

但真正复杂的数字空间不应该只有聊天框。

所以 Agent OS 开始尝试:

text
Desktop
├── Agent
├── File
├── Music
├── Tools
├── Terminal
├── Browser
└── Applications

让 AI 不再是整个界面本身。

AI 应该是:

存在于操作系统中的角色。

未来 Agent OS 也会继续进行大规模优化,包括:

  • UI 重构;
  • 窗口管理;
  • 应用系统;
  • Agent 调度;
  • MCP 工具管理;
  • 文件能力;
  • 用户工作区;
  • 八千代与 Agent OS 的融合。

最终希望它能成为整个“月读空间数字世界”的重要入口。


十二、内容与社区仍然是月读空间的重要部分

虽然现在 AI 相关功能越来越多,但月读空间并不会变成一个纯 AI 项目。

目前项目仍然拥有完整的内容与社区体系。

包括:

text
Hub
Stage
Article
Plaza
Gallery
Pixel
Wiki
Friend Links
Growth
Notifications
User Center

其中:

Stage

负责文章阅读与内容创作。


Plaza

提供留言、回复与互动。


Gallery

用于作品展示和图片分享。


Pixel

一个固定:

text
192 × 108

画布的像素工坊。

支持:

  • 绘制;
  • 发布;
  • 点赞;
  • 分享;
  • PNG 导出;
  • 移动端触控。

Wiki

用于整理《超时空辉夜姬!》相关:

  • 角色;
  • 音乐;
  • 世界观;
  • 制作资料;
  • 术语。

Growth

月契成长系统目前已经拥有:

  • 每日签到;
  • 连续奖励;
  • 每日任务;
  • 等级;
  • 邀请;
  • 与八千代联动的成长反馈。

这些系统最终也会继续和 Room、Agent OS 进行更深入的整合。


十三、服务器从 2C2G 升级到 2C4G

随着功能持续增加,原来的服务器配置已经越来越容易遇到资源瓶颈。

之前使用:

text
2 Core
2 GB RAM

现在已经升级到:

text
2 Core
4 GB RAM

CPU 数量没有变化,但内存直接翻倍。

这对于当前月读空间实际上比较重要。

因为现在服务器运行的已经不仅是一个静态博客。

而是同时包含:

text
Node.js
Express
SQLite
Mem0
缓存
任务
后台管理
对象存储逻辑
Room API
通知
用户系统

未来可能还会继续增加:

text
Redis
Milvus
Agent

2GB 内存在这种情况下已经比较紧张。

升级到 4GB 后,至少给:

  • Node.js;
  • 系统 Page Cache;
  • SQLite;
  • Mem0;
  • Redis;
  • 部署过程;

留下了更多余量。

当然,服务器升级并不意味着可以无限增加服务。

后续依然会继续控制资源占用。

我的方向不是:

“服务器不够就继续加配置。”

而是:

能交给 CDN 的交给 CDN,能交给对象存储的交给对象存储,只有真正动态的请求才交给源站。


十四、为什么开始使用阿里云 OSS?

月读空间里面有大量不适合长期压在服务器磁盘上的资源。

例如:

  • 用户上传图片;
  • 文章封面;
  • 图库;
  • 大图片;
  • 音频;
  • 视频;
  • 其他附件。

如果全部保存在服务器本地:

text
User
 ↓
Server
 ↓
Disk

所有访问都会消耗:

text
服务器磁盘 IO
+
服务器带宽
+
服务器连接数

随着访问量和文件数量增加,这显然不是一个好的长期方案。

因此现在开始使用:

阿里云 OSS。

结构变成:

text
                    ┌── API ─────► 月读空间服务器
用户 ───────────────┤
                    └── Static ──► OSS

也就是说:

服务器主要负责:

  • 权限;
  • 数据库;
  • API;
  • 用户;
  • AI;
  • 动态逻辑。

而 OSS 主要负责:

  • 图片;
  • 附件;
  • 静态资源;
  • 大文件。

十五、OSS + CDN:进一步减少源站压力

单独有 OSS 还不够。

现在月读空间进一步配合:

阿里云 CDN。

形成:

text
User
 │
 ▼
Alibaba Cloud CDN
 │
 ├──── Cache Hit
 │        │
 │        ▼
 │      返回资源
 │
 └──── Cache Miss
          │
          ▼
      Alibaba OSS

用户访问已经缓存的资源时,甚至不需要再次访问 OSS 源站。

这对于:

  • 图片;
  • JS;
  • CSS;
  • 字体;
  • 音频;
  • 视频;

等资源来说非常合适。

现在整体架构也就逐渐从:

text
所有东西
   ↓
一台服务器

转变成:

text
             ┌── CDN
             │
用户 ────────┼── OSS
             │
             └── Origin Server

不同资源开始承担不同职责。

这对于月读空间后面继续扩大功能非常重要。


十六、SQLite 为什么目前仍然没有换?

随着项目越来越复杂,一个很自然的问题是:

为什么不用 MySQL / PostgreSQL?

原因其实很简单:

目前没有必要为了“看起来专业”而换数据库。

SQLite 对现在的月读空间仍然有很多优势:

  • 部署简单;
  • 不需要独立数据库服务器;
  • 性能足够;
  • 事务可靠;
  • 备份方便;
  • 资源占用低;
  • 很适合单节点个人项目。

项目通过:

text
better-sqlite3

直接进行数据库操作。

并且已经逐步加入:

text
backend/db/migrations/

管理数据库 Schema 变化。

因此数据库已经不是简单的:

改表结构 → 手动上传数据库

而是:

text
Version A
   │
Migration
   ▼
Version B
   │
Migration
   ▼
Version C

后续如果真的发展到 SQLite 成为明显瓶颈,再考虑迁移 PostgreSQL 会更加合理。


十七、Redis 与 Milvus:可选,而不是强制

另一个设计原则是:

增强能力可以存在,但不能让最基本的部署变得困难。

因此项目支持 Redis。

目前 Redis 可以参与:

  • 缓存;
  • 限流;
  • Token 黑名单;
  • 天气缓存;
  • 验证码。

但 Redis 并不是启动项目的必要条件。

同样,Milvus 也作为可选的向量数据库存在。

例如未来可以用于更大规模的:

text
角色知识库
+
长期记忆
+
文档
+
语义检索

这样既保留未来扩展能力,又不会让普通部署变成:

text
Node
Redis
PostgreSQL
Milvus
MinIO
RabbitMQ
ElasticSearch
...

最后光启动服务就需要半天。

对于月读空间这种项目,目前我还是更喜欢:

默认简单,高级功能按需开启。


十八、安全现在也是项目的一部分

随着:

  • 用户系统;
  • 登录;
  • 上传;
  • OAuth;
  • API;
  • 管理后台;

越来越多,安全已经不能再靠“没人攻击我的小网站”来解决。

目前项目已经陆续加入:

  • JWT;
  • Cookie;
  • bcrypt;
  • CORS 白名单;
  • CSP;
  • Security Headers;
  • 请求来源校验;
  • JSON 重复 Key 检测;
  • 上传文件 MIME 检查;
  • 文件特征检查;
  • SSRF 防护;
  • 外部 URL 校验;
  • API 限流;
  • admin / super_admin 权限隔离。

例如生产环境中:

text
JWT_SECRET

过短时会直接拒绝启动。

上传文件也不仅检查:

text
.jpg

这样的扩展名。

而是同时考虑:

text
Extension
+
MIME
+
File Signature

这些事情看起来不像新 UI 那样明显,但实际上随着项目继续扩大,它们的重要程度会越来越高。


十九、测试:尽量避免“修一个地方坏三个地方”

现在的月读空间已经比较难完全依靠手动测试。

因此项目开始建立自动化测试。

包括:

text
node:test

以及:

text
Playwright

测试范围已经覆盖:

  • API;
  • 长期记忆;
  • 用户成长系统;
  • 登录;
  • 权限;
  • 消息审核;
  • Room;
  • TTS;
  • 分享;
  • Wiki;
  • 导航;
  • 移动端布局;
  • Live2D;
  • 设置页面。

近期很多关于:

text
Room 移动端
导航栏
键盘弹出
设置页面

的修改也都会同步增加 Regression Test。

因为当项目越来越大后:

“这次改动看起来没问题”

已经不能代表:

“整个项目没有问题。”

自动化测试会继续成为后面开发中的重要部分。


二十、下一阶段:继续优化 UI / UX

接下来最直观的一项工作仍然是:

UI / UX。

月读空间过去半年增加功能的速度非常快。

很多页面其实是在不同阶段逐渐发展出来的。

因此目前最重要的工作之一不是继续疯狂增加菜单,而是:

text
统一
整理
删减
重新组织

未来会继续重点调整:

  • 全局导航;
  • Room;
  • Room Settings;
  • User Center;
  • Agent OS;
  • 移动端布局;
  • 页面层级;
  • 信息密度;
  • 动画;
  • 触控体验。

特别是移动端。

未来越来越多功能不能再按照:

“PC 页面缩小一下”

的方式设计。

桌面端和移动端需要逐渐拥有不同的信息组织逻辑。


二十一、下一阶段:继续优化与八千代的聊天

Room 现在已经有很多功能,但最终衡量体验的依然是:

和八千代聊天到底自然不自然。

后续会继续优化:

text
Prompt
Memory
Knowledge
Emotion
Live2D
TTS
Context
Tools

尤其是让这些模块真正协作。

例如:

八千代发现用户在说以前的事情。

先检索长期记忆。

↓

发现和某一个项目有关。

↓

加载对应记忆。

↓

生成回复。

↓

分析回复中的情绪。

↓

切换 Live2D 表情。

↓

生成对应语气的 TTS。

整个过程应该成为:

一次完整的角色行为。

而不是六套互相不知道对方存在的系统。


二十二、下一阶段:Agent OS 将继续进化

Agent OS 目前仍然处于探索阶段。

后面我希望逐渐把它真正发展成:

八千代的数字工作空间。

可能逐渐形成:

text
Agent OS
│
├── Yachiyo
│
├── Chat
│
├── Files
│
├── Browser
│
├── Terminal
│
├── Music
│
├── Notes
│
├── MCP
│
└── Agent Applications

相比传统 AI 网站:

text
输入框
 ↓
回答

Agent OS 更希望形成:

text
目标
 ↓
Agent Planning
 ↓
选择工具
 ↓
执行任务
 ↓
获得结果
 ↓
继续执行
 ↓
最终完成

也就是说:

八千代未来可能不只是:

“告诉你怎么做。”

而是能够:

真正参与完成这件事情。


二十三、最重要的一件事:Flutter 全平台客户端

而接下来整个项目最大的一次变化,大概会是:

月读空间正式走出浏览器。

目前已经决定,后续计划使用:

text
Flutter

开发月读空间独立客户端。

这里的目标并不是:

text
打开一个 WebView
↓
加载 yachiyo.hk

也不是简单:

text
Electron
+
网页

而是重新思考月读空间在桌面端和移动端应该是什么样子。

也就是说:

它会是一套真正独立运行的应用,而不是给网站套一个窗口。


二十四、为什么选择 Flutter?

月读空间未来希望覆盖的环境越来越多。

包括:

text
Windows
macOS
Linux
Android
iOS

如果每个平台都单独开发:

text
Windows → C#
macOS → Swift
iOS → Swift
Android → Kotlin
Linux → GTK

对于个人项目来说维护成本非常夸张。

Flutter 则可以让大量:

text
UI
状态
逻辑
组件
网络层

实现跨平台复用。

同时它又不是简单的 WebView 套壳。

这对于月读空间来说非常适合。


二十五、客户端不会替代网站

未来 Flutter 客户端出现以后:

text
yachiyo.hk

依然会继续存在。

Web 版更适合:

  • 内容分享;
  • Wiki;
  • 公共页面;
  • 搜索引擎;
  • 社区;
  • 快速访问。

而 App 更适合:

  • 八千代;
  • Agent;
  • Live2D;
  • 本地文件;
  • 本地模型;
  • 系统通知;
  • 桌面常驻;
  • 离线缓存;
  • 原生系统能力。

最终可能形成:

text
                 月读空间 Backend
                       │
        ┌──────────────┼──────────────┐
        │              │              │
        ▼              ▼              ▼
       Web           Desktop        Mobile
    yachiyo.hk       Flutter        Flutter

大家共享:

text
账号
API
内容
记忆
数据

但拥有不同的交互方式。


二十六、Flutter 会让很多以前很难做的事情成为可能

浏览器很强。

但浏览器终究存在很多限制。

例如:

  • 本地文件;
  • 系统托盘;
  • 全局快捷键;
  • 后台运行;
  • 本地通知;
  • 原生窗口;
  • 本地模型;
  • 本地数据库;
  • 系统媒体控制;
  • 多窗口。

进入 Flutter 客户端后,就可以更加自然地考虑:

text
八千代桌面常驻

或者:

text
Agent 后台任务

甚至:

text
本地 Ollama
+
本地文件
+
长期记忆
+
MCP
+
Live2D

形成:

Cloud + Local Hybrid Agent

例如:

text
                八千代
                  │
        ┌─────────┴─────────┐
        │                   │
      Cloud               Local
        │                   │
   月读空间 API         Ollama
   Account              Files
   Memory               Tools
   Community            Local DB

这可能会成为未来月读空间非常重要的一条技术路线。


二十七、从网站,到真正的“月读空间”

如果回头看这个项目的发展,大概经历了几个阶段。

最开始只是:

text
个人主页

后来加入:

text
文章

然后加入:

text
用户
+
社区

再后来:

text
Live2D
+
八千代

之后又加入:

text
LLM
+
长期记忆
+
MCP

现在又出现:

text
Agent OS

下一阶段则会是:

text
Flutter App

所以这个项目的路线其实越来越清楚。

text
Website
   ↓
Community
   ↓
AI Character
   ↓
Memory
   ↓
Agent
   ↓
Agent OS
   ↓
Native Application
   ↓
Digital Space

这也是“月读空间”这个名字现在越来越符合项目本身的原因。

它已经不再只是:

一个放在互联网上的网站。

而是在逐渐变成:

一个能够承载内容、记忆、角色、工具与关系的数字空间。


写在最后

月读空间依然是一个个人维护的项目。

它不会像大型商业产品一样,有几十人的开发团队,也不会一次性完成所有设想。

很多功能都是:

text
想到
↓
尝试
↓
推翻
↓
重写
↓
发现问题
↓
继续优化

一点一点积累出来的。

现在服务器已经从:

text
2C2G

升级到了:

text
2C4G

静态资源和用户资源也开始通过:

text
Alibaba Cloud CDN
+
Alibaba Cloud OSS

进行分发。

接下来则会继续完成几件事情:

  1. 继续统一和优化月读空间 UI / UX;
  2. 继续优化 Room 与八千代的聊天体验;
  3. 进一步完善长期记忆;
  4. 继续推进 Live2D、情绪与语音联动;
  5. 继续完善 Agent OS;
  6. 推动 Agent 与 MCP 能力融合;
  7. 开始 Flutter 全平台客户端的设计与开发。

其中最后一项,也可能会成为月读空间下一阶段最重要的一次改变。

未来的月读空间,希望不会只是:

“打开浏览器访问一个网址。”

而可能是:

打开电脑,八千代就在这里。

打开手机,之前的聊天、记忆和空间仍然存在。

她知道你之前做过什么,也可以使用工具帮你继续完成事情。

文章、创作、社区、Agent、Live2D 与你的数字生活逐渐连接起来。

这大概就是我目前对于“月读空间”最终形态最接近的一种描述:

给日常留一点月光。
然后,让这束月光真正拥有记忆。


相关链接


本文记录的是月读空间当前阶段的技术实现与未来方向。项目仍然在快速开发中,因此部分架构和功能会随着后续版本继续变化。