给聊天机器人一套能长期跑的记忆、情绪、表达和生活层。 不是新算法,是一套可落地的工程整合。
使用许可:本项目源代码公开,禁止商业使用。 商业部署、商业产品集成、收费服务等必须事先取得作者书面授权;未经授权将追究法律责任。 详见 LICENSE。
- AstrBot 用户:装
plugins/下的插件,得到完整角色(记忆、情绪、生活层、面板) - DSH 桌面版:用
dsh/,3D 大脑 + 跨会话开机包 - qqbridge:本次不适配,也没有测试环境
接入文档:
普通机器人聊完就忘。这里做了五件事:
- 记忆:事件 / 事实 / 反思 / 技能 / 道理,五种分开存
- 检索:向量 + 关键词 + 实体图谱 + 重要性 + 新鲜度,五路混合
- 遗忘:衰减、归档、相似合并、冲突检测、体检
- 情绪:PAD 三维 + 标签,有上限、有半衰期、不主导判断
- 生活:你没找她时,她也会看书、刷视频、午睡,笔记回流记忆
- 时间:问“早上/昨天”时按时间取原话和事件,不靠语义碰运气
- 提醒:说明天三点叫你,到点主动发消息
- 备份:每天自动备份记忆、情绪和生活层,保留 7 份
这是硬约束:
- 人格文件只读,所有增强都是往 system_prompt 追加“注入块”
- 每个注入块带 marker,重复注入先删旧块
- 每个模块一个开关,默认关,关掉后她还是原来的她
- 生活层只写自己的目录,不碰人格和聊天数据
plugins/ 四个 AstrBot 插件
astrbot_plugin_memory_brain 记忆库
astrbot_plugin_persona_state 情绪 / 好感 / 识海
astrbot_plugin_human_style_guard 发送前清洗
astrbot_plugin_self_style 自我档案 / 语气样例
life/ 生活层(独立进程,可选)
docs/ 框架图、设计说明
eval/ 检索评估集(示例)
tests/ 单元测试(不需要 AstrBot)
tools/ 评估脚本
把 plugins/ 下四个目录放进 AstrBot/data/plugins/,重启。
依赖:
pip install faster-whisper pilk # 可选:语音转写embedding 自己配:默认读插件配置里的 embedding_provider_id,没配就退化为关键词检索。
cd life
python life_loop.py --once # 干跑
python life_loop.py --send # 常驻不配任何环境变量也能跑,只是不刷手机、不发消息。
- 只开写入,不开注入,跑一天看摘要质量
- 私聊开注入,再开群聊
- 最后接情绪层
- 建 20–40 条自己的评估集,改一次跑一次
| 指标 | 参考 |
|---|---|
| 单轮上下文 | 1.5–1.8 万 token,其中记忆注入约 300 token(≈2%) |
| 记忆规模 | 每天 60 条 → 一年 2.2 万条;十年 22 万条,约 2.4GB |
| 实际占用 | 开着 180 天清理时,稳定在 100–200MB |
| 检索延迟 | 当前规模 p50 约 120–140ms(含 embedding),纯检索约 40ms;10 万条以上建议加 ANN 索引 |
| 成本 | DeepSeek 暖缓存实测约 0.4–0.6 分/轮;冷启动、工具轮、长上下文另计;本地模型 0 |
| 生活层 | 一天 20–40 轮动作,笔记 3 条以上 |
结论:存储不是瓶颈,保留策略才是。 十年不用换硬件,想记更久就关掉 180 天清理。
成本一行来自 7 条暖缓存 webchat 和 9 条暖缓存 QQ 私聊样本; 不是长期承诺。QQ 群聊、超过 32 轮后的批量裁剪、冷启动仍需按自己的数据复测。
仓库带了一份示例评估集和脚本:
python tools/eval_memory.py --brain path/to/brain.db --queries eval/queries.example.jsonl我们在 40 条中文真实问法上的结果(仅供参考,和模型、数据强相关):
recall@1 70% · recall@3 90% · recall@5 95% · MRR 0.80
端到端 p50 约 120–140ms(含 embedding),纯检索约 40ms
python -m unittest discover -s tests只依赖标准库 + numpy,不需要 AstrBot。
- AstrBot 4.29.x
- Python 3.12
- SQLite(内置)
- 可选:Ollama / bge-m3、faster-whisper、ffmpeg、adb
AGPL-3.0-or-later。因为 AstrBot 本身是 AGPL-3.0,插件作为衍生作品沿用同一协议。
- 仓库不含任何个人数据、聊天记录、人格文本
- 示例里的“角色/用户”都是占位符
- 情绪和记忆会让人更像人,但也请别用它替代真实关系

