它由哪几部分组成
一个人格背后有几块东西:住的地方(运行时)、说话的地方(聊天平台)、拿主意的(认知内核)、记事的(记忆核心)、过日子的(生活引擎),外加看它、调它的网页后台和桌面版。
运行时:住的地方
人格们住在一个在后台一直跑着的程序里,叫运行时。一个运行时里可以住好几个人格;每个人格有自己的配置、自己的数据库(聊天、记忆、关系都在里面)、自己的账号。一个出了问题,只影响它自己,别的照常。
桌面版只是运行时的外壳:负责启动、停止、更新、备份、诊断;关掉桌面版的窗口,运行时照样在。
聊天平台:说话的地方
现在接了 Discord 和 QQ(QQ 经过本机的 NapCat)。平台层只做四件事:连上收消息、发消息、撤回和点表情、拉历史。认人、认群、私聊合并、断线以后补看,都在平台层之上统一做,所以它在哪个平台都是同一个人(2.25)。
认知内核:拿主意的
每条消息、每个「想找人」的念头,都先到这里:十六位专家各提一个做法,过护栏,打分,挑一个(2.7)。这一步不调用模型;拿不准、牵扯多的,才把模型叫来规划一步。
模型:想和说
模型分三个角色,可以各用各的(网页后台「配置管理 → 模型服务」里的「按角色选模型」):
- 规划和判断:要想一想的时候规划一步;判断一句话是不是在请它做事。
- 写回复:按人格设定把话写出来。
- 后台学习:整理记忆、学说话方式和新词、刷新对人的印象。不着急,可以用便宜一点的。
记忆核心:记事的
记下聊天里值得记的事,分清现在和以前,被更正的不再当真;想起来的时候先过隐私的门,再按配额凑出一包回忆。它睡着的时候把记忆整理一遍(2.11、2.12)。
生活引擎:过日子的
它自己的日子:几点困、几点醒(2.16),接下来几个小时打算做什么,偶尔发呆、做白日梦;精力、心情、想不想说话,随着聊天和时间变(2.18)。这些会影响它看不看手机、回不回、回得多快。
网页后台和插件
网页后台把上面这些都摆出来:它此刻在想什么、每次为什么回或不回、记住了什么、认识谁,和所有设置(1.20)。插件在同一个运行时里给它加本事,装之前列出要用的能力(1.19)。
对应的代码
- 运行时和人格:
src/aeria/supervisor.py、src/aeria/personas.py(注册表、绑定)。 - 平台层:
src/aeria/platform_bridge.py、src/aeria/qq_bridge.py,Discord 在src/aeria/bot.py。 - 认知内核:
src/aeria/cognition/(kernel.py、experts/、guards.py、arbitration.py、router.py)。 - 模型的三个角色:
src/aeria/config.py的ModelRolesConfig(planner、replyer、background)。 - 记忆核心:
src/aeria/hmc/;生活引擎:src/aeria/cognition/life_engine.py、sleep_rhythm.py、drives.py。 - 网页后台:
src/aeria/webui.py+webui_frontend/;桌面版:desktop/;插件:src/aeria/plugins.py。
没做到的
- 只接了 Discord 和 QQ。平台层留好了加新平台的位置,但别的平台还没有适配器。
- 运行时只在一台电脑上跑:同一个人格不能同时在两台电脑上醒着,也不能把运行时放在一台、网页后台开在另一台(除非自己改监听地址、加 HTTPS)。