目录

MemGuard-Kylin

面向openKylin OS Agent的本地记忆提取、治理、检索与精准遗忘中间件。

MemGuard-Kylin位于Agent与端侧记忆存储之间,将对话、工具执行结果、用户行为、手动配置和知识文档转换为统一记忆,并提供偏好版本化、短中长期生命周期、混合检索、RAG上下文、敏感信息治理、自然语言精准遗忘和OS级安全审计能力。

TransportGPT是当前参考接入客户端,但MemGuard核心不依赖TransportGPT、LangChain或其他Agent框架。其他Agent可以通过相同的HTTP API或零依赖Python客户端接入。本项目解决的是“兼容不同Agent”,不提供多个Agent之间的任务协调或协作编排。

核心能力

多源统一接入

  • 支持对话、工具结果、用户行为、手动配置和知识文档;
  • 使用统一AgentEvent协议完成字段校验、来源追踪和格式标准化;
  • 使用event_id实现幂等写入,并拒绝相同编号对应不同负载;
  • 对正文、结构化工具结果和metadata进行递归敏感检测与脱敏。

偏好与知识记忆

  • 提取输出语言、格式、详细程度、安全策略和工具选择等偏好;
  • 保存偏好证据、置信度、场景、父版本和版本历史;
  • 支持查询历史版本以及通过追加新版本完成可审计回滚;
  • 支持知识、偏好、工具和情景记忆的统一存储与调用;
  • 已接入知识子类型标注、中英文主题归一、来源优先级裁决、冲突组和可解释替代链。

统一检索与RAG

  • 组合关键词、向量相似度、时间和偏好权重进行混合检索;
  • 支持用户隔离、记忆类型过滤和短期会话隔离;
  • 每次真实召回后原子持久化访问次数和最后访问时间,作为生命周期热度依据;
  • 向量服务失败时可降级到关键词检索并记录审计;
  • 构造带memory ID、引用、Token预算、截断状态和耗时的有界RAG Context;
  • 通过可选stage字段明确区分task_planning、tool_call和result_generation,并把阶段写入响应和审计;
  • 对历史记忆正文进行边界转义,降低记忆内容伪造系统指令的风险。

敏感信息与精准遗忘

  • 识别手机号、身份证号、邮箱、明确姓名字段、姓名自述和配置姓名等PII;
  • 识别API Key、Token、密码和私钥等凭据;
  • 支持JSON配置的用户自定义敏感模式;
  • 支持redact、block和受控测试allow策略;
  • 支持中文自然语言遗忘指令、候选预览和一次性确认Token;
  • 严格执行“先删除系统向量、后擦除SQLite活动内容”;
  • 向量删除失败时中止不可逆正文擦除;
  • 使用AES-256-GCM信封加密正文、偏好值、主题、事件时间和业务元数据,每条记忆使用独立随机数据密钥;
  • 遗忘及到期时销毁被主密钥包裹的数据密钥,并由验证器复核密文已不可解密;
  • 使用主密钥化HMAC三元组/六元组盲索引缩小密文检索候选,解密后再次执行原文匹配;
  • 支持停服KEK轮换:事务化重包裹全部可恢复DEK、重算HMAC摘要和盲索引,载荷密文本身保持不变,三个关键中断点均可在下次启动自动恢复;
  • 支持每份备份独立随机密钥、分块AEAD归档、SQLite/审计链/记录解密校验,以及完整ID确认后的备份密钥销毁与幂等审计;
  • 默认在遗忘提交后执行VACUUM及前后两次WAL截断,并返回主库/WAL/SHM压缩证据;
  • 使用系统向量SDK按memory_id + user_id强一致查询,独立确认目标向量不存在;
  • 审计日志保留操作和密钥化摘要,不保留已遗忘正文。

openKylin与OS级机制

  • 通过openKylin Embedding C接口生成系统文本向量;
  • 通过C++桥接调用openKylin系统向量数据库SDK;
  • 默认复用单个长驻SDK桥接进程,新建集合使用HNSW索引,避免每次检索重复连接向量服务;
  • 通过systemd用户服务部署并使用cgroup v2限制CPU、内存和任务数;
  • 将记忆操作和服务日志写入systemd-journald;
  • 提供BPF LSM内核程序和用户态加载器,对SQLite主库、WAL、SHM和主密钥文件执行文件级audit或enforce;
  • SQLite内部使用SHA-256链式审计记录检测历史篡改。

系统架构

