/images/hugo/avatar.png

Mem0 详解:长期记忆、Scope 与检索流程

Mem0 不是传统文档 RAG,而是 Agent 的长期记忆层。它从对话中提炼值得长期保存的事实,再按用户、Agent 或运行实例检索这些事实。

它解决的核心问题是:模型上下文窗口有限且会话结束后状态丢失,如何用较小的 Token 成本保留用户偏好和长期上下文。

RAG 框架对比与选型:RAGFlow、Mem0

RAGFlow 和 Mem0 经常同时出现在 RAG/Agent 技术选型中,但它们并不是同类产品:RAGFlow 管理企业文档知识,Mem0 管理从对话中提炼的 Agent 长期记忆。

本文只保留统一比较维度、选型判断和组合方案。实现细节分别见:RAGFlow 详解Mem0 详解。后续加入其他框架时,也沿用本文的比较维度。

29 MYSQL 分区表

要不要使用分区表

1. 分区表

为了说明分区表的组织形式,先创建一个表 t:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE `t` (
  `ftime` datetime NOT NULL,
  `c` int(11) DEFAULT NULL,
  KEY (`ftime`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
PARTITION BY RANGE (YEAR(ftime))
(PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = InnoDB,
 PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = InnoDB,
 PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = InnoDB,
PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = InnoDB);
insert into t values('2017-4-1',1),('2018-4-1',1);

表 t 将包含了一个.frm 文件和 4 个.ibd 文件,每个分区对应一个.ibd 文件。也就是说:

28 MySQL 连接管理

MySQL 的连接管理

2. mysql 连接管理

在 MySQL 中有两个 kill 命令:

  1. kill query + 线程 id: 表示终止这个线程中正在执行的语句;
  2. kill connection + 线程 id: connection 可缺省,表示断开这个线程的连接,如果这个线程有语句正在执行,也是要先停止正在执行的语句。

2.1 收到 kill 以后,线程做什么

当用户执行 kill query thread_id_B 时,MySQL 里处理 kill 命令的线程做了两件事:

27 MYSQL flush privileges

grant 之后要不要跟 flush privileges

1. 用户权限

MySQL 使用 create user 来创建用户。

create user 'ua'@'%' identified by 'pa'; 的执行过程如下:

  1. 磁盘上,往 mysql.user 表里插入一行,由于没有指定权限,所以这行数据上所有表示权限的字段的值都是 N;
  2. 内存里,往数组 acl_users 里插入一个 acl_user 对象,这个对象的 access 字段值为 0。

在 MySQL 中,用户权限是有不同的范围的。从大到小的顺序依次是: