四级记忆系统概述
DreamChat 的四级记忆系统是整个项目的核心技术,它模拟人类大脑的记忆运转机制,让 AI 能够像人一样"记住"重要的事,"忘记"不重要的事。
本项目后端是创生软件的 Cortana 项目分支,针对角色进行专项优化。前端是 SG Chat 项目分支,针对 AI User 进行专项优化。
为什么需要四级记忆?
| 痛点 | 问题描述 | DreamChat 解决方案 |
|---|---|---|
| 溢出 | 大模型上下文有限,长期对话会溢出 | 四级分层记忆体系,层层压缩只保留核心信息 |
| 暴涨 | 全量对话历史留存导致成本线性增长 | 日常只加载标题,按需检索详情,Token 降低 80% |
| 千人一面 | 所有用户共享同一套记忆 | 按人物分类记忆,千人千面 |
记忆流转全景
短期记忆
短期记忆是 AI 的"工作记忆",存储正在思考的内容。保留最近一个话题的完整对话,不做任何压缩处理。
存储结构
核心特性
- 保留最近一个话题的完整对话内容
- 不做任何压缩处理,保留精确时间戳
- 话题结束后自动压缩到中期记忆,然后清空短期记忆
- 每次新话题开始时生成新的 topic_id
触发压缩条件
| 条件 | 说明 |
|---|---|
| 关键词 | 用户说"再见"、"拜拜"、"下次聊"等 |
| 语义切换 | 用户明显切换到完全不同的话题 |
| AI 判断 | AI 在回复末尾添加 [TOPIC_ENDED] 标志 |
中期记忆
中期记忆是 AI 的"情景记忆",记得发生过什么事。每个已结束话题生成一条摘要,包含情感标签。
存储结构
核心特性
- 包含情感标签(基础情感 + 对话场景 + 互动氛围)
- 时间精度降级为小时级
- 压缩率目标:≥70%
- 标记 extracted_to_long 表示是否已提炼到长期记忆
情感标签体系
| 分类 | 标签 | 用途 |
|---|---|---|
| 基础情感 (6选1) | 开心、愉悦、失落、严肃、关心、好奇 | 判断对话情绪 |
| 对话场景 (3选1) | 闲聊、讨论、求助 | 理解对话目的 |
| 互动氛围 (3选1) | 轻松、平和、热烈 | 把握交流节奏 |
长期记忆
长期记忆是 AI 的"语义记忆",记得知识点和事实。采用双层设计:索引列表 + 独立文档,实现 Token 优化。
双层架构
第一层:索引列表
long_term.json — 仅存储标题 + 关键要点,日常加载不占 Token
第二层:独立文档
long_term_details/ — 详细内容按需加载,大幅节省 Token
核心优势
- 日常只加载索引(标题+要点),约 50 字/条
- 详细内容单独存储,需要时才加载
- Token 消耗基本恒定,不随时间增长
- 提炼率目标:≥90%
核心记忆
核心记忆是 AI 的"潜意识",存储极端重要、刻骨铭心的信息。不参与常规上下文加载,隐性影响对话风格。
入库规则
| 规则 | 说明 |
|---|---|
| 频率限制 | 每月最多 1-2 条,避免泛滥 |
| 重要性 | 评分必须 ≥ 8(满分 10) |
| 稀缺性 | 不确定时选择不创建 |
| 去重 | 已存在相似内容则不创建 |
适合入库的内容
- 用户的核心禁忌(如"极度恐高")
- 用户的毕生执念(如"想成为一名作家")
- 重大情感事件(如分手、死亡、重大事件)
- 重大约定(如"每年生日都要送祝福")
- 底层偏好(如"喜欢被称呼昵称")
- 关系等级变化
与普通记忆的区别
| 特性 | 普通记忆 | 核心记忆 |
|---|---|---|
| 性质 | 显性记忆,可调取 | 潜意识,隐性影响 |
| 内容 | 日常对话信息 | 极端重要信息 |
| 数量限制 | 无硬性限制 | 每月最多 1-2 条 |
| 修改权限 | 可删改 | 不可随意删改 |
记忆系统工作流程
用户发送消息的完整流程
对话上下文构建
话题压缩流程
记忆提炼流程
双灵魂人格系统
DreamChat 采用双灵魂设计,让 AI 拥有稳定的基础性格和动态的自我认知,实现人格的动态进化。
base_soul
- 用户手动配置的基础人格
- 定义身份、基础偏好、说话风格
- 修改频率极低,仅在角色设定时修改
- 仅用户可修改,AI 不可更改
- 存储位置:config.json
self_soul
- AI 自主配置的详细人格
- 根据对话反思后的自我认知
- 低频、谨慎更新,AI 自主决定
- AI 可通过 update_self_soul 更新
- 存储位置:self_soul.json
人格组装
自我认知更新提示词
关系等级系统
AI 与用户的关系等级动态变化,影响心跳频率和回复态度。关系等级存储在核心记忆中,AI 可通过 update_relationship 工具自主更新。
| 关系等级 | 心跳间隔 | 回复率 | 说明 |
|---|---|---|---|
| 特别关心 | 20 分钟 | 95% | 非常在意对方,主动找话题 |
| 关系较好 | 24 小时 | 80% | 喜欢聊天,回复积极 |
| 一般 | 72 小时 | 60% | 普通朋友,正常交流 |
| 关系冷淡 | 7 天 | 30% | 不太想说话,回复敷衍 |
| 决裂 | 999 天 | 5% | 不想理对方,拒绝沟通 |
心跳机制
心跳机制是赋予 AI 主动说话的能力。心跳不是系统消息,不是特殊回复,而是让 AI 像真人一样在合适时机主动联系你。
心跳流程
心跳类型
| 类型 | 触发条件 | 说明 |
|---|---|---|
| 定时心跳 | 用户离线超过关系等级间隔 | 根据关系等级自动计算间隔 |
| 计划心跳 | AI 设置的定时任务 | 如每天 9:30 说早安 |
夜间减速
- 默认夜间时段:23:00-07:00,心跳间隔延长 3 倍
- 夜猫子性格的 AI:夜间时段为 02:00-10:00
- 定时心跳不受夜间减速影响
AI 自主决策
- AI 可以决定不打扰用户(回复 HEARTBEAT_OK)
- AI 可以自主调整下次心跳时间
- 心跳消息保存到 conversation.json 和短期记忆,不特殊对待
回复决策系统
收到用户消息后,AI 自主决定是否回复、如何回复。这是实现拟人化交互的关键系统。
决策因素
| 因素 | 影响 |
|---|---|
| 关系等级 | 关系越好,回复率越高 |
| 当前心情 | 影响回复态度 |
| 时间段 | 深夜可能回复更简短或更感性 |
| 消息内容 | 无聊的消息可能已读不回 |
回复方式
- 如果要回复,发送 1-5 条独立消息
- 每条消息之间用换行符分隔
- 可以不回复(已读不回),这是正常的
- 关系冷淡时更可能不回复或回复敷衍
消息延时
工具调用系统
AI 在对话过程中可以自主调用以下工具,通过 OpenAI 标准的 Function Calling 格式定义。
| 工具名称 | 功能 | 参数 |
|---|---|---|
| update_self_soul | 更新自我性格认知 | new_content: 新的自我描述 |
| update_relationship | 更新关系等级 | level, heartbeat_hours, reason |
| set_scheduled_heartbeat | 设置定时心跳 | hour, minute, message_template |
| remove_scheduled_heartbeat | 删除定时心跳 | hour, minute |
| get_current_state | 查询当前状态 | 无 |
| search_web | 网络搜索 | query: 搜索关键词 |
Function Calling 格式
多模型协同架构
DreamChat 采用"主模型核心交互 + 辅助模型后台运维"的组合方案,不同任务使用最合适的模型。
| 模型 Key | 模型名称 | 用途 | 特点 |
|---|---|---|---|
| deepseek_chat | DeepSeek-V3.2 | 主对话交互 | 拟人化表达,128K |
| deepseek_reasoner | DeepSeek-V3.2 | 深度思考对话 | 保留完整思考链 |
| qwen_short_to_mid | Qwen-Plus | 短期→中期压缩 | 总结能力强,成本低 |
| doubao_mid_to_long | Doubao-Pro-32K | 中期→长期提炼 | 信息提取精准 |
| deepseek_core_memory | DeepSeek-V3.2 | 核心记忆判断 | 高质量判断 |
API 接口参考
认证接口
AI 用户接口
聊天接口
记忆接口
人格接口
心跳接口
好友接口
Token 优化策略
四级记忆系统通过分层压缩和按需加载,实现了显著的 Token 节省效果。
日常对话加载策略
关键优化点
- 长期记忆只加载索引(标题+要点),详细内容在独立文件中,日常不加载
- 中期记忆只加载最近 5 个
- 核心记忆只加载重要性最高的 5 条
- 长期记忆详细文档按需加载,大幅节省 Token
双层架构的 Token 优势
传统方案
每次对话加载全部长期记忆(标题 + 详细内容)→ Token 消耗随时间线性增长
双层方案
日常只加载索引(约50字/条)→ 详细内容单独存储,需要时才加载 → Token 消耗基本恒定
按需检索策略
压缩质量标准
| 压缩阶段 | 关键指标 | 目标值 |
|---|---|---|
| 短期→中期 | 信息完整性 | ≥ 80% |
| 短期→中期 | 压缩率 | ≥ 70% |
| 中期→长期 | 核心要点提取准确率 | ≥ 90% |
| 中期→长期 | 提炼率 | ≥ 90% |