心闪 3.x 的逻辑越堆越厚:聊天、记忆、插件、更新全挤在一层里,改一处就要回归一圈。所以 V4.0 的第一个决定是——把内核重写成容器,其他一切都变成插件。

内核只做容器

新的内核用 C++17 写,参考 Cordis 的插件式设计,把职责拆成五个角色:

  • Context:插件运行的上下文,拿到服务、事件和配置;
  • Plugin:能力的最小单位,可以运行时加载和卸载;
  • Service:模型、数据库、文件、网络这类可被依赖的服务;
  • Bus:唯一一条消息总线,前端和内核通过它通信;
  • WorkerPool:把耗时任务丢到线程池,不堵 UI 线程。

插件通过 C ABI 以 .so 动态库的形式被 dlopen,插件之间只依赖服务名和事件,不互相引用。这样一来,能力可以热加卸载,崩溃的影响面也被关在一个插件里。

前端也是插件

界面用 Kotlin + Jetpack Compose 重写。每个页面都会被声明成一条 FrontendFeature(id / title / icon / order + @Composable Screen),注册之后自动出现在导航里。没有 XML 布局,也没有命令式页面跳转,状态全部由 StateFlow 驱动。

前端和内核之间是一条消息总线:前端发 action 转成内核 RPC,内核回事件、前端订阅。请求、响应和 trace 共用同一条通道,排查问题时能沿着 id 一路追到底。

四层角色记忆

这是 V4.0 最想做好的一件事:让 AI 角色真正记住你。参考 TencentDB Agent Memory 的分层设计,记忆被拆成四层:

  • L0 原始对话:会话与消息原文,完整保存在本机;
  • L1 原子记忆:从对话里抽取的单条事实、偏好、事件;
  • L2 场景记忆:按场景归档的事件摘要;
  • L3 核心记忆:稳定画像与长期设定,决定角色的长期性格。

每轮对话结束后由 AI 自动抽取并落层,越聊越懂你;也可以手动修正和微调,记忆不是黑盒。

网络层

网络层自己写:mbedTLS 3.6 + SSE,HTTPS 自己解析请求、取消、超时和 chunked 流式回复,兼容任意 OpenAI 兼容接口,也能直连本地模型。流式回复在 UI 上是打字机效果,停止生成、重新生成这些操作都能即时生效。

现在到哪了

界面与内核已经完成,正在持续打磨细节:会话列表、流式回复、角色记忆页、插件管理、总线追踪面板都已经在 DEMO 里跑通。下一步是内测版本准备和稳定性打磨。

想先看看界面和更多爆料,可以先到 心闪 V4.0 项目页;等不及的话,心闪 V3 系列现在就能下载使用。