TransportGPT / 其他Agent / 工具 / 手动配置 / 文档
                         │
               Agent API v1 / MemGuardClient
                         │
                         ▼
       ┌──────────────────────────────────┐
       │ 统一接入、幂等、清洗、校验、脱敏 │
       └────────────────┬─────────────────┘
                        │
          ┌─────────────┼──────────────┐
          ▼             ▼              ▼
     偏好提取       知识与质量治理     生命周期决策
          └─────────────┼──────────────┘
                        ▼
       ┌──────────────────────────────────┐
       │ SQLite加密权威存储                │
       │ 信封密文 / 盲索引 / 版本链 / 审计 │
       └────────────┬───────────────┬─────┘
                    │               │
                    ▼               ▼
       openKylin Embedding SDK   openKylin向量数据库SDK
                    └───────┬───────┘
                            ▼
              关键词+向量+时间混合检索
                            │
              ┌─────────────┴─────────────┐
              ▼                           ▼
       有界RAG Context              两阶段精准遗忘
              └─────────────┬─────────────┘
                            ▼
          systemd / cgroup v2 / journald / BPF LSM

更详细的设计见项目与架构说明。

Agent接入

默认HTTP地址为http://127.0.0.1:8765。Agent可以使用通用Python客户端:

from memguard import AgentEventType, MemGuardClient

client = MemGuardClient("http://127.0.0.1:8765")

client.remember(
    "设备巡检应先检查电源。",
    event_id="inspection-knowledge-v1",
    event_type=AgentEventType.DOCUMENT,
    client_id="example-agent",
    user_id="example-user",
    session_id="example-session",
)

context = client.retrieve_context(
    "设备巡检先检查什么?",
    client_id="example-agent",
    user_id="example-user",
    stage="task_planning",
)

完整协议见Agent API v1,TransportGPT的薄适配方式见TransportGPT接入说明。

三阶段参考OS Agent与确定性启用/禁用记忆A/B可以直接运行,不调用付费模型:

python3 examples/agent_compat/staged_reference_agent.py --memory enabled
python3 -m benchmarks.run_staged_agent_ab

公开合成三任务的启用组在任务规划、工具偏好采用、工具结果复用、输出偏好、阶段引用和阶段审计上均为1.0000;禁用组三阶段成功率为0,记忆增量为1.0000。该结果证明三个阶段使用同一实际HTTP/RAG链路,不替代真实业务分布和真实模型评测。

本地开发与测试

项目要求Python 3.10或更高版本,并依赖cryptography>=41.0提供AES-GCM;openKylin可使用发行版的python3-cryptography包。

python3 scripts/build_wheel.py --wheel-dir <目录>使用Python标准库离线生成确定性纯Python wheel,不依赖setuptools、wheel或网络,统一发布预检默认使用该路径。只有使用python -m build、pip wheel .等外部PEP 517前端时,才需要先安装requirements-build.txt中的setuptools>=68和wheel>=0.41;这些构建包不是MemGuard运行依赖。

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -e .
python3 -m unittest discover -s tests -v
python3 -m memguard.web --host 127.0.0.1 --port 8765

Windows PowerShell可以使用:

py -m pip install -e .
py -m unittest discover -s tests -v
py -m memguard.web --host 127.0.0.1 --port 8765

离线测试默认不启用生产向量后端。确定性Embedding和内存向量库仅用于测试,不能替代openKylin生产SDK。

发布前可以使用统一预检入口运行全量测试、编译检查、离线评测、隐私扫描和wheel构建:

python3 scripts/verify_release.py

该命令的wheel阶段可在禁用site-packages的干净Python中离线运行,生成物包含规范METADATA、console script入口和带SHA-256/长度的RECORD。需要验证标准PEP 517后端时可另行执行python -m pip install -r requirements-build.txt && python -m build --wheel,二者用途不得混淆。

后续人工标注集、外部许可数据子集和不同 Agent 的预测结果统一通过数据集无关的正式评测入口校验、冻结和评分:

python3 -m benchmarks.run_formal_evaluation validate \
  benchmarks/formal_v1/manifest.json --formal
python3 -m benchmarks.run_formal_evaluation freeze \
  benchmarks/formal_v1/manifest.json \
  --output benchmarks/formal_v1/dataset.lock.json
python3 -m benchmarks.run_formal_evaluation evaluate \
  benchmarks/formal_v1/manifest.json \
  --lock benchmarks/formal_v1/dataset.lock.json --formal

字段映射、五类任务协议、标注一致性和严格门禁见正式人工评测工具链。现有公开合成集继续用于回归,不能仅因合成集通过就标记为正式人工评测。

