Sign in

    moomem

    memory
    agent
    rag
    bm25
    vector-search
    Download zip
    Author
    Version
    0.8.3
    License
    MIT
    Last updated
    11 days ago
    Downloads
    163

    #moomem

    MoonBit 嵌入式 Agent 记忆层。嵌在宿主进程里,按 user_id 做向量 + BM25 检索。native 上写入双槽 JSONL,崩溃后仍从上一份完整快照恢复。缺省离线,不需要 API Key。

    #上手

    需要 moon ≥ 0.1.20260920。

    moon add heyq02/moomem

    fn main {
    let mem = @moomem.MemoryStore::open("./memory").unwrap()

    let summary = mem.add("user-42", "我对花生过敏").unwrap()
    println("extracted=\{summary.extracted} inserted=\{summary.inserted}")

    let hits = mem.recall("user-42", "花生过敏", top_k=3).unwrap()
    for e in hits {
    println("[\{e.created_at}] \{e.content}")
    }

    ignore(mem.close())
    }

    同一目录再次 open,记忆还在。wasm、wasm-gc、js 缺省只留在进程内存里。要换真实模型,在 open 时注入 Embedder、Extractor、ConflictJudge。

    native 上 open("./memory") 会写成 <path>/moomem/head 加两个 slot*.jsonl。先把整份快照写入非当前槽,成功后再拨 head。索引不落盘,open 时从快照重建。

    #加上之后多了什么

    Qwen 和 DeepSeek 只把一句话变成向量和事实,它们不保存。moomem 把结果按 user_id 留下,下次 recall 从这里取,不再把原话发给模型。

    playground/ 依赖已发布的 heyq02/moomem,注入这两个模型后跑 moon run cmd/main。下面是这一轮的结果:

    检查跑出来的结果moomem 做了什么
    我对花生过敏、我住在北京extracted=1 inserted=1收下模型抽出的事实
    今天天气不错extracted=0 inserted=0闲聊不入库
    过敏再说一遍duplicates=1 inserted=0认出重复,不存成第二条
    另一个用户搜过敏无命中按用户隔开
    关掉再 open过敏和住址还在写在磁盘上,不靠这次进程
    forget 后再搜过敏不再出现删掉一条,之后的召回遵守这次删除

    没有另跑一个摘掉 moomem 的对照。上表这些 user_id、./memory、关掉再打开还在,模型接口本身没有。

    「我搬到深圳了」没有盖掉「我住在北京」。缺省冲突判定只在相似度够高时覆盖,这两句会并存。

    #LoCoMo 抽样

    本地 moon run benchmark --target native,密钥在 benchmark/.env。远端不跑。

    协议对齐 memory-benchmarks 的 LoCoMo:按轮次写入,检索后让模型只根据命中作答,裁判判 CORRECT / WRONG。固定种子 20261014 抽到 Evan / Sam 这一段(509 轮),再抽 20 道可计分题。嵌入是 qwen3.7-text-embedding-flash,作答和裁判都是 deepseek-flash。recall 每次取前 50 条。

    类别判对
    多跳4/4
    时间2/3
    开放1/1
    单跳10/12
    合计17/20

    这 20 题不是 Mem0 公布的全量 1540 题,也不能和他们 top 200、GPT 作答的 92.5% 直接比。逐题记录在 benchmark/results/locomo-20.json。题目文件派生自 LoCoMo,CC BY-NC 4.0,不适用本仓库的 MIT。

    #License

    Published under the MIT license. Made by @heyq02 and community 💛


    🤖 auto updated with automd