L3 长期记忆
Mogick 的 L3 长期记忆系统能够在多次会话之间自动保留你的编码偏好、项目约定和关键决策。每次运行前后,系统会从本地 SQLite 数据库中检索相关记忆并注入模型上下文,运行结束后再从对话中自动抽取新的知识点。你可以随时通过 /memory 命令开关这一功能。
生命周期
记忆系统遵循"检索 -- 注入 -- 抽取"的完整闭环,确保每次对话都能受益于历史积累,同时不断更新知识库。
| 阶段 | 时机 | 说明 |
|---|---|---|
| 检索 | 每次运行前 | 从四个范围混合召回候选记忆 |
| 重排序 | 检索之后 | 按相关性排序,经指令矛盾过滤后保留最多 10 条 |
| 注入 | 重排序之后 | 注入模型上下文,总量不超过 8% 上下文窗口(最终数量可能少于 10 条) |
| 抽取 | 每次运行后 | LLM 异步提取新知,串行逐条保存 |
整个流程对用户透明。你只需正常与 Mogick 交互,记忆的存取完全在后台自动完成,无需手动干预。
检索范围与策略
记忆按归属范围分为四个层级,检索时从所有范围中混合召回。
全局范围存储跨项目通用的偏好,例如代码风格、工具链选择、语言偏好等,适用于你所有的项目。工作区范围与当前 Git 仓库或项目目录绑定,用于记录项目特定的约定,如分支策略、部署流程。包路径范围关联到具体的语言包或模块,适合记录库级别的使用习惯。会话范围仅在当前会话生命周期内有效,用于临时性的上下文传递。
检索采用语义向量与全文关键词混合排序策略。向量相似度捕捉语义层面的关联,全文搜索保证精确关键词匹配。如果当前环境没有可用的嵌入模型,系统会自动降级为纯全文搜索,功能不受影响但语义召回精度可能略有下降。
自动抽取
每次运行结束后,Mogick 会异步分析对话内容,自动识别并抽取以下类型的信息:
- 编码偏好:缩进风格、命名规范、格式化规则等个人编码习惯。
- 决策记录:错误处理方式、架构设计取舍、技术选型理由等关键判断。
- 项目约定:分支策略、部署流程、测试规范等团队级规则。
- 显式指令:用户明确说出的"记住"、"以后都这样"等直接指示,优先级最高。
抽取过程串行执行、逐条保存,避免并发写入导致的数据冲突。
去重与合并
新抽取的记忆可能与已有记忆产生冲突或重叠,系统按下表规则自动处理:
| 规则 | 行为 |
|---|---|
| 扩展 / 细化 | 合并为一条更新后的记忆,保留更丰富的信息 |
| 内容矛盾 | 以新知为准,覆盖旧记录 |
| 完全相同 | 跳过写入,避免冗余 |
| 用户主动创建 | 不被自动覆盖,手动记忆优先级高于自动抽取 |
这套规则确保记忆库在持续更新的同时,不会因自动抽取而丢失用户明确设定的偏好。
命令与配置
/memory 命令用于在 TUI 中切换记忆功能的开关状态。当你在处理敏感项目或希望临时关闭记忆时,直接输入 /memory 即可;再次执行会重新开启。
mogick doctor 可用于诊断记忆系统的健康状态,包括检查 SQLite schema 完整性和嵌入模型是否可用。
记忆系统默认处于开启状态。注入上限为 10 条记忆,且总内容不超过模型上下文窗口的 8%,防止记忆占用过多推理空间。所有数据存储在 <db-path> 中,检索方式为向量语义与全文搜索混合,无嵌入模型时自动降级。
路径占位符 <config-dir>、<db-path> 指当前 profile/通道实际生效的路径,见数据目录。