预检会额外运行60条偏好提取、57条敏感识别和30条精准遗忘合成场景,并在.benchmark-tmp/release-preflight/生成JSON原始结果和Markdown测试摘要。

默认规模预检只运行20条快速样本。100、1000、5000条长测需要显式执行:

python3 -m benchmarks.run_scale_benchmark \
  --sizes 100 1000 5000 --queries 100

规模脚本使用确定性测试向量实现,只用于开发机预检;最终延迟、吞吐和资源数据必须在openKylin系统Embedding与向量数据库后端上重新采集。

加密存储可单独运行5000条、100次检索的硬门禁微基准;它隔离测量SQLite密文、盲索引和AES-GCM解密,不代替包含系统Embedding和向量检索的端到端评测:

python3 -m benchmarks.run_encryption_benchmark \
  --size 5000 --queries 100

主密钥轮换必须先停止所有写入服务并显式确认;托管备份使用独立密钥,销毁命令要求再次提供完整备份ID:

export MEMGUARD_ENCRYPTION_ENABLED=1
export MEMGUARD_MASTER_KEY_FILE="$HOME/.local/state/memguard-kylin/master.key"

memguard --db "$HOME/.local/share/memguard/memguard.db" \
  kek-rotate --confirm-service-stopped
memguard --db "$HOME/.local/share/memguard/memguard.db" \
  backup-create --directory "$HOME/.local/state/memguard-kylin/backups"
memguard --db "$HOME/.local/share/memguard/memguard.db" \
  backup-verify BACKUP_ID \
  --directory "$HOME/.local/state/memguard-kylin/backups"
memguard --db "$HOME/.local/share/memguard/memguard.db" \
  backup-destroy-key BACKUP_ID --confirm BACKUP_ID \
  --directory "$HOME/.local/state/memguard-kylin/backups"

完整停服顺序、BPF策略和恢复边界见部署与使用手册。工具只管理自己登记的备份,不会扫描或删除既有人工副本、虚拟机快照和第三方备份。

同一参考Agent、同一请求集启用/禁用记忆模块的资源A/B可以运行:

python3 benchmarks/run_agent_resource_ab.py \
  --memory-size 100 --requests 100

openKylin系统SDK正式模式使用独立systemd用户scope,并强制不少于100次请求、P95≤500ms、cgroup v2可用且oom/oom_kill=0:

MEMGUARD_VECTOR_BACKEND=openkylin \
MEMGUARD_OPENKYLIN_VECTOR_BRIDGE=/opt/memguard-kylin/bin/memguard-openkylin-vector-bridge \
python3 benchmarks/run_agent_resource_ab.py \
  --formal --backend openkylin --systemd-scope \
  --scope-memory-max 512M --scope-cpu-quota 50% \
  --memory-size 100 --requests 100

该脚本使用隔离子进程报告请求窗口的P50/P95、进程CPU/RSS,以及cgroup的anon、file、shmem、swap、CPU节流和OOM事件;记忆预装载耗时单独列出。系统SDK启用态结束后批量删除合成向量,并用独立强一致ID查询抽查不存在性。该参考Agent仍以确定性哈希代替真实大模型生成,因此实测可用于系统SDK检索/RAG Context与资源管控验收,不能外推为真实LLM生成全链路开销。

TransportGPT跨会话真实模型闭环可以先离线验证协议,再通过环境变量接入OpenAI兼容模型:

python3 benchmarks/run_agent_closed_loop.py --provider deterministic

python3 benchmarks/run_agent_closed_loop.py --provider openai-compatible \
  --env-file .env --model "your-model-id"

忽略文件.env中设置MEMGUARD_AGENT_BASE_URL、MEMGUARD_AGENT_API_KEY和可选的MEMGUARD_AGENT_MODEL。脚本在新会话中对同一问题执行启用/禁用记忆对照,验证第一轮memory_id的检索、显式引用和第二轮回写。默认报告只保存布尔结果、延迟和SHA-256,不保存模型原始回答、API Key或服务地址;真实凭据只能通过未提交的环境变量或.env文件提供。

真实模型与openKylin系统SDK、独立cgroup的统一全链路A/B使用单独工具。正式模式要求.env为非符号链接普通文件且权限不宽于0600,两个worker只接收该文件路径,不继承模型凭据环境变量:

chmod 0600 /path/outside-repository/agent-evaluation.env
MEMGUARD_VECTOR_BACKEND=openkylin \
MEMGUARD_OPENKYLIN_VECTOR_BRIDGE=/opt/memguard-kylin/bin/memguard-openkylin-vector-bridge \
python3 benchmarks/run_agent_llm_resource_ab.py \
  --formal --backend openkylin --provider openai-compatible \
  --systemd-scope --requests 100 \
  --env-file /path/outside-repository/agent-evaluation.env \
  --output ~/.local/state/memguard-kylin/validation/agent-llm-resource-ab.json

报告对相同请求集分别给出检索、模型和端到端P95、CPU、RSS、cgroup、答案准确率、memory ID引用率及记忆准确率增量;失败按未召回、Top-5排序遗漏、模型未使用已召回上下文和漏引memory ID分类。远程模型推理服务的资源不在本地cgroup内,报告会显式保留该边界。500ms门禁只用于包含Embedding、向量检索和重排的检索链路,不误用于远程模型生成时延。

openKylin部署

生产部署需要openKylin提供:

  • Embedding开发包及官方GTE模型;
  • 系统向量数据库开发包和运行服务;
  • Python 3.10或更高版本;
  • CMake与C++编译环境;
  • 可选的Clang、libbpf和BPF LSM内核能力。

安装脚本会检查系统SDK、构建向量桥接并安装systemd用户服务:

sudo bash deploy/install_openkylin.sh

需要同时构建BPF组件时:

sudo MEMGUARD_BUILD_BPF=1 bash deploy/install_openkylin.sh

赛题验收建议使用完整竞赛模式。它会强制构建并以安全的audit模式启动BPF LSM,同时安装auditd规则:

sudo MEMGUARD_COMPETITION_MODE=1 bash deploy/install_openkylin.sh

安装后会启用每15分钟运行一次的生命周期维护timer。最新版目标机一键验收入口为:

bash scripts/verify_openkylin_target.sh

该入口调用系统Embedding与向量数据库SDK的正式规模评测、独立systemd cgroup资源A/B和加密存储门禁,并收集systemd、cgroup、journald、BPF和auditd状态。完整步骤见部署与使用手册。

BPF默认建议以audit模式部署。切换enforce前必须确认MemGuard服务PID白名单、数据库路径和恢复边界。详细构建方式见bpf说明。

当前进展

当前版本为0.3.0,已完成:

  • 通用Agent API v1、Python客户端和旧API兼容;
  • 多源事件接入、幂等、敏感治理和来源审计;
  • 偏好提取、版本历史和回滚;
  • SQLite与系统向量索引同步状态管理;
  • 混合检索、RAG Context和向量故障降级;
  • TransportGPT薄适配器和框架无关参考Agent;
  • 自然语言精准遗忘和双存储删除;
  • 精确重复复用、质量评分、异常隔离和隔离记录治理;
  • 偏好证据融合、场景选择、时间衰减和版本化保存;
  • 基于价值、热度与可信度的生命周期决策、可追踪摘要和向量同步;
  • systemd生命周期定时维护;
  • 遗忘后的自动安全页压缩、系统向量独立探测、保守擦除验证和审计覆盖率接口;
  • openKylin Embedding与向量数据库SDK生产适配;
  • systemd、cgroup v2、journald和BPF LSM链路;
  • 知识结构化与冲突裁决、质量、生命周期、遗忘验证和审计覆盖率的统一运行时;
  • 偏好提取、敏感识别和精准遗忘的公开合成量化数据集与报告生成器;
  • 知识Recall@5、MRR、跨语言检索、冲突种子集和独立人工标注裁决工具;
  • openKylin AI Runtime的headless systemd回退单元与启动重试;
  • 敏感写入决策、提交、BPF文件保护和精准遗忘的关联审计探针。
  • 中文姓名/地址的有界本地Trie词典与本地Transformers Token Classification可选后端;运行时强制离线加载,不外传记忆正文;
  • NER、NLI和多语言Embedding的独立Unix Socket worker、有界帧协议、systemd/cgroup资源单元、离线权重哈希清单与明确降级策略;
  • MultiWOZ、ToolBench、MS MARCO、MIRACL、MKQA、PRISM、SNLI、FEVER、CLUENER、MultiPriv-PII、SecretBench与TOFU的许可清单、确定性转换器和离线评测入口;
  • MultiWOZ、ToolBench以及PRISM/MKQA/SNLI/CLUENER/TOFU固定真实公开小规模子集实验和SHA-256真值冻结。
  • 启用/禁用记忆模块的隔离子进程资源A/B,以及openKylin系统SDK、systemd独立cgroup和P95/OOM正式门禁。
  • TransportGPT真实模型跨会话记忆启用/禁用闭环及memory ID引用证据。
  • 可中断恢复的离线KEK轮换、独立密钥托管备份、销毁前可恢复性校验和销毁后失败关闭证明。

