./run.sh service install
./run.sh service apply
./run.sh service start
./run.sh service stop
./run.sh service restart
./run.sh service status
./run.sh service logs --follow
./run.sh service uninstall
查看服务、Provider、cgroup、Audit 和 Guard 聚合状态:
./run.sh health --json
./run.sh status --json
./run.sh guard status --json
修改 config.toml 后执行 ./run.sh service apply,使 systemd unit 和运行中服务使用新的配置。
2.6 使用 openKylin 本地 Profile
将 config.toml 改为:
[provider]
profile = "local-kylin"
构建适配器并执行诊断:
bash scripts/build_kylin_vector_adapter.sh
./run.sh config --json
./run.sh doctor
KylinMem
1. 项目简介
KylinMem 是面向 openKylin/Linux 的多 Agent 记忆中枢。项目以 Memory Manager 作为唯一记忆业务后端,通过本地 C/S 架构向多个 Agent 提供记忆写入、检索、管理和遗忘能力,并在平台层集成 Provider 切换、常驻服务、资源管控、审计、eBPF 文件保护和 UKUI 桌面功能。
项目解决以下核心问题:
user_id、agent_id和session_id共同构成记忆隔离边界。1.1 核心能力
cloud-default与local-kylinprofile、健康诊断、向量空间隔离./run.sh doctor./run.sh status --json、系统测试./run.sh demo、./run.sh system-testjournalctl、状态接口、系统测试./run.sh desktop demo1.2 默认与本地 Provider
config.toml提供两套运行组合:cloud-defaultdeepseek-v4-flashembedding-3,2048 维data/local-kylindeepseek-v4-flashdata/local-kylin/默认使用
cloud-default。两个 profile 使用不同的数据目录、collection 和向量维度,切换时不会混用向量数据。2. 运行说明
2.1 openKylin 一键安装
在已登录的 UKUI 用户终端中执行:
pre-install.sh负责:.venv并安装项目依赖。sudo ./run.sh install安装 Memory Service、Guard、auditd 规则和桌面集成。安装完成后检查平台状态:
./run.sh demo验证 Memory Service、Provider、AuditRuntime、cgroup、eBPF Guard、服务 cgroup 授权、RPC 审计和外部文件访问阻断。2.2 Python 基础环境
仅运行 Python 记忆功能时,可以手动创建虚拟环境:
Linux:
Windows:
requirements-minimal.txt以 editable mode 安装仓库内的mem0/包。2.3 配置密钥与 Profile
复制环境变量模板:
默认链路需要:
Provider、模型、维度、collection、数据目录和本地服务地址由
config.toml统一管理:使用其他环境文件时设置:
检查入口解析结果和 Provider 健康状态:
2.4 启动基本对话 Agent
安装常驻服务并启动默认
memory-chat:也可以显式指定 Agent:
交互命令:
/mem/doc/forget <主题>/quit、/exit对话调用链为:
每轮对话先检索记忆上下文,再调用 LLM 生成回答,最后将完整对话轮次送入 Memory Manager 写入链路。
不使用常驻服务时,可创建隔离的进程内测试后端:
该模式使用独立临时 SQLite 和 Qdrant 目录,退出时清理测试资源。
2.5 常驻服务管理
查看服务、Provider、cgroup、Audit 和 Guard 聚合状态:
修改
config.toml后执行./run.sh service apply,使 systemd unit 和运行中服务使用新的配置。2.6 使用 openKylin 本地 Profile
将
config.toml改为:构建适配器并执行诊断:
诊断结果应包含:
将配置应用到常驻服务并启动对话:
本地 profile 使用 DeepSeek 完成回答生成和记忆事件提取,因此仍需配置
DEEPSEEK_API_KEY。独立验证命令:
恢复默认链路:
2.7 UKUI 桌面功能
平台安装会部署 Peony 插件、桌面动作包装器和设置入口。安装后重新打开 Peony,右键本地 UTF-8
.txt或.md文件即可使用“记入 AI 偏好”和“遗忘相关记忆”。插件不注册 MIME handler,不改变文件默认打开程序。文件内容经过类型、大小、编码和符号链接检查后,通过 Unix Socket 发送给 Memory Service;遗忘操作按
document_id精确执行。2.8 测试与演示命令
查看公开 Agent:
记忆功能测试:
系统集成正式链路检查:
系统集成数据集测试需要 root/BPF 权限,并使用独立临时目录:
30 轮正式稳定性测试:
Python 测试:
3. 架构设计
3.1 总体分层
3.2 本地 C/S 运行模式
Memory Service 常驻并持有唯一 Memory Manager、SQLite 连接和所选 Vector Store。Agent 作为客户端通过权限为
0600的 Unix Socket 提交 JSON Lines RPC。服务端通过SO_PEERCRED校验调用方 UID,并使用固定线程池处理读取和生成请求;记忆写入与遗忘通过同一写锁串行执行。该结构实现:
3.3 统一入口与 Agent 注册
agent_entry.py是统一 Python 入口,负责:.env和config.toml。AgentSpec注册表选择service、isolated或system-test执行类型。Agent 只依赖
AgentMemoryService协议,不访问 SQLite、Qdrant、mem0 client 或 Provider SDK。新增 Agent 的注册和接口规范见 agents/README.md。3.4 组件职责
launcher/agents/memory_manager/mem0/provider_adapters/audit/ebpf_guard/desktop_integration/tests/4. 记忆层设计
4.1 写入链路
MemoryAPI.insert()接收带有user_id和session_id的输入,按以下顺序处理:写入事件包括:
4.2 检索与上下文构建
普通记忆类型固定为
preference、knowledge和episodic。文档 chunk 使用独立类型,只通过文档检索链路进入上下文,避免与普通记忆重复召回。4.3 生命周期与精准遗忘
short_term:会话级短期记忆,根据访问和任务关联晋升。mid_term:稳定偏好、知识和重要情景,根据证据、置信度和访问频率晋升。long_term:同一用户下跨会话共享的长期记忆。last_accessed_at为依据,过期记录保留状态和版本链。status="forgotten"共同阻止已遗忘内容重新召回或晋升。4.4 身份与数据隔离
外部请求必须携带:
user_idagent_idAgentSpec.memory_agent_id提供session_id服务端根据
user_id + agent_id生成稳定内部 namespace。不同用户和不同 Agent 默认隔离;同一用户、同一 Agent 的长期记忆可跨 session 共享。隔离通过记录字段、Provider 过滤和内部 namespace 实现,不需要为每个 Agent 创建独立数据库进程。4.5 存储与 Provider
Provider profile 在 Memory Manager 构造前完成解析和检查。collection 名称绑定 Embedding Provider 与向量维度,避免 1024 维和 2048 维向量进入同一空间。入口、doctor 和常驻服务共用
memory_manager.AppConfig,不会维护第二套运行配置。Memory Manager 详细说明见 memory_manager/README.md。
5. 系统集成功能设计
5.1 systemd 与 cgroup v2
kylin-memory.service作为 systemd user service 持有 Memory Manager。安装器根据config.toml生成 service unit 和资源 drop-in:cgroup 配置覆盖 CPU quota、MemoryHigh、MemoryMax、TasksMax 和 IOWeight。状态接口读取
memory.current、memory.peak、cpu.stat、memory.events和pids.current,形成与记忆服务对应的资源指标。配置示例:
5.2 eBPF LSM 文件保护
kylin-memory-guard.service以 root 身份独立运行。Guard 自动发现kylin-memory.service的 cgroup inode,将其写入allowed_cgroups,再注册data/目录及文件 inode 并启用 enforcement。内核 hook:
file_openinode_unlinkinode_renameMemory Service 重启后,Guard 根据 service 名称重新发现 cgroup 并刷新授权。Guard daemon 周期扫描保护目录,把 SQLite WAL/SHM、Qdrant segment 等运行期新增 inode 注册到 BPF map。阻断事件写入独立归档,并通过 root-owned 状态文件向平台报告
attached/enforcing/degraded、hook、阻断计数和授权 cgroup。详细说明见 ebpf_guard/README.md。
5.3 Audit、Journald 与 auditd
平台应用审计和系统审计分层运行:
MemoryServiceRuntime持有唯一AuditRuntime。事件带有service_instance_id/request_id,主体标识使用 HMAC 稳定散列,正文、Embedding、API Key 和任意 metadata 不进入平台归档。JSONL 使用单 writer 和哈希链;Journald 用于系统查询和实时观察;auditd 监控config.toml、Guard 配置和 root-owned Guard 代码。常用查询:
详细说明见 audit/README.md。
5.4 UKUI 桌面联动
桌面 Bridge 只接受规定大小以内的本地
.txt/.md普通文件,并拒绝符号链接、MIME 不匹配、非法 UTF-8、NUL 和空文件。原始路径转换为稳定来源 URN,文档内容进入文档 RAG 子系统,通知只携带清洗后的文件名、数量和固定事件类型。详细说明见 desktop_integration/README.md。
5.5 系统集成验证
./run.sh demo面向常驻服务真实链路,验证服务 cgroup 被 Guard 放行,同时验证同 UID、不同 cgroup 的外部进程被阻断。sudo ./run.sh system-test使用独立临时数据和 transient systemd service,默认连续执行 3 轮 eBPF、Audit、Journald 和 cgroup 测试。使用--rounds 30可执行 30 轮正式稳定性测试;参数范围为 1 至 30。测试覆盖:系统测试说明见 agents/os-test/README.md。
6. 参考资料