首页 项目介绍 技术文档

四级记忆系统概述

DreamChat 的四级记忆系统是整个项目的核心技术,它模拟人类大脑的记忆运转机制,让 AI 能够像人一样"记住"重要的事,"忘记"不重要的事。

本项目后端是创生软件的 Cortana 项目分支,针对角色进行专项优化。前端是 SG Chat 项目分支,针对 AI User 进行专项优化。

为什么需要四级记忆?

痛点问题描述DreamChat 解决方案
溢出大模型上下文有限,长期对话会溢出四级分层记忆体系,层层压缩只保留核心信息
暴涨全量对话历史留存导致成本线性增长日常只加载标题,按需检索详情,Token 降低 80%
千人一面所有用户共享同一套记忆按人物分类记忆,千人千面

记忆流转全景

短期记忆 (Short Term)
完整对话,秒级时间戳 · 保留最近一个话题 · 类比:人类的工作记忆
话题结束触发压缩
中期记忆 (Mid Term)
核心摘要 + 情感标签 · 时间精度降为小时级 · 类比:人类的情景记忆
定期提炼 (1-3天)
长期记忆 (Long Term)
标题 + 关键要点 · 时间精度降为天级/月级 · 类比:人类的语义记忆
极端重要信息提取
核心记忆 (Core)
AI 的"潜意识" · 每月最多 1-2 条 · 类比:人类的潜意识

短期记忆

短期记忆是 AI 的"工作记忆",存储正在思考的内容。保留最近一个话题的完整对话,不做任何压缩处理。

存储结构

{ "topic_id": "唯一话题ID", "conversations": [ {"role": "user", "content": "你好", "timestamp": 1713500000}, {"role": "assistant", "content": "嗨~在呢", "timestamp": 1713500005} ], "created_at": 1713500000 }

核心特性

  • 保留最近一个话题的完整对话内容
  • 不做任何压缩处理,保留精确时间戳
  • 话题结束后自动压缩到中期记忆,然后清空短期记忆
  • 每次新话题开始时生成新的 topic_id

触发压缩条件

条件说明
关键词用户说"再见"、"拜拜"、"下次聊"等
语义切换用户明显切换到完全不同的话题
AI 判断AI 在回复末尾添加 [TOPIC_ENDED] 标志

中期记忆

中期记忆是 AI 的"情景记忆",记得发生过什么事。每个已结束话题生成一条摘要,包含情感标签。

存储结构

[{ "id": "mid_1713500000", "topic_id": "关联的短期话题ID", "summary": "讨论周末去哪里玩的计划,最终决定去海边", "emotion_tags": { "basic_emotion": "开心", "scene": "闲聊", "atmosphere": "轻松" }, "message_count": 12, "time_precision": "hour", "extracted_to_long": false }]

核心特性

  • 包含情感标签(基础情感 + 对话场景 + 互动氛围)
  • 时间精度降级为小时级
  • 压缩率目标:≥70%
  • 标记 extracted_to_long 表示是否已提炼到长期记忆

情感标签体系

分类标签用途
基础情感 (6选1)开心、愉悦、失落、严肃、关心、好奇判断对话情绪
对话场景 (3选1)闲聊、讨论、求助理解对话目的
互动氛围 (3选1)轻松、平和、热烈把握交流节奏

长期记忆

长期记忆是 AI 的"语义记忆",记得知识点和事实。采用双层设计:索引列表 + 独立文档,实现 Token 优化。

双层架构

第一层:索引列表

long_term.json — 仅存储标题 + 关键要点,日常加载不占 Token

{ "id": "long_1713500000", "title": "周末出游计划", "key_points": ["想去海边", "周六出发"], "detail_file": "2026-03-15_周末出游计划.json" }

第二层:独立文档

long_term_details/ — 详细内容按需加载,大幅节省 Token

{ "title": "周末出游计划", "detail_content": "完整对话摘要...", "emotion_tags": { ... }, "source_mid_ids": ["mid_1713500000"] }

核心优势

  • 日常只加载索引(标题+要点),约 50 字/条
  • 详细内容单独存储,需要时才加载
  • Token 消耗基本恒定,不随时间增长
  • 提炼率目标:≥90%