0.3.0集成基线在Windows和openKylin 2.0 SP2均通过179项单元与集成测试;加入外部公开数据适配器、资源A/B、Agent闭环和治理加固后,远端基线在Windows与openKylin 2.0 SP2分别通过197/197项测试。2026-07-18当前工作树修复验收阻断项、接入正式评测工具链和AES-GCM信封加密后,openKylin干净源码包通过221/221。2026-07-19进一步加入持久向量桥接、HNSW新集合、流式隐私探针和盲索引v3后,Windows完整回归共224项,223项通过、1项仅因Windows不具备POSIX权限语义而跳过;目标机C++桥接重新编译成功。最终从零装载5000条加密记忆并执行100次系统SDK端到端查询,Recall@5=1.0000、P95=61.717ms、RSS结束48,406,528B;5000条密文、向量和盲索引计数一致,明文载荷行0,审计链与SQLite完整性有效。随后完成100和5000条记忆、各100请求的系统SDK正式资源A/B:5000条启用态Recall@5=1.0000、P95=128.365ms,512MiB/50% CPU独立cgroup请求峰值529,514,496B,swap峰值4,599,808B,OOM和OOM-kill均为0;5000个合成向量删除后3个强一致ID探针均不存在。该规模预装载耗时约52.9分钟并触发6801次memory.max事件,在线检索门禁通过,但受限批量装载仍需优化。本轮最终完整回归为Windows 228项中227项通过、1项POSIX权限测试跳过,openKylin 228/228通过。

同日新增密钥运维闭环后,Windows全量239项中238项通过、1项POSIX权限测试跳过;openKylin 2.0 SP2为239/239。目标机合成副本完成“创建独立密钥备份 → 活动KEK轮换 → 使用备份内旧KEK验证1条记录 → 销毁该合成备份密钥 → 归档仍在但恢复失败关闭”的CLI链路;活动KEK和登记文件权限0600、备份目录0700,10条审计事件哈希链有效。验证没有删除或改写目标机既有备份。公开结果和限制见测试报告与openKylin 0.3.0验证记录,历史基线见openKylin 0.2.0验证记录。

验收收口增量完成后,Windows全量247项全部成功,其中2项Linux/POSIX专属检查跳过;同一源码在openKylin 2.0 SP2为247/247。openKylin真实LLM正式A/B使用100个相同请求、系统Embedding/向量SDK和两个512MiB/50% CPU独立scope:Recall@5=1.0000、启用答案准确率0.7200、禁用标记泄露率0、记忆准确率增量0.7200、检索P95=172.363ms,启用/禁用模型P95分别为3889.920/3169.342ms,端到端P95分别为4057.488/3169.345ms,两个scope均无OOM。28次失败全部属于“已召回并引用memory ID,但模型未使用期望事实”,没有检索或Top-5排序失败;10个系统向量删除后3个强一致探针残留为0。独立合成服务还完成敏感decision/commit到TGID、inode、device的BPF/auditd关联验收,全部7项OS关联检查通过;BPF仍不解析自然语言正文。

2026-07-20继续针对上述28次生成失败加固:Adapter明确提示跨语言语义对齐,加入引用/弃答矛盾、未知引用、漏引及“回答标识必须来自已召回上下文”的模型无关校验,并允许最多一次不读取真值标签的受控修复;短事实提取显式关闭GLM深度思考,避免128 Token预算只产生reasoning_content而正文为空。新glm-4.6v正式100请求A/B在相同请求集、系统SDK和两个512MiB/50% CPU独立scope下达到Recall@5=1.0000、启用答案准确率及记忆增量0.9900、禁用泄露率0、检索P95=102.829ms;启用/禁用模型P95为4281.555/3885.780ms,端到端P95为4392.942/3885.783ms,两组OOM/OOM-kill均为0。仅1次工作流样本在初答和一次修复中仍未原样采用已召回事实,失败被保留;Windows与openKylin最终分别执行253项并成功,Windows有2项Linux/POSIX专属检查跳过。

同日继续收口OS Agent三阶段记忆调用:RAG请求新增向后兼容的stage字段,参考适配器分别在任务规划、工具调用和结果生成阶段配置记忆类型、Top-K与Token预算,并统一保留memory ID引用和阶段审计。3条公开合成任务的实际HTTP启用/禁用A/B中,规划采用、工具偏好采用、工具结果复用、输出偏好、阶段引用和阶段审计均为1.0000,禁用组三阶段成功率为0,记忆增量为1.0000。Windows全量257项成功,其中2项Linux/POSIX专属检查跳过;同一隔离源码在openKylin 2.0 SP2为257/257。该结果证明链路闭环,不替代真实业务Agent和正式人工真值测评。

