Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions content/cn/open_source/modules/mem_chat.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: MemChat
desc: "MemChat 是你的 Agent 的‘外交官’,它协调用户输入、记忆检索与 LLM 生成,打造连贯且具备长期记忆的对话体验。"
desc: "MemChat 是你的“记忆外交官”,它协调用户输入、记忆检索与 LLM 生成,打造连贯且具备长期记忆的对话体验。"
---

## 1. 简介
Expand All @@ -17,7 +17,7 @@ desc: "MemChat 是你的 Agent 的‘外交官’,它协调用户输入、记
在回答用户问题前,MemChat 会自动从 MemCube 中检索相关的 Textual Memory(文本记忆),将其注入到 Prompt 中。这使得 Agent 能够基于过往的交互历史或知识库来回答问题,而不仅仅依赖于 LLM 的预训练知识。

### 自动记忆沉淀 (Auto-Memorization)
对话不仅仅是消耗 tokens,MemChat 会利用 Extractor LLM 自动从对话流中提取有价值的信息(如用户偏好、事实知识),并将其存储到 MemCube 中。这个过程是自动化的,无需用户手动干预。
对话后,MemChat 会利用 Extractor LLM 自动从对话流中提取有价值的信息(如用户偏好、事实知识),并存储到 MemCube 中。无需用户手动干预,整个过程完全自动化

### 上下文管理
自动管理对话历史窗口 (`max_turns_window`)。当对话过长时,它会智能裁剪旧的上下文,同时依赖检索到的长期记忆来保持对话的连贯性,有效解决了 LLM Context Window 的限制问题。
Expand All @@ -34,7 +34,6 @@ desc: "MemChat 是你的 Agent 的‘外交官’,它协调用户输入、记
* **`simple.py`**: **默认实现 (SimpleMemChat)**。这是一个开箱即用的 REPL(Read-Eval-Print Loop)实现,包含了完整的“检索 -> 生成 -> 存储”闭环逻辑。
* **`base.py`**: **接口定义 (BaseMemChat)**。定义了 MemChat 的基本行为,如 `run()` 和 `mem_cube` 属性。
* **`factory.py`**: **工厂类**。负责根据配置 (`MemChatConfig`) 实例化具体的 MemChat 对象。
* **`llm_chat.py`**: **LLM 交互层**。处理与底层 LLM 的具体通信细节。

---

Expand Down
34 changes: 23 additions & 11 deletions content/cn/open_source/modules/mem_cube.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
---
title: MemCube 概述
desc: "`MemCube` 是 MemOS 中的核心组织单元,专为封装和管理用户或代理的所有类型记忆而设计。它为加载、保存和操作多个记忆模块提供统一接口,使构建、共享和部署记忆增强应用程序变得容易。"
title: MemCube
desc: "MemCube 是你的“记忆收纳箱”,统一管理三种类型的记忆:明文记忆、激活记忆和参数化记忆。它提供简洁的接口,方便加载、保存和操作多个记忆模块,让开发者轻松构建、保存和共享记忆增强应用。"
---
## 什么是 MemCube?

**MemCube** 是一个容器,捆绑了三种主要类型的记忆
**MemCube** 是一个容器,包含了三种主要类型的记忆

- **明文记忆** (例如,`GeneralTextMemory`、`TreeTextMemory`): 用于存储和检索非结构化或结构化文本知识。
- **激活记忆** (例如,`KVCacheMemory`): 用于存储键值缓存以加速 LLM 推理和上下文重用。
- **参数化记忆** (例如,`LoRAMemory`): 用于存储模型适应参数(如 LoRA 权重)。

每种记忆类型都是独立可配置的,可以根据需要进行交换或扩展
每种记忆都可以独立配置,根据应用需求灵活组合

## 结构

MemCube 由配置定义(参见 `GeneralMemCubeConfig`),该配置为每种记忆类型指定后端和配置。典型结构是:

```
MemCube
├── user_id
├── cube_id
├── text_mem: TextualMemory
├── act_mem: ActivationMemory
└── para_mem: ParametricMemory
Expand All @@ -35,7 +37,7 @@ MemCube

### SingleCubeView

操作单个 MemCube。当你只有一个逻辑记忆空间时使用
用于管理单个 MemCube。当系统只需要一个记忆空间时使用

```python
from memos.multi_mem_cube.single_cube import SingleCubeView
Expand All @@ -59,7 +61,7 @@ view.search_memories(search_request)

### CompositeCubeView

操作多个 MemCube。将操作 fan-out 到多个 SingleCubeView 并聚合结果
用于管理多个 MemCube。当需要跨多个记忆空间进行统一操作时使用

```python
from memos.multi_mem_cube.composite_cube import CompositeCubeView
Expand All @@ -78,13 +80,23 @@ results = composite.search_memories(search_request)

### API 请求字段

#### 添加记忆(add模式)

| 字段 | 描述 |
| --------------------- | ---------------------------------------------------------------- |
| `writable_cube_ids` | add 操作的目标 cube |
| `async_mode` | `"async"`(启用 scheduler 后台处理)或 `"sync"`(禁用 scheduler 同步处理) |

#### 搜索记忆(search模式)

| 字段 | 描述 |
| --------------------- | ---------------------------------------------------------------- |
| `readable_cube_ids` | search 操作的目标 cube |
| `async_mode` | `"async"`(scheduler 启用时)或 `"sync"`(scheduler 禁用时) |
| `async_mode` | `"async"`(启用 scheduler 后台处理)或 `"sync"`(禁用 scheduler 同步处理) |

## 核心方法(GeneralMemCube)

## API 总结 (`GeneralMemCube`)
GeneralMemCube 是 MemCube 的标准实现,通过统一的接口管理系统的所有记忆。GeneralMemCube 提供以下核心方法来管理记忆数据的生命周期。

### 初始化

Expand All @@ -104,7 +116,7 @@ mem_cube = GeneralMemCube(config)

## 文件存储

MemCube 目录包含
MemCube 保存后的目录包含以下文件,每个文件对应一种记忆类型

- `config.json` (MemCube 配置)
- `textual_memory.json` (明文记忆)
Expand Down Expand Up @@ -273,6 +285,6 @@ for i, mem in enumerate(memories[:2], 1): # 显示前2条

## 开发者说明

* MemCube 强制执行模式一致性以确保安全的加载/转储
* 每种记忆类型都是可插拔的且独立测试
* MemCube 强制执行模式一致性,确保安全的加载/转储
* 每种记忆类型都是可插拔的,支持独立测试
* 参见 `/tests/mem_cube/` 了解集成测试和使用模式
2 changes: 1 addition & 1 deletion content/cn/open_source/modules/mem_feedback.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: MemFeedback
desc: "MemFeedback 让你的 Agent 能够听懂“你记错了”,并自动修正记忆库。它是实现记忆自进化的关键组件。"
desc: "MemFeedback 是你的“记忆错题本”,让你的 Agent 能够听懂“你记错了”,并自动修正记忆库。它是实现记忆自进化的关键组件。"
---

## 1. 简介
Expand Down
14 changes: 8 additions & 6 deletions content/cn/open_source/modules/mem_reader.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "MemReader"
desc: "MemReader 是 MemOS 的“记忆翻译官”。它负责把用户杂乱的输入(聊天、文档、图片)翻译成系统能理解的、结构化的记忆片段。"
desc: MemReader 是你的“记忆翻译官”。它负责把杂乱的输入(聊天、文档、图片)翻译成系统能理解的、结构化的记忆片段。"
---

## 1. 简介
Expand All @@ -23,15 +23,15 @@ MemReader 设计了两种工作模式,分别对应“快”和“准”两种
* **适用场景**:
* 用户发消息飞快,系统需要毫秒级响应。
* 只需保留对话的“快照”,不需要深度理解。
* **产物**:原始文本片段 + 向量索引。
* **产物**:原始文本片段 + 向量索引 + 来源追踪 (Sources)

### 🧠 Fine 模式(精雕细琢)
* **特点**:**调用 LLM** 进行深度分析。
* **适用场景**:
* 长时记忆写入(需要提取关键事实)。
* 文档分析(需要总结核心观点)。
* 多模态理解(需要看懂图片里的内容)。
* **产物**:结构化的事实 + 摘要 (Background) + 来源追踪 (Provenance)
* **产物**:结构化的事实 + 关键信息提取 (Key) + 背景 (Background) + 向量索引 + 来源追踪 (Sources) + 多模态细节

---

Expand Down Expand Up @@ -86,8 +86,10 @@ memories = reader.get_memory(

**返回结果**:`list[list[TextualMemoryItem]]`

::note{icon="ri:bnb-fill"}
为什么是双层列表?
因为一个长对话可能会被切成多个窗口(Window),外层列表代表窗口,内层列表代表该窗口提取出的记忆项。
::

---

Expand Down Expand Up @@ -174,9 +176,9 @@ refined_memories = reader.fine_transfer_simple_mem(

在 `.env` 或配置文件中,你可以调整以下关键参数:

* **`chat_window_max_tokens`**: **滑窗大小**。默认 1024。决定了多少上下文会被打包在一起处理。设得太小容易丢失语境,设得太大容易爆 LLM 的 Token 限制。
* **`remove_prompt_example`**: **是否移除 Prompt 里的示例**。如果你想节省 Token,可以设为 True;如果你发现提取效果不好,建议设为 False(保留 Few-shot 示例)。
* **`direct_markdown_hostnames`** (仅多模态): **域名白名单**。如果文件 URL 的域名在这个名单里(比如 `raw.githubusercontent.com`),Reader 会直接把它当 Markdown 文本处理,而不是去尝试 OCR 或转换,效率更高
* **`chat_window_max_tokens`**: **滑窗大小**。默认 1024。决定了多少上下文会被打包在一起处理。设得太小容易丢失语境,设得太大容易超出 LLM 的 Token 限制。
* **`remove_prompt_example`**: **是否移除 Prompt 里的示例**。True = 省 Token 但可能降低提取质量;False = 保留示例提高准确度但消耗更多 Token(保留 Few-shot 示例)。
* **`direct_markdown_hostnames`** (仅多模态): **域名白名单**。列表中的域名(如 `raw.githubusercontent.com`)会被直接当作 Markdown 文本处理,跳过 OCR/格式转换步骤,加速处理



39 changes: 23 additions & 16 deletions content/cn/open_source/modules/mem_scheduler.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "MemScheduler: 记忆组织调度器"
desc: "`MemScheduler` 是一个与 MemOS 系统并行运行的并发记忆管理系统,它协调 AI 系统中工作记忆、长时记忆和激活记忆之间的记忆操作。它通过事件驱动调度处理记忆检索、更新和压缩。<br/> 该系统特别适合需要动态记忆管理的对话代理和推理系统。"
title: "MemScheduler"
desc: "MemScheduler 是你的“记忆组织调度器”,它在后台异步管理记忆的流转和更新,协调工作记忆、长时记忆和激活记忆之间的交互,让对话系统能够动态地组织和利用记忆。"
---

## 主要特性
Expand All @@ -12,19 +12,24 @@ desc: "`MemScheduler` 是一个与 MemOS 系统并行运行的并发记忆管理
- 📊 **全面监控**:实时监控记忆使用率、任务队列状态和调度延迟。
- 📝 **详细日志记录**:全链路追踪记忆操作,便于调试和系统分析。

## 记忆调度器架构
## MemScheduler 架构

`MemScheduler` 系统采用模块化架构,核心组件如下
`MemScheduler` 采用模块化架构,分为三层

1. **消息处理**:核心调度引擎,通过带有特定标签(Label)的消息来驱动业务逻辑。
2. **任务队列**:支持 Redis Stream (生产环境推荐) 和 Local Queue (开发测试) 两种模式,用于缓冲和持久化任务。
3. **记忆管理**:负责不同层级记忆(Working/Long-term/User)的读写、压缩和遗忘策略,以及同类型记忆的组织和不同类型记忆间的转换。
4. **检索系统**:结合用户意图、历史记忆场景管理与关键词匹配的混合检索模块。
5. **监控**:跟踪任务积压情况、处理耗时以及记忆库的健康状态。
6. **调度器 (路由器)**:智能路由器,根据消息类型(如 `QUERY`, `ANSWER`, `MEM_UPDATE`)和预设的触发埋点将任务分发给对应的处理任务。
7. **日志记录**:维护记忆操作日志用于调试和分析。
### 调度层(核心)
1. **调度器(路由器)**:智能消息路由器,根据消息类型(`QUERY`, `ANSWER`, `MEM_UPDATE` 等)将任务分发给对应的处理器。
2. **消息处理**:通过带有特定标签(Label)的消息驱动业务逻辑,定义消息格式和处理规则。

## 记忆调度组件 MemScheduler 的初始化方法
### 执行层(保障)
3. **任务队列**:支持 Redis Stream(生产环境)和 Local Queue(开发测试)两种模式,提供异步任务缓冲和持久化。
4. **记忆管理**:执行三层记忆(Working/Long-term/User)的读写、压缩、遗忘和类型转换。
5. **检索系统**:混合检索模块,结合用户意图、场景管理与关键词匹配,快速定位相关记忆。

### 支撑层(辅助)
6. **监控**:跟踪任务积压、处理耗时和记忆库健康状态。
7. **日志记录**:维护全链路记忆操作日志,便于调试和分析。

## MemScheduler 初始化

在 MemOS 的架构中,`MemScheduler` 是作为服务器组件的一部分在启动时被初始化的。

Expand Down Expand Up @@ -62,12 +67,14 @@ redis_client = components["redis_client"]
```