核心记忆

核心记忆是 AI 的"潜意识",存储极端重要、刻骨铭心的信息。不参与常规上下文加载,隐性影响对话风格。

入库规则

规则说明
频率限制每月最多 1-2 条,避免泛滥
重要性评分必须 ≥ 8(满分 10)
稀缺性不确定时选择不创建
去重已存在相似内容则不创建

适合入库的内容

  • 用户的核心禁忌(如"极度恐高")
  • 用户的毕生执念(如"想成为一名作家")
  • 重大情感事件(如分手、死亡、重大事件)
  • 重大约定(如"每年生日都要送祝福")
  • 底层偏好(如"喜欢被称呼昵称")
  • 关系等级变化

与普通记忆的区别

特性普通记忆核心记忆
性质显性记忆,可调取潜意识,隐性影响
内容日常对话信息极端重要信息
数量限制无硬性限制每月最多 1-2 条
修改权限可删改不可随意删改

记忆系统工作流程

用户发送消息的完整流程

用户发送消息
保存到短期记忆
构建对话上下文
AI 生成回复
话题结束检测
记忆处理

对话上下文构建

日常对话上下文 = 系统提示词 (base_soul + self_soul + system_instructions) + 核心记忆 (按重要性排序,最多5条) + 中期记忆 (最近已结束话题摘要) + 长期记忆 (仅索引列表:标题 + 要点) + 短期记忆 (完整对话) + 用户当前消息

话题压缩流程

检测话题结束
加载短期记忆
Qwen 压缩摘要
情感识别
保存中期记忆
清空短期记忆

记忆提炼流程

定期触发 (1-3天)
查找未提炼中期记忆
Doubao 提炼标题+要点
保存长期记忆索引
生成独立文档

双灵魂人格系统

DreamChat 采用双灵魂设计,让 AI 拥有稳定的基础性格和动态的自我认知,实现人格的动态进化。

先天灵魂

base_soul

  • 用户手动配置的基础人格
  • 定义身份、基础偏好、说话风格
  • 修改频率极低,仅在角色设定时修改
  • 仅用户可修改,AI 不可更改
  • 存储位置:config.json
后天养成

self_soul

  • AI 自主配置的详细人格
  • 根据对话反思后的自我认知
  • 低频、谨慎更新,AI 自主决定
  • AI 可通过 update_self_soul 更新
  • 存储位置:self_soul.json

人格组装

// 完整系统提示词组装 完整人格 = base_soul + "【自我认知】" + self_soul

自我认知更新提示词

你是{ai_name},现在请你反思一下自己的性格、偏好和特点。 【基础性格设定】 {base_soul} 【最近的对话记录】 {recent_conversations} 【当前的自我认知】 {current_self_soul} 【更新要求】 1. 根据最近的对话,反思自己是否有新的变化 2. 可以调整兴趣爱好、说话风格、偏好等 3. 人是会变的,要真实地反映自己的变化 4. 注意:这不是记忆,这是你对自己的认知 5. 更新要谨慎、低频,只有真正有变化时才更新 6. 保持与基础性格设定不冲突

关系等级系统

AI 与用户的关系等级动态变化,影响心跳频率和回复态度。关系等级存储在核心记忆中,AI 可通过 update_relationship 工具自主更新。

关系等级心跳间隔回复率说明
特别关心20 分钟95%非常在意对方,主动找话题
关系较好24 小时80%喜欢聊天,回复积极
一般72 小时60%普通朋友,正常交流
关系冷淡7 天30%不太想说话,回复敷衍
决裂999 天5%不想理对方,拒绝沟通

心跳机制

心跳机制是赋予 AI 主动说话的能力。心跳不是系统消息,不是特殊回复,而是让 AI 像真人一样在合适时机主动联系你。

心跳流程

触发心跳
将心跳提示词发给 AI
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 条独立消息
  • 每条消息之间用换行符分隔
  • 可以不回复(已读不回),这是正常的
  • 关系冷淡时更可能不回复或回复敷衍

消息延时

// 每条消息根据字数计算延时 延时公式:(0.5 + 随机数 × 0.7) × 字数 // 示例 10个字 → 5.0 ~ 12.0 秒 5个字 → 2.5 ~ 6.0 秒 20个字 → 10.0 ~ 24.0 秒

