• 请不要在回答技术问题时复制粘贴 AI 生成的内容
asuka321
V2EX  ›  程序员

[开源] Magi:一个本地桌面 Agent,把你的碎片活动沉淀为白盒记忆

  •  
  •   asuka321 · 7h 12m ago · 666 views

    大家好,开源一个自己折腾的桌面端 AI Agent 项目:Magi

    GitHub Repo:Github

    为什么要做 Magi ?

    开发这个项目的念头,起因于去年尝试做的一款日记应用。当时期望通过对日记进行行为与情感分析,让 AI 刻画出用户画像,从而提供更有温度的交互。推进过程中遇到了明显的瓶颈:大部分用户根本不会主动表达日常操作习惯。日记能留存生活中的“大事”,对“稀松平常的小事”无能为力。

    今天又加班到了凌晨 1 点,其实完全没我啥事,就硬等前端把接口调完。不过靠我精湛的摸鱼技巧,在公司爽看了 3 集 MyGO ,还听了好久周杰伦的新专。

    这段平凡的经历,几个月后你或许还记得当晚的加班。至于期间看了什么剧、听了什么歌、当时的情绪状态,往往会彻底遗忘。

    Magi 的核心目标正是解决这一痛点。它作为一个桌面 Agent ,通过接入浏览器记录、媒体播放、照片库、日历、Git 提交等外部传感器数据,将这些被动产生的操作痕迹,汇聚成用户个人的长期记忆时间线。

    长期记忆能力

    为什么不能直接使用向量库?

    很多系统所谓的长期记忆,最后都变成了“把记录切块丢进向量库”。在桌面端高频传感器场景下,这种做法会带来灾难性的后果。

    以一个中度使用的开发者为例,每天的 API 对话、终端操作、网页浏览记录、媒体访问记录可达 3000 条。如果全量存入并做索引:

    • 原始记录体积预估:22GB - 66GB / 年
    • 带来后果:本地存储成本爆炸,且在回答“我现在住在哪里”等问题时,极易召回 AI 自己曾经的错误推测(回音室污染)。

    五层生命周期的本地记忆架构

    要支撑海量被动数据的摄入并保持检索的可用性,Magi 在本地构建了一个五层( L0-L4 )生命周期的记忆架构。

    • L0 工作记忆:维持当前对话和任务的临时状态。

    • L1 事件记忆:将对话、终端命令、日历、Git 提交等碎片信息,规范化为带有来源和时间戳的底层事实证据。

    • L2 知识记忆:从 L1 中提取出实体、状态和关系。系统严格区分用户明确表达的事实与 AI 推测的结果,避免相互污染。

    • L3 摘要反思记忆:按天/周对海量碎片进行降采样和总结压缩。

    • L4 技能记忆:记录工具调用的成功率与报错特征,具备错误路径熔断机制,让 Agent 积累做事经验。

    目前这套记忆检索链路在 LongMemEval 评测集上跑到了 87.2% 的准确率。关于整个记忆的构建思路,我也写了一篇文字这博客里。

    赋予 Agent 真实的“生命感”

    在这个记忆底座之上,为了让 Magi 真正像一个“伴侣”运作,交互层创新性实现了两个机制:

    1. 告别机械对答的自然节奏回复 传统大模型的回复是严格的 1 对 1 同步模式。Magi 增加了一个后置的切片链路,会将长段的回复拆解,模拟真人的输入停顿,按多段、有延迟的异步方式发送给用户,大幅降低“机器感”。

    2. 动态人格跃迁及深层人格 Agent 的人格设定支持深度自定义,并与记忆系统的 L2 状态层打通。当底层观察到用户处于高压或焦虑状态时,即使是偏向“搞笑”的人设,也会自动平滑跃迁至温和安抚状态。随着互动时间的拉长和特定里程碑的触发,还会解锁深层的人格维度。

    产品状态与相关链接

    在产品形态上,Magi 提供了一个开箱即用的桌面客户端。所有应用数据和记忆数据库默认保存在本地。除了正常的 LLM API 调用,系统没有任何外部数据上报逻辑。

    项目目前处于 Beta 阶段,核心的记忆分层链路和基础传感器均已完整跑通,提供开箱即用的 macOS 安装包。由于系统的复杂性,实际运行中可能会遇到一些预料之外的 Bug 。如果你在体验中发现任何问题,欢迎随时在 GitHub 提交 Issue ,我会第一时间跟进修复。

    对 Agent 底层逻辑或记忆架构感兴趣的 V 友,欢迎下载体验并查阅源码。期待各位的 Issue 和 PR 。

    相关链接

    Supplement 1  ·  6h 4m ago
    附一些截图

    传感器采集和记忆召回



    自然语言分割



    记忆页面及判定处理



    插件能力
    8 replies    2026-05-14 19:05:54 +08:00
    lpynbysa
        1
    lpynbysa  
       5h 52m ago
    厉害,我试试
    lpynbysa
        2
    lpynbysa  
       4h 45m ago
    小白试用了一下,我接入了 gemini 的 api ,开 tun 模式启动了对话,但是它不知道我在听什么音乐,也查不到我的浏览器记录,你那个里面说的是 chrome 浏览器,我用 chrome 浏览器浏览了几个页面,它也没提到。插件市场基本的几个插件我都装了。不知道是哪里没操作对,求解惑
    asuka321
        3
    asuka321  
    OP
       3h 31m ago
    @lpynbysa #2 要在设置-传感器里把相关的传感器开一下,这个 agent 目标不是说可以实时去查当前你的状态是什么,是采集你的信息,然后记录下来便于后续分析。因为插件同步会有聚批逻辑,会有一定延迟,想立即看结果可以去对应的传感器设置里点立即同步。这样再问 ai 就能回答了
    lpynbysa
        4
    lpynbysa  
       3h 6m ago
    @asuka321 我点了立即同步,问 ai 他还是没回答出来,期间一直在放歌。传感器那里,网易云音乐显示有红点 [no such table: web_playlist] ,浏览器我一直用的 edge ,不知道 chrome 插件有没有用,我把 steam ,网易云,edge 都打开了,刷新然后同步,问 ai 我最近在干什么,它不知道。
    asuka321
        5
    asuka321  
    OP
       3h 1m ago
    @lpynbysa #4 网易云采集是通过本地 sqlite 的数据库的,可能版本不太一样,你的网易云版本和系统版本能发一份给我么,我看看
    lpynbysa
        6
    lpynbysa  
       2h 43m ago
    Windows 11 家庭中文版 版本号 25H2 关于网易云音乐 当前版本 3.1.28 (64 位)(Build: 205001) Patdh:50d8b54
    asuka321
        7
    asuka321  
    OP
       2h 8m ago
    @lpynbysa #6 可能是默认文件路径不存在,我修了一下把表不存在和文件不存在区分开了,文件路径也加到配置里去了,在插件市场里更新一下,然后重新进网易云传感器里同步下看看
    lpynbysa
        8
    lpynbysa  
       11 mins ago
    @asuka321 好的,感谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3398 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:17 · PVG 19:17 · LAX 04:17 · JFK 07:17
    ♥ Do have faith in what you're doing.