2026-07-22收口发布构建依赖:scripts/build_wheel.py改为Python标准库离线确定性构建器,目标机无需预装pip、setuptools或wheel。新增回归在禁用site-packages的python -S下连续构建两次并逐项校验ZIP、METADATA、console script、RECORD哈希与固定时间戳;相同源码产物字节一致。Windows完整回归258项成功(2项Linux/POSIX专属检查跳过),标准PEP 517无缓存构建与离线wheel安装导入均通过;没有pip的openKylin 2.0 SP2隔离副本完成258/258,发布预检含wheel阶段PASS,158个公开候选文件隐私扫描无发现。标准PEP 517前端仍需requirements-build.txt中的构建包,该声明没有被误删,也没有成为生产运行依赖。

同日完成真实公开小规模子集的零模型API复验:PRISM 300例结构化偏好接入Precision/F1=1.0000;TOFU 40条目标、50条保护记录的遗忘选择F1=1.0000、误删率0。MKQA 100条中文查询到英文记忆的关键词基线Recall@5=0.3900;新增本地多语言Embedding后达到Recall@5=0.9800、MRR=0.9620、P95=117.874ms,通过质量门禁和赛题≤500ms要求。SNLI本地NLI执行器在冻结300句对上Accuracy=0.8900(267/300),低于项目自定0.90门禁3例;两份上游投票Cohen’s κ=0.7235。CLUENER本地NER在冻结300例达到Precision/Recall/F1=0.7306/0.7877/0.7581(姓名0.9016、地址0.6034),检测P95=60.804ms。随后把原300例PII与12个安全凭据正例、4个负例、12个自定义模式正例、4个负例组成332例混合正式子集:credential/custom分类F1均为1.0000,PII仍为0.7581,混合总F1=0.7857。真实openKylin LLM资源A/B经来源、同请求哈希、systemd/cgroup和零OOM校验后接入;正式v3锁覆盖9个真值/证据文件,formal_ready=true且无协议缺口。总门禁仍因SNLI 0.8900和敏感总F1 0.7857低于项目自定0.90而失败。三类模型均只从Git忽略的本地目录加载,模型API调用为0;Windows完整回归287项通过、其中2项按平台跳过,openKylin公开白名单隔离候选287/287且隐私扫描184个文件零发现。目标机尚未安装这些可选模型,不能声称目标机模型资源门禁通过。完整结果和解释见测试报告。

随后针对CLUENER地址边界建立了与正式冻结300例不重叠的开发集和验证集,各300例,转换器支持重复使用--exclude-truth排除多个既有split。候选精度模式加入严格BIO非法I-*处理、地址独立置信度阈值和仅由训练split生成的有界边界词典:开发集地址F1从0.6292升至0.7273,独立验证集从0.4512升至0.4789;正式332例混合集整体F1从0.7857升至0.7889、误报52降至38,但地址F1从0.6034降至0.5860。因此该模式仅作为config/sensitive_patterns.ner.boundary.example.json可选配置保留,不替换默认正式基线。正式评分器现同时输出by_category和by_subtype,可为地址等子类型设置独立门禁,禁止用整体分数掩盖单项回退。当前工作树Windows全量293项成功、2项平台专属跳过;184文件公开白名单候选在openKylin 2.0 SP2新隔离目录293/293,传输SHA-256一致、shell语法通过且隐私扫描零发现。目标机仍未安装可选NER权重,这一结果证明源码兼容,不替代目标机NER模型资源复测。

最新增量加入纯本地NER训练器和开发/独立验证双门禁。训练器可保留CLUENER原始32类头、处理嵌套实体并只对地址类加权;训练报告不保存原文、实体文本和本机路径。2048条候选在开发300例上把地址F1/Recall从0.6292/0.6292提高到0.6468/0.7303,姓名F1保持0.8533;但在排除正式集及此前900例开发/验证数据的全新100例留出集上,地址Recall虽由0.5000升至0.5769,地址F1却由0.4194降至0.4054,姓名和整体F1也回退。候选被自动拒绝,正式冻结集未重跑,默认NER没有替换。加入7项专项测试后,Windows当前工作树300项执行成功,其中2项Linux/POSIX专属检查跳过;187文件公开源码包在openKylin 2.0 SP2隔离目录完成300/300,完整发布预检、离线wheel构建、Shell语法和隐私门禁均通过。该目标机回归不包含可选模型权重,证明源码兼容而非NER模型资源合格。