工具调用系统

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 格式

{ "type": "function", "function": { "name": "工具名称", "description": "工具描述", "parameters": { "type": "object", "properties": { /* 参数定义 */ }, "required": ["必填参数"] } } }

多模型协同架构

DreamChat 采用"主模型核心交互 + 辅助模型后台运维"的组合方案,不同任务使用最合适的模型。

DeepSeek V3.2
主对话交互
128K 上下文
Qwen-Plus
短期→中期压缩
长文本总结
Doubao-Pro-32K
中期→长期提炼
信息提取
DeepSeek V3.2
核心记忆判断
严格筛选
模型 Key模型名称用途特点
deepseek_chatDeepSeek-V3.2主对话交互拟人化表达,128K
deepseek_reasonerDeepSeek-V3.2深度思考对话保留完整思考链
qwen_short_to_midQwen-Plus短期→中期压缩总结能力强,成本低
doubao_mid_to_longDoubao-Pro-32K中期→长期提炼信息提取精准
deepseek_core_memoryDeepSeek-V3.2核心记忆判断高质量判断

API 接口参考

认证接口

POST/api/auth/login用户登录
POST/api/auth/refresh刷新 Token
POST/api/auth/logout用户登出
GET/api/auth/user获取当前用户信息

AI 用户接口

GET/api/ai-users获取所有 AI 用户列表
GET/api/ai-users/{user_id}获取指定 AI 用户信息
POST/api/ai-users创建 AI 用户
PUT/api/ai-users/{user_id}更新 AI 用户信息
DELETE/api/ai-users/{user_id}删除 AI 用户

聊天接口

POST/api/ai-users/{user_id}/chat与 AI 用户聊天 (SSE)
POST/api/ai-users/{user_id}/save-message保存用户消息

记忆接口

GET/api/memory/{user_id}获取记忆上下文
GET/api/memory/{user_id}/files获取记忆文件详情
PUT/api/memory/{user_id}/{memory_type}更新指定记忆类型
POST/api/memory/{user_id}/compress触发话题压缩
POST/api/memory/{user_id}/extract触发记忆提炼

人格接口

GET/api/soul/{user_id}获取 AI 人格信息
POST/api/soul/{user_id}/update更新 AI 自我认知
POST/api/relationship/{user_id}/judge判断关系等级

心跳接口

GET/api/heartbeat/status获取心跳状态
POST/api/heartbeat/configure配置心跳参数
POST/api/heartbeat/start启动心跳
POST/api/heartbeat/trigger/{user_id}手动触发心跳

好友接口

GET/api/friends获取好友列表
POST/api/friends/{user_id}添加好友
DELETE/api/friends/{user_id}删除好友

Token 优化策略

四级记忆系统通过分层压缩和按需加载,实现了显著的 Token 节省效果。

日常对话加载策略

日常对话上下文 = 系统提示词 (base_soul + self_soul + system_instructions) + 核心记忆 (按重要性排序,最多5条) + 中期记忆 (最近5个摘要) + 长期记忆 (仅索引列表:标题 + 要点,不加载详细文档) + 短期记忆 (完整对话) + 用户当前消息

关键优化点

  • 长期记忆只加载索引(标题+要点),详细内容在独立文件中,日常不加载
  • 中期记忆只加载最近 5 个
  • 核心记忆只加载重要性最高的 5 条
  • 长期记忆详细文档按需加载,大幅节省 Token

双层架构的 Token 优势

传统方案

每次对话加载全部长期记忆(标题 + 详细内容)→ Token 消耗随时间线性增长

双层方案

日常只加载索引(约50字/条)→ 详细内容单独存储,需要时才加载 → Token 消耗基本恒定

按需检索策略

用户提问
在长期记忆索引中搜索
找到匹配标题
按需加载详细内容
提取关键信息返回

压缩质量标准

压缩阶段关键指标目标值
短期→中期信息完整性≥ 80%
短期→中期压缩率≥ 70%
中期→长期核心要点提取准确率≥ 90%
中期→长期提炼率≥ 90%