智能体要提供个性化服务,必须”记得住”用户:偏好(操作习惯、输出风格、安全策略)与知识(工作流程、历史案例、可复用模板),还要能随需检索、随令遗忘。但 OS 层面的记忆数据存储、访问、隔离、审计长期缺乏原生机制支撑,敏感信息识别也常停留在应用层正则。libkylin-mem 把这套能力做成嵌入 OS 的记忆底座:
import os
from kylinmem0 import MemoryServiceHandle
sock = os.path.expandvars("$XDG_RUNTIME_DIR/km0/km0d.sock") # 连 daemon 的 socket
with MemoryServiceHandle(os.path.expanduser("~/.local/share/km0/km0.db"),
daemon_socket=sock) as svc:
svc.add("我喜欢用中文交流", user_id="alice")
for r in svc.search("中文", user_id="alice", top_k=5):
print(r.id, r.content)
不传 daemon_socket 即为嵌入式直连模式(无需启动 daemon,功能子集)。SDK 全部接口、C API 与 daemon 协议细则见 docs/user-guide.md。
libkylin-mem
文档下载
初赛提交材料文件夹项目介绍
面向 openKylin 操作系统智能体(OS Agent)的可插拔记忆系统 —— C11 核心库 + 常驻 daemon + CLI + Python SDK,专为 openKylin 设计并已在 openKylin 2.0 SP2 上完成全量实测。
对外提供两条使用途径:命令行工具
km0ctl和 Python SDK(kylinmem0),两者都经由常驻 daemonkm0d读写同一份记忆库。这是什么 / 为什么做
智能体要提供个性化服务,必须”记得住”用户:偏好(操作习惯、输出风格、安全策略)与知识(工作流程、历史案例、可复用模板),还要能随需检索、随令遗忘。但 OS 层面的记忆数据存储、访问、隔离、审计长期缺乏原生机制支撑,敏感信息识别也常停留在应用层正则。libkylin-mem 把这套能力做成嵌入 OS 的记忆底座:
docs/reports/p6-performance.md)系统经稳定的 C ABI(
include/kylinmem0/kylinmem0.h)对外提供六层可插拔抽象:统一记忆模型、存储后端、嵌入模型、检索策略、抽取策略、编排服务。上层的常驻 daemonkm0d通过 Unix Socket 为多客户端共享服务,km0ctl为纯命令行客户端,Python SDK 经 ctypes 绑定同一 ABI。项目架构
要点:
libkylinmem0.so**:全部能力的载体,C ABI 是唯一对外入口,上层组件(daemon、SDK)都构建在其上,也可被任意语言经 FFI 直接嵌入。km0d**:推荐的使用方式。作为 systemd 用户服务常驻,所有客户端经 Unix Socket 共享服务——记忆库只开一份、配置(检索模式、敏感处置、审计)统一在 daemon 侧生效,CLI、Python、Web 工作台、桌面面板看到的数据完全一致。daemon_socket,功能全集,含 revision/forget/ingest)与嵌入式直连模式(不传 socket,进程内直接加载libkylinmem0.so,适合脚本与测试)。使用途径
途径一:命令行
km0ctl安装后
km0d已由用户服务拉起,直接发命令即可(未走安装、用源码构建时见下文「手动构建」):途径二:Python SDK
SDK 为 ctypes 绑定、零第三方依赖,源码在
bindings/python/(未发布 pip 包,需加入PYTHONPATH):不传
daemon_socket即为嵌入式直连模式(无需启动 daemon,功能子集)。SDK 全部接口、C API 与 daemon 协议细则见docs/user-guide.md。特性
config/prompts/加载,改动免重编译)km0_<N>;数据库与审计日志权限 0600快速开始(openKylin)
1. 磐石模式切换
openKylin 磐石(不可变)模式下
/usr只读且 apt 被禁用,安装前须先切到维护模式:2. 一键安装
脚本依次完成:apt 安装依赖 → CMake 构建(独立
build-install/,不影响开发构建目录)→ 安装到/usr/local→ 为当前用户安装km0dsystemd 用户服务(随登录自启)→ add / search / delete 冒烟自检。可选项:--with-os-guard(追加 BPF-LSM 内核守护)、--with-demo(追加演示程序依赖)、--skip-deps(跳过 apt)。3. 装好后三步体验
安装完成后
km0d已由用户服务拉起,km0ctl在/usr/local/bin:其余常用命令各一行:
km0ctl update ID 内容、km0ctl revision status、km0ctl revision save "阶段完成"、km0ctl revision rollback 1、km0ctl revision clear、km0ctl forget "忘记我上周关于X项目的偏好" --dry-run、km0ctl sensitive check "文本"、km0ctl ingest 文件。完整命令与环境变量见docs/user-guide.md与docs/部署与使用手册.md。一键安装时脚本会探测仓库
.env中的KM0_EMBEDDING_API_KEY:已配置则服务默认以--retrieval hybrid(LLM + 向量混合检索)启动,未配置则为纯全文模式。安装后才补充 key 的,往~/.local/share/km0/km0d.env追加KM0_LLM_API_KEY/KM0_EMBEDDING_API_KEY等变量(写法见docs/部署与使用手册.md6.2/6.4 节),重跑幂等的scripts/km0d-user-service.sh install --prefix /usr/local重新生成服务单元,再systemctl --user restart km0d。手动构建与测试(开发者)
构建(CMake ≥ 3.16,SQLite ≥ 3.20 且带 FTS5):
测试:
源码目录直接体验(不走安装,LLM 抽取 + 向量混合检索):
目录结构:
include/kylinmem0/src/config/prompts/(LLM 提示词,运行时加载)、schemas/sqlite-v6.sql、memory_tags.json(标签注册表)、sensitive.json(敏感规则)bindings/python/tests/benchmark/scripts/packaging/demo/web-agent/third_party/docs/更细的模块划分、容量常量与开发约定见
AGENTS.md。Demo:记忆智能工作台
demo/web-agent/提供面向用户的中文记忆智能工作台。主要能力包括流式智能对话、多会话恢复、短中长期记忆流转、记忆检索与沉淀、自然语言遗忘、Revision 保存/回溯、compact。Web-Agent 演示了完整的 Agent 记忆闭环:当前会话最近消息作为短期记忆,滚动摘要作为中期任务上下文,稳定事实、偏好与可复用知识经
km0d抽取并沉淀为可跨会话召回的长期记忆。记忆库页面同时提供作用域隔离、版本草稿、精准遗忘和历史回溯等用户控制能力。完成上文的
build-llm构建并安装 Demo 依赖后,一条命令同时拉起 daemon 与 Web-Agent(默认 LLM + 向量混合检索,需.env中配置KM0_EMBEDDING_API_KEY)——脚本自动从 8010 起挑选空闲端口、在终端输出访问地址,Ctrl-C统一停止:如果已有自行管理的
km0d,可只启动 Web-Agent:单独启动 Web-Agent 时浏览器默认访问
http://127.0.0.1:8000/。未配置KM0_DEMO_LLM_URL与KM0_DEMO_LLM_API_KEY时页面仍可打开,但智能对话不可用;变量未单独设置时会回退到项目的KM0_LLM_*配置。完整启动选项、安全边界和演示流程见demo/web-agent/README.md。桌面面板:UKUI 控制中心「AI 记忆」
安装
km0-ukcc-plugin后(步骤见docs/部署与使用手册.md§9.1),ukui-control-center「应用」分组出现「AI 记忆」面板,可图形化管理 km0d:上方查看 daemon 状态并 启动 / 停止 / 重启(底层即systemctl --user,无需 root),下方表单读写~/.local/share/km0/km0d.env(LLM / Embedding 配置、敏感模式、审计后端、桌面通知),「保存并重启 daemon」一键使配置生效。点击「启动」后状态变为「运行中(active)」:
服务参数表单(保存后文件权限收
0600,未知键与注释原样保留):文档导航
docs/部署与使用手册.md—— 环境依赖、安装步骤、配置项说明docs/design/概要设计说明书.md—— 系统目标、总体能力与关键取舍docs/design/详细设计说明书.md—— 模块流程、接口契约与异常语义docs/design/architecture.md—— 权威架构与 schema v6 记忆数据结构模型docs/design/web-agent-redesign.md—— Web-Agent 三层记忆、页面与 API 设计docs/reports/测试报告.md—— 测试环境、用例与量化评测结果docs/reports/p6-performance.md—— 六项量化指标、性能分档与 benchmark 方法docs/user-guide.md—— 使用指南(核心概念 / CLI / C API / SDK 细则)docs/赛题要求.md—— openKylin 社区赛题原始要求PROGRESS.md—— 当前实现情况与量化指标第三方组件与开源说明
本项目完全开源。核心层只依赖 C 标准库与 SQLite;以下组件以源码形式 vendored 于
third_party/,各自保留原始许可证(见各子目录):third_party/cjieba—— cjieba/cppjieba 中文分词(FTS5km0_jieba分词器)third_party/cJSON-1.7.18—— cJSON,JSON 编解码third_party/sqlite-vec—— sqlite-vec,SQLite 向量检索扩展可选外部依赖(系统包):libcurl(LLM 抽取 / API embedding)、libsystemd 与 libaudit(journald/auditd 审计 sink)、libbpf(BPF-LSM 守护,默认不启用)。
测试密钥说明
仓库根目录的
.env内含一个供测试使用的 API Key,仅供本项目功能测试使用(如 LLM 抽取、API embedding 的联调用例),请勿用于任何其他用途。正式部署时请通过KM0_EMBEDDING_API_KEY等环境变量配置自己的密钥。