## 当前版本记忆调度默认设置的调度任务以及任务触发消息
## 调度任务与数据模型

调度器通过注册特定的任务标签(Label)与处理器(Handler)来分发和执行任务。以下是当前版本(基于 `GeneralScheduler` 和 `OptimizedScheduler`)默认支持的调度任务:
调度器通过消息驱动的方式分发和执行任务。本节介绍支持的任务类型、消息结构和执行日志。

### 消息类型与处理器

调度器通过注册特定的任务标签(Label)与处理器(Handler)来分发和执行任务。以下是当前版本(基于 `GeneralScheduler` 和 `OptimizedScheduler`)默认支持的调度任务:

| 消息标签 (Label) | 对应常量 | 处理器方法 | 描述 |
| :--- | :--- | :--- | :--- |
| `query` | `QUERY_TASK_LABEL` | `_query_message_consumer` | 处理用户查询,触发意图识别、记忆检索,并将其转换为记忆更新任务。 |
Expand All @@ -80,7 +87,7 @@ redis_client = components["redis_client"]
| `mem_feedback` | `MEM_FEEDBACK_TASK_LABEL` | `_mem_feedback_message_consumer` | 处理用户反馈,用于修正记忆或强化偏好。 |
| `api_mix_search` | `API_MIX_SEARCH_TASK_LABEL` | `_api_mix_search_message_consumer` | (OptimizedScheduler 特有) 执行异步混合搜索任务,结合快速检索与精细检索。 |

### 调度消息结构 (ScheduleMessageItem)
### 消息数据结构 (ScheduleMessageItem)

调度器使用统一的 `ScheduleMessageItem` 结构在队列中传递消息。

Expand All @@ -101,7 +108,7 @@ redis_client = components["redis_client"]
| `info` | `dict` | 额外的自定义上下文信息 | `None` |
| `stream_key` | `str` | (内部使用) Redis Stream 的键名 | `""` |

### Web 日志结构 (ScheduleLogForWebItem)
### 执行日志结构 (ScheduleLogForWebItem)

调度器会生成用于前端展示或持久化存储的结构化日志消息。

Expand Down
Loading