Merge branch ‘master’ of https://www.gitlink.org.cn/reobf/mxokdzntjytqyjzywjz
面向 openKylin 的智能体记忆提取与精准遗忘系统——第三届中国研究生操作系统开源创新大赛参赛作品。 作品以deb安装包的形式提供,在OpenKylin 2.0 SP2 x64中测试,不保证在其他系统中稳定运行 作品下载:Kylin AI Memory Agent Download 下载链接: https://pan.baidu.com/s/1liRPkCocR5h4F3yjB0sUTA?pwd=1rid 提取码: 1rid
下载网盘所有文件放在同一个目录下 sudo mm-cli -o #开启维护模式之后按提示重启 sudo bash ./install.sh
下载网盘中两个文件:kylin-ai-runtime_1.1.0.1-ok0.11_amd64.deb为系统依赖,kylin-memory-agent_1.0.0_amd64.deb为作品文件 sudo mm-cli -o #开启维护模式之后按提示重启 sudo apt install ./kylin-ai-runtime_1.1.0.1-ok0.11_amd64.deb sudo apt install ./kylin-memory-agent_1.0.0_amd64.deb 注意:必须先安装kylin-ai-runtime覆盖系统默认的版本,系统默认的版本有兼容性问题 注意2:安装方式1和安装方式2是等价的
exclude.conf
┌─────────────── 用户交互 ───────────────┐ │ Swing 对话窗口(托盘常驻 / 快捷键) │ │ peony 右键菜单 → ~/actions.data │ │ ukui-control-center 配置面板 │ │ ukui-notification-daemon 通知 │ └────────────────┬──────────────────────┘ │ ┌────────────────▼──────────────────────┐ │ Java 主程序(常驻后台) │ │ ActionQueue 轮询 ~/actions.data │ │ EbpfConsumer 读 journald file-audit │ │ MemoryManager 解析→检测→向量化→RAG │ │ SQLite files/vectors/history/audit └──────────┬────────────┬───────────────┘ │ │ JNI libmain.so HTTP :8090 (麒麟 AI SDK) (llama.cpp embedding) │ │ kylin-ai-runtime llama-server (DeepSeek/Qwen) (bge/nomic embed) ┌─────────── OS 级机制 ──────────────┐ │ eBPF LSM hook file_open (机制1) │ │ systemd-journald 审计 (机制2) │ │ cgroup v2 资源限制 (机制3) │ └────────────────────────────────────┘
root/ ├── Makefile 顶层构建(编译全部 → stage → deb) ├── cuda-required/ WSL 专用构建(CUDA 编译环境)→ llama + PII ├── ebpf/file-audit-lsm-src/ eBPF 文件审计(C) ├── kylin-jni-v2/ AI SDK JNI 桥接 → libmain.so(C++) ├── llama.cpp/ llama.cpp 源码(已内置)+ build-llama.sh ├── pii-ner/ PII NER 敏感信息检测(BERT+ONNX,C++) └── memory-agent/ Java 主程序 + 插件 + 配置 ├── build.gradle ├── src/main/java/ │ ├── Main.java 入口(守护 / 命令行模式) │ ├── core/ │ │ ├── Storage.java SQLite 存储 │ │ ├── FileParser.java Tika 文本提取 + 分块 │ │ ├── Embedding.java llama.cpp HTTP 客户端 + 余弦相似度 │ │ └── SensitiveDetector.java 正则敏感信息检测 + 脱敏 │ ├── service/ │ │ ├── MemoryManager.java 核心引擎(ingest/forget/search/RAG) │ │ ├── ActionQueue.java actions.data 队列消费 │ │ ├── EbpfConsumer.java journald file-audit 事件消费 │ │ └── LlamaServer.java llama.cpp 进程管理(按需启停) │ ├── ui/ │ │ ├── ChatWindow.java Swing 对话窗口 │ │ ├── TrayManager.java 系统托盘 │ │ ├── StatsWindow.java 统计 + 审计日志窗口 │ │ └── ModelDiscovery.java 读 GSettings 列模型 │ └── jni/ │ ├── KylinAINative.java native 声明 │ └── KylinAI.java 封装 + dummy 降级 ├── peony-plugin/ peony 右键菜单插件(C++ Qt) ├── ukcc-plugin/ 控制面板插件(C++ Qt) ├── configs/ systemd user service + 自启动 desktop └── models/ embedding 模型 gguf(需自行下载)
sudo apt install build-essential cmake pkg-config g++ clang llvm \ qt5-qmake qtbase5-dev qtchooser qtbase5-dev-tools qttools5-dev-tools \ libpeony-dev libukcc-dev libkysdk-qtwidgets-dev \ libglib2.0-dev libbpf-dev libelf-dev zlib1g-dev linux-tools-generic \ libkysdk-genai-nlp-dev libkylin-ai-base-dev libkysdk-ai-common-dev \ default-jdk # Gradle 7.6(JDK 8 兼容),或更高版本配 JDK 17+ sdk install gradle 7.6.4 # llama.cpp 已包含在 bs/llama.cpp/,无需 git clone # 编译(自动检测 GPU:有 nvcc 就同时编 CUDA 后端): cd bs/llama.cpp && ./build-llama.sh # ./build-llama.sh cpu 只编 CPU # ./build-llama.sh cuda CPU + CUDA 都编 # 产物在 bs/llama.cpp/dist/,make stage 会自动打包进 deb # embedding 模型(放入 memory-agent/models/) huggingface-cli download CompendiumLabs/bge-small-zh-v1.5-gguf \ bge-small-zh-v1.5-f16.gguf --local-dir memory-agent/models/
敏感信息检测走”正则 + BERT NER”双路合并:正则抓固定格式(手机号/身份证/API Key/私钥), NER 抓上下文相关 PII(人名/地址/组织)。NER 是独立 C++ 子进程,Java 用管道协议调用, 30 秒空闲自动回收。
由于这一部分需要cuda-toolkit, 无法在虚拟机中直接编译
所以在安装了cuda-toolkit的 WSL(推荐)里编译,CPU 版打包进 deb,GPU 版由控制面板按需下载:
# --- 在 WSL 里 --- cd pii-ner make deps # 下载 ONNX Runtime(GPU) + nlohmann/json + cuDNN make package # 编译 → dist/(CPU .so + GPU .so 分目录) # 模型放入 dist/model/(训练产物:model_int8.onnx + vocab.txt + labels.json) # 训练见 pii-ner/scripts/train_ner.py # 把 dist/ 拷回虚拟机的 pii-ner/ 下
deb 只打包 CPU 的 libonnxruntime.so.1。用户机器有 N 卡时,在麒麟控制面板点 “下载 GPU 推理后端”,会先检测 nvidia-smi,没 GPU 弹”不兼容”,有则下载 GPU 的 .so 到用户目录,下次扫描自动启用 GPU。
libonnxruntime.so.1
nvidia-smi
.so
重要:不要在 VMware 共享文件夹 / Windows 共享文件挂载盘里编译。 这类文件系统不支持 Unix 符号链接,会导致 llama.cpp 链接 .so 失败 (failed to create symbolic link ... Operation not supported)。 build-llama.sh 已自动在原生路径 ~/.cache/llama-build 里编译再把产物 (已解引用为真实文件)拷回 dist/,所以 llama 部分没问题;但其他模块 (eBPF/JNI/插件)和 dpkg-deb 打包也建议在原生 fs 进行。 **推荐把整个 bs/ 拷到虚拟机的 ~/bs 再 make**,共享文件夹只用于传文件。
failed to create symbolic link ... Operation not supported
build-llama.sh
~/.cache/llama-build
dist/
dpkg-deb
bs/
~/bs
make
cp -r /var/mnt/Desktop/bs ~/bs # 拷到原生 ext4 路径 cd ~/bs make # 编译全部子模块(含 llama.cpp) make stage # 收集到 ~/deb_files make deb # 打包 .deb sudo dpkg -i kylin-memory-agent_1.0.0_*.deb # postinst 自动按 GPU 选 CPU/CUDA 后端 systemctl --user enable --now kylin-memory-agent
GPU 自适应:deb 同时打包 CPU 和 CUDA 后端 .so,安装时 postinst 跑 nvidia-smi 判断——有 N 卡就启用 libggml-cuda.so,没有就只用 CPU。llama.cpp 的 GGML_BACKEND_DL 机制让 llama-server 运行时动态加载对应后端。
libggml-cuda.so
GGML_BACKEND_DL
CUDA 后端只在目标机器有 N 卡时才有意义。没 GPU 就用默认的 make llama(只编 CPU)。 编 CUDA 需装 nvidia-cuda-toolkit(仅编译不需要物理 GPU,但 toolkit 有几 GB)。
make llama
nvidia-cuda-toolkit
llama 的 CPU/CUDA 后端和 PII 的 binary 需要在 WSL(有 CUDA 编译环境)里编。 虚拟机编本地模块(eBPF/JNI/插件/Java)+ 检查 WSL 产物 + 打包——WSL 产物缺了会直接报错。
# === 第一步:在 WSL 里编译 llama + PII(共享目录,不用拷贝)=== sudo apt install nvidia-cuda-toolkit cmake build-essential libcurl4-openssl-dev unzip cd /mnt/c/Users/zyf/Desktop/bs/cuda-required make # 编 llama(CPU+CUDA) + PII,产物落在各模块 dist/ make check # 确认产物齐全 # === 第二步:在 openKylin 虚拟机里打包(同一共享目录)=== cd /mnt/Desktop/bs make deb # 编本地模块 + 检查 WSL 产物 + 收集 + 打 deb
各目标语义:
make local
make stage
~/deb_files
make deb
虚拟机不需要 CUDA 环境。WSL 产物缺失时 stage/deb 会报错,提示去 cuda-required 编。
stage
deb
cuda-required
为什么 WSL 能编给 openKylin 用? build-llama.sh 默认加 -static-libstdc++ -static-libgcc, binary 只需 glibc 2.35、库需 2.38,正好 ≤ openKylin 的 2.38(已实测)。
-static-libstdc++ -static-libgcc
路径:编译中间产物自动放 WSL 原生路径 ~/.cache/llama-build(共享盘不支持软链接), 最终 dist/ 是真实文件放共享盘。不用手动挪,不用拷贝——WSL 和虚拟机看同一份 /mnt/.../bs。 注意别把 LLAMA_BUILD_ROOT 或 STAGE_DIR 指到 /mnt。
/mnt/.../bs
LLAMA_BUILD_ROOT
STAGE_DIR
/mnt
纯 CPU 版:若不要 GPU,WSL 里 cd cuda-required && make pii PII_GPU=0, 再单独 cd ../llama.cpp && ./build-llama.sh cpu,虚拟机 make deb 打包。 详见 cuda-required/README.md。
cd cuda-required && make pii PII_GPU=0
cd ../llama.cpp && ./build-llama.sh cpu
cuda-required/README.md
libbpf1, libelf1, zlib1g, openjdk-8-jdk, kylin-ai-runtime (= 1.1.0.1-ok0.11), libkysdk-genai-nlp0 (= 1.1.0.1-ok1.2), libkysdk-genai-nlp-dev (= 1.1.0.1-ok1.2)
麒麟 GenAI SDK 用 (= 版本) 锁死:JNI libmain.so 按特定 ABI 编译,版本不一致会有兼容性问题。
(= 版本)
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
麒麟 AI 记忆助手 (Kylin AI Memory Agent)
面向 openKylin 的智能体记忆提取与精准遗忘系统——第三届中国研究生操作系统开源创新大赛参赛作品。
作品以deb安装包的形式提供,在OpenKylin 2.0 SP2 x64中测试,不保证在其他系统中稳定运行
作品下载:Kylin AI Memory Agent Download
下载链接: https://pan.baidu.com/s/1liRPkCocR5h4F3yjB0sUTA?pwd=1rid 提取码: 1rid
安装方式1
下载网盘所有文件放在同一个目录下
sudo mm-cli -o #开启维护模式之后按提示重启
sudo bash ./install.sh
安装方式2
下载网盘中两个文件:kylin-ai-runtime_1.1.0.1-ok0.11_amd64.deb为系统依赖,kylin-memory-agent_1.0.0_amd64.deb为作品文件
sudo mm-cli -o #开启维护模式之后按提示重启
sudo apt install ./kylin-ai-runtime_1.1.0.1-ok0.11_amd64.deb
sudo apt install ./kylin-memory-agent_1.0.0_amd64.deb
注意:必须先安装kylin-ai-runtime覆盖系统默认的版本,系统默认的版本有兼容性问题
注意2:安装方式1和安装方式2是等价的
功能概览
exclude.conf)过滤噪音;支持 deny 列表拦截架构
目录结构
以下内容为手动编译deb安装包的流程,非必需流程,建议直接使用网盘中提供的二进制deb文件
编译依赖
PII 敏感信息检测器(BERT NER + ONNX)部分
敏感信息检测走”正则 + BERT NER”双路合并:正则抓固定格式(手机号/身份证/API Key/私钥), NER 抓上下文相关 PII(人名/地址/组织)。NER 是独立 C++ 子进程,Java 用管道协议调用, 30 秒空闲自动回收。
由于这一部分需要cuda-toolkit, 无法在虚拟机中直接编译
所以在安装了cuda-toolkit的 WSL(推荐)里编译,CPU 版打包进 deb,GPU 版由控制面板按需下载:
deb 只打包 CPU 的
libonnxruntime.so.1。用户机器有 N 卡时,在麒麟控制面板点 “下载 GPU 推理后端”,会先检测nvidia-smi,没 GPU 弹”不兼容”,有则下载 GPU 的.so到用户目录,下次扫描自动启用 GPU。构建与安装
GPU 自适应:deb 同时打包 CPU 和 CUDA 后端
.so,安装时 postinst 跑nvidia-smi判断——有 N 卡就启用libggml-cuda.so,没有就只用 CPU。llama.cpp 的GGML_BACKEND_DL机制让 llama-server 运行时动态加载对应后端。完整构建流程:WSL 编译 + 虚拟机打包
llama 的 CPU/CUDA 后端和 PII 的 binary 需要在 WSL(有 CUDA 编译环境)里编。 虚拟机编本地模块(eBPF/JNI/插件/Java)+ 检查 WSL 产物 + 打包——WSL 产物缺了会直接报错。
各目标语义:
make local— 只编本地模块(eBPF/JNI/peony/ukcc/Java),不碰 llama/piimake stage— local + 检查 WSL 产物(llama/pii) + 收集到~/deb_files(WSL 产物缺则报错)make deb— stage + 打包 .deb虚拟机不需要 CUDA 环境。WSL 产物缺失时
stage/deb会报错,提示去cuda-required编。运行时依赖(deb Depends)