随后引入与既有CLUENER切片独立的MultiPriv-PII中文地址协议。官方975条中文记录的结构化location均在生成段落中唯一精确出现;适配器按地址值去重并构造450/225/150条地址完全互斥的训练、开发和一次性验证集。该真值是结构化字段精确匹配派生,不冒充人工span共识,且CC BY-NC-SA 4.0只允许非商业研究。首个部分标注head-only训练候选三轮地址F1均低于基线,最佳epoch为0,因此未触碰验证集。随后不改权重的地址上下文候选合并相邻“省+下级地址”片段并抑制缺少邮政证据的医疗机构误报:开发集地址P/R/F1由0.9331/0.9911/0.9612升至1.0000/1.0000/1.0000;一次性验证集由0.9245/0.9800/0.9515升至1.0000/1.0000/1.0000。既有300例CLUENER回归集地址F1由0.6292升至0.6742、姓名F1保持0.8532;冻结332例混合集总体/地址/姓名F1保持0.7857/0.6034/0.9016,无回退也无虚增。新配置为config/sensitive_patterns.ner.address-context.example.json;原始数据、派生文本、失败训练权重和评测报告均未进入Git。Windows当前工作树305项完成且2项平台专属检查跳过;该模型实测仍只在Windows CPU完成,不能写成openKylin可选NER资源已通过。

知识结构化与冲突裁决、质量、偏好融合、生命周期、擦除验证和审计覆盖已经接入统一运行时。本轮加密长测先后保留P95=771.764ms、716.196ms和736.782ms三份失败基线;组件计时定位到通用短词触发密文候选线性解密后,采用版本化3/6元HMAC盲索引、稀有锚点和“具体词项命中即停止泛化扩展”,最终openKylin系统SDK从零5000条、100次查询达到Recall@5=1.0000、P95=61.717ms,满足≤500ms门槛。不能用离线确定性向量结果替代该实测,也不能把合成数据结果外推为所有真实负载表现。

随后建立隔离的Windows GPU训练环境:RTX 3060 Laptop、驱动566.07、PyTorch 2.5.1+cu124和Transformers 4.44.2完成CUDA张量及CLUENER模型真实前后向传播。训练器新增强制--device cuda、梯度累积、骨干/分类头差异学习率以及CUDA型号、峰值显存、耗时证据;请求CUDA不可用时不再静默回落CPU。4096条CLUENER加450条MultiPriv的保守分类头候选在84.761秒完成3轮,开发地址F1由0.6292升至0.6492,43条从未曝光的小型留出集由0.7200升至0.8000,双段晋级器授权一次冻结复算。冻结332条地址F1由0.6034升至0.6256,但总体F1由0.7857降至0.7846、姓名F1由0.9016降至0.8889,故候选最终拒绝且默认模型不变。GPU环境、数据、权重和报告均留在Git忽略目录;该小型留出集只有10个地址实体,不能外推为通用性能。Windows完整回归307项执行成功,其中2项Linux/POSIX专属检查跳过;11阶段发布预检和190文件隐私扫描均通过。同一精确提交源码包在openKylin 2.0 SP2完成307/307、11阶段发布预检和191文件隐私扫描;目标机没有GPU或可选模型权重,该结果只证明源码兼容。

2026-07-23又在同一openKylin 2.0 SP2 CPU目标机对提交cfbb524完成三组可选模型的真实离线交付复验。NER 332条混合敏感子集F1=0.7857、P95=107.474ms;SNLI 300句对Accuracy=0.8900、31.268ms/对;MKQA 100条中英跨语言检索Recall@5=0.9800、MRR=0.9620、P95=58.001ms。三项退出码均为0,且无swap、OOM或OOM-kill。对应cgroup峰值约764.6MiB、554.2MiB和791.1MiB,说明可选模型代码与权重能在openKylin CPU运行,但不能与核心服务共用现有512MiB限制;部署时必须使用独立且至少从1GiB开始复测的模型资源单元。模型权重、缓存、冻结数据和带本机路径的原始报告均未进入Git;用户级MemGuard服务和BPF服务在复验后保持active。

同日后续提交12e94b4和33673b6将三类可选模型从512MiB核心进程中拆分为三个默认不启用的本地worker。每个unit使用MemoryMax=1G、MemorySwapMax=0、CPUQuota=200%、两个OMP/MKL推理线程、PrivateNetwork=true和AF_UNIX限制;权重运行文件共18个均校验大小与SHA-256。精确模板下,NER 332例F1=0.7857/P95=125.527ms,SNLI 300例Accuracy=0.89/30.285ms每对,MKQA 100例Recall@5=0.98/MRR=0.962/P95=71.937ms;三个worker峰值约235/287/557MiB,swap、OOM和OOM-kill均为0。最终固定归档在openKylin上328/328通过,204个公开文件隐私扫描零发现;复验后临时worker全部停止,核心与BPF-LSM服务保持active。

