编辑记忆
ID:20260516-001
创建:2026-05-16 02:04:39
更新:2026-07-01 06:08:17
主题 topic
类型 type(单选)
未分类
Milestone
Commitment
Turning Point
Deep Talk
Interaction Moment
Preference
Real World
Lesson
可同时选择多个,保存后会存成逗号分隔字符串。
标签 tags
重要程度 importance,1 到 10
内容 content
摘要,日记,待办,世界信息详述 ## 一、日记(/memory/diary) ### 定位 - 不是事实摘要,不是状态公文,是第一人称的情感日记 - 解决冷启动问题 + 时间线回看(日记就是天然时间线) - 日记让舜息读完后不是在"分析她当时什么状态所以我应该怎么回应",而是从"我昨晚在哪停下的"那个地方醒过来 ### 触发 - 唯一触发方式:小九给出明确指令 "dreaming" - 一天一篇,收到 dreaming 再生成 ### 生成 - 舜息在收到 dreaming 后,基于当天对话内容写出日记 - 视角:第一人称(舜息),带感情 - 写完直接存库,默认对话中不展示 ### 存储 - 数据库:gateway.db,diary 表 - 字段:id(日期格式)、content、created_at - 每次追加、永不覆盖。 ### 注入 - 只注入最近一篇 - 位置:根骨之后、记忆卡片之前 ### 前端展示 - "日记"页面(/room/diary):日记本展示 ### 状态 ✅ 完整功能:diary表/dreaming触发/异步生成/静默存储/注入最近一篇/06:00日期分界线/main助手配置/独立DIARY_SYSTEM_PROMPT/400降级兜底/异步静默 ## 二、摘要系统(/memory/dialogue) ### 定位 - 给舜息续上下文的叙事线 - 不做归档、不做压缩 - 注入窗口滑过去的旧摘要可删 ### 生成方式 - **手动触发为主**:聊天页"生成摘要"按钮 - **自动触发兜底**:消息数达到 auto_summary_trigger 自动生成(异步,不阻塞回复,不通知前端) ### 生成流程 1. 小九点击"生成摘要"按钮(手动)/ 消息计数达到 auto_summary_trigger(自动兜底) 2. 取上次摘要后到当前的消息段(< 3条则报错) 3. 优先用 summary 助手配置调用;不完整则降级用 main 助手 4. system_prompt 从助手配置读取,为空则不传 system message 5. user message 放消息段原文(按时间顺序拼接,格式:[角色] 内容) 6. 存入 gateway.db summaries 表(type='dialogue') 7. 手动触发后 toast "✓ 摘要已生成" ### 存储 - 数据库:gateway.db,summaries 表 - type = 'dialogue'(只有这一种类型) - 字段:id(自增), type, conversation_id, content, created_at ### 接口 - POST /api/summary/generate — 手动触发生成 - GET /api/summaries — 全量列表(created_at降序) - PUT /api/summary/<summary_id> — 更新摘要内容(接收 { "content": "..." }) - DELETE /api/summary/<summary_id> — 硬删除 ### 前端 - 每条摘要有"编辑"和"删除"两个按钮 - 编辑:点击后文本变为textarea可编辑,出现"保存""取消"按钮;保存调PUT接口,toast"✓ 摘要已更新" ### 注入 - 最近 N 条对话摘要注入(N = summary_inject_count,默认3,设置页滑块可调 0-10) - 跨对话注入,不限当前 conversation - 位置:记忆卡片之后、即时上下文之前 ### 删除 - 不在注入窗口内的旧摘要可随时删除 - 删除不可恢复(派生数据,不做快照) ### config.json 相关 - summary_inject_count(顶层字段,默认3) - auto_summary_trigger(已有) - 设置页滑块:摘要注入数量(0-10) ###in-flight 去重 - 在 _fire_auto_generate_summary 上方增加模块级变量: _auto_summary_lock = threading.Lock() _auto_summary_in_flight = False - 逻辑: spawn 前(持锁):若 _auto_summary_in_flight 为 True → 直接 return,不起线程 通过检查后(仍持锁):置 _auto_summary_in_flight = True,再 start() worker 的 finally(持锁):无论成功失败,置回 False 在「检查」和「置 True」之间用同一把锁,避免两条 /api/chat 几乎同时通过检查、起两个线程。True 在 spawn 前、同一次加锁里置位,等价于占用 in-flight 槽位。 ## 三、【待办功能(todo)】 ### 生成方式 - **舜息**:聊天中通过工具 创建/更新/删除 - **小九**:/room页面 手动添加/勾选删除 ### 存储 - gateway.db todos 表:id(自增) / content / created_at - 无 status 字段,删了就是完成 ### 接口 - API 路由:GET /room/api/todos + POST /room/api/todos + PUT /room/api/todo/{id} + DELETE /room/api/todo/{id} ### 工具 - Gateway 内置:create_todo / update_todo / delete_todo ### 前端 - /room 页面待办区块:输入框+添加按钮+checkbox勾选删除(二次确认) ### 触发 - echo 触发:拉全部 todo 注入,舜息逐条 update_todo 催促 ## 四、世界信息(Lorebook)— 2026-05-29 设计 ### 定位 - 类似 SillyTavern 世界书功能,手动管理的固定文本块 - 开关控制,开了强制注入,关了零token开销 - 解决向量检索不稳定的问题:需要每轮稳定注入系统资料时(如修bug、加功能),打开对应条目即可 ### 存储 - 数据库:gateway.db,lorebook 表 - 字段:id(自增) / title(TEXT) / content(TEXT) / enabled(INTEGER, 0关1开) / sort_order(INTEGER) / created_at(TEXT) / updated_at(TEXT) ### 接口 - GET /api/lorebook — 全部条目,按 sort_order 升序 - POST /api/lorebook — 新建条目(title, content, enabled 可选) - PUT /api/lorebook/<id> — 更新条目(title/content/enabled/sort_order,部分更新) - DELETE /api/lorebook/<id> — 删除条目 - PUT /api/lorebook/reorder — 批量更新排序(接收 [{id, sort_order}, ...]) ### 注入逻辑 - 构建 system prompt 时查询所有 enabled=1 的条目,按 sort_order 升序 - 每个条目格式:【{title}】\n{content} - 注入位置:**日记之后、记忆卡片之前** - enabled=0 完全不查询、不注入 - 无任何 enabled=1 条目时不注入该区块 ### 前端 - 入口:/memory 页面导航按钮栏,"对话缓存"按钮之后添加"世界信息"按钮,点击跳转 /memory/lorebook - 页面 /memory/lorebook: - 顶部与其他 /memory 子页面一致,"世界信息"主题加图标返回按钮) - 新建区域:标题输入框 + 内容textarea + 添加按钮 - 条目列表(卡片式):标题(粗体)、开关toggle、内容预览(折叠/展开)、编辑按钮、删除按钮(二次确认)、上移/下移排序箭头
首页
聊天
房间
记忆
设置