正在完善

  • 将SNLI 0.8900文本关系信号与版本、来源权威和知识融合赢家裁决组成完整冲突正确率评测;
  • CLUENER冻结正式集地址F1和统一敏感F1仍需提升;新的地址上下文候选已通过独立MultiPriv开发/验证门禁且不回退CLUENER回归与冻结混合集,但尚未提升原冻结集地址F1;credential/custom已进入同一冻结正式子集且两类F1均为1.0000;
  • 可选多语言Embedding、NLI和NER已有独立1GiB systemd worker并通过openKylin CPU交付复验;后续仅需在更高真实并发下重测余量,或作为非阻断项开展量化/蒸馏;
  • 知识、质量和生命周期数据集的真实样本扩充与失败样本分析;
  • MS MARCO许可受限检索子集的本地实测,以及携带许可原始数据的openKylin外部回放;
  • 偏好、敏感识别和遗忘合成集之外的人工标注与真实分布验证;
  • 未登记离线备份、人工副本、旧句柄和系统快照等托管边界之外的精准遗忘治理;
  • 继续分析最新openKylin真实LLM A/B中1/100次“检索和memory ID引用成功、一次受控修复后仍未原样使用事实”的残留生成失败;不得把该问题错误归因于检索,也不得通过重复付费抽样隐藏;
  • P2运维增强:优化512MiB/50% CPU限额下的5000条批量装载;该项不阻断已通过的在线检索与核心功能验收;
  • 偏好、知识、跨语言、敏感识别和遗忘在真实分布上的量化报告;
  • 3至5分钟演示视频。

公开交付文档包括概要设计、详细设计、部署与使用手册和测试报告。

项目结构

路径 说明
memguard/ 协议、服务、存储、安全、治理契约、检索、客户端和适配器
openkylin/ openKylin系统向量数据库SDK C++桥接
bpf/ BPF LSM内核程序、用户态加载器和构建入口
deploy/ openKylin安装和systemd配置
tests/ 单元、HTTP、向量、Agent兼容和交付契约测试
benchmarks/ 量化评测入口
examples/ 框架无关Agent与业务事件示例
docs/ 概要/详细设计、部署、测试、API、接入和公开目标机验证记录

安全边界

  • 仓库不应包含真实API Key、Token、密码、私钥、个人.env或用户隐私数据;
  • 生产配置在openKylin SDK缺失时应明确失败,不能静默使用测试向量实现;
  • 当前“不可恢复遗忘”覆盖活动SQLite内容和系统向量索引;另可对本工具创建并登记的独立密钥备份执行密码学销毁,但不宣称自动删除未登记备份、人工副本或系统快照;
  • 信封加密保护业务载荷;为执行用户隔离、版本和生命周期查询,记录ID、用户/会话ID、记忆类型、偏好键与场景、状态和时间戳等操作字段仍为明文索引,不应把该方案表述为SQLite全库透明加密;
  • 主密钥文件、进程内瞬时明文、交换区、崩溃转储、未登记备份和系统快照属于部署治理边界;活动库销钥证明只覆盖该条记忆的被包裹DEK,托管备份销钥证明只覆盖登记表所指向且未被外部复制的那一份备份密钥;
  • 文件系统unlink不等同于存储介质安全覆写;备份密钥的外部副本和介质取证恢复能力继续显式标记为unknown;
  • BPF LSM提供数据库文件inode/TGID级访问保护,不是逐条记忆内容的内核识别;
  • 不同client_id表示不同Agent来源,仅用于追踪与审计,不代表多Agent协作。

最新 NER 抗遗忘增量

NER 训练与晋级协议现已增加真值 SHA-256 绑定、训练/开发/回归精确文本 防泄漏检查、MultiPriv 地址+姓名联合监督、反事实地址困难负样本、姓名回放、 姓名分类头锚定和开发总体 F1 门禁。2026-07-22 的完整 CUDA 实验在 130.321 秒内完成 6373 个调度条目、3轮训练,但三个 epoch 均因开发总体或 地址指标回退被拒绝,best_epoch=0;最终验证集和正式冻结集均未运行, 默认模型不变。实现依据、数据边界和逐轮结果见 NER 地址困难负样本与抗遗忘训练报告。

License

本项目采用MIT License。

关于
2.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号