咨询工作者,写了一个本地版 Notion,加了本地知识库和 Cursor 的 AI 编辑体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tiansiix
V2EX    分享创造

咨询工作者,写了一个本地版 Notion,加了本地知识库和 Cursor 的 AI 编辑体验

  •  1
     
  •   tiansiix 5 天前 888 次点击

    楼主是做咨询的,每天的工作就是处理大量的文档、表格,做大量的审阅和资料填充工作。

    一开始开发这个工具,纯粹是因为想偷懒。我经常需要对着一堆资料去填一张大表(做评价审核),手动搞就很麻烦。后来写着写着,发现市面上的笔记软件在 AI 这块,总感觉差了点意思:要么是简单的 Chat 对话框,要么就是直接生成一堆文字,很难精细化控制。

    后来当我用过代码编辑器 Cursor 后,我就寻思:为什么写文章、写报告不能像写代码那样爽?有自动补全,有 Diff 对比( AI 改完我来决定接不接受),有项目级的上下文?

    于是写了十几万行代码,有了现在的 Linnya 。

    目前还是个内测中的本地应用,暂时没有 Notion 那样的数据库功能,但为了解决我自己的痛点,我把功能做成了这样:

    像写代码一样写文档

    这是我最喜欢的功能。我不希望 AI 直接替我写完,我希望它帮我改。

    Vibe Writing: 类似 Cursor ,AI 修改文档后,会以 Diff 的形式展现,然后按块接受或拒绝。

    diff

    AI 批量填充

    如果你有一张 excel 表需要填,每一行都需要根据资料库里的内容进行判断或总结。

    在这个工具里,你可以配置一个 Agent ,它会自动遍历每一行,去搜索本地知识库,然后把结果填进去。以前一天的活,现在几分钟就能跑完。

    批量填充

    项目制的 AI 上下文

    做咨询,一个咨询项目就涉及很多文件,现在的很多产品都是只能对单个文件对话和修改,但是 Linnya 可以对项目里的多个文件开展工作。

    项目即仓库:一个项目里可以创建多个文档(块级编辑 + 简单 mindmap ),也可以在项目里和 AI 对话。AI 的工作范围是整个项目,而不是单个文档。

    项目初始化: 如果面对新项目没思路的话,可以回答 AI 几个问题,它会自动帮你生成 3 个初始文件(框架、大纲、思路),理清思路。

    初始化项目

    本地

    除了 Ai 以外,所有数据(包括知识库索引)都在本地。甚至可以自定义对话模型的 API ,不过别的比如 embedding 之类的还需要未来适配。

    支持录音块(直接转文字+生成纪要)。支持导出 Markdown/PDF 。

    现在的状态: 现在有点纠结它的定位,它长得像个笔记软件,但我没做数据库;它像个工作台,但目前功能还很早期。 不过我自己在做深度思考、写长文报告、或者做批量审核工作时,已经离不开它了。

    未来打算做自定义审稿 Agent (这就更像咨询工作了)、工作流和更深度的知识库引用推理。

    目前是早期版本,界面可能不如 Notion 华丽,但如果你也是文字重度工作者,或者对 Local AI + 知识库 感兴趣,欢迎试用并多多提意见。

    网站:linnyai.com

    教程: https://linnyai.com/blog/

    下载: https://linnyai.com/download.html

    9 条回复    2026-01-05 10:17:13 +08:00
    regent
        1
    regent  
       5 天前
    这个思路真的是让人耳目一新,楼主加油
    tiansiix
        2
    tiansiix  
    OP
       5 天前
    @regent 感谢,有任何问题都可以随时反馈
    nokisubye
        3
    nokisubye  
       4 天前
    老哥很厉害
    tiansiix
        4
    tiansiix  
    OP
       4 天前
    @nokisubye 感谢,这也是工作之余开发的
    livib
        5
    livib  
       4 天前
    你做的这个产品跟我正在开发的有部分高度重合,不过我目前重心是在完善底层协议以解决文档选取和标注的幽灵漂移问题
    tiansiix
        6
    tiansiix  
    OP
       4 天前
    @livib 谢谢,可以多交流交流
    livib
        7
    livib  
       4 天前
    这协议本质上是在解决三个通常被低估的“大坑”:

    1 浏览器的不可靠性 (The DOM Chaos):

    真实痛点: 同样是加粗一个词,Chrome 可能会生成 <b><span>text</span></b>,而 Safari 可能会生成 <span style="font-weight:bold">text</span>。如果不做 Canonicalizer (规范化),两个用户协作时,就会因为 DOM 结构微小的差异导致 CRDT 算法认为“这是两段不同的文本”,从而导致内容重复或样式丢失。

    2 标注的“幽灵漂移” (The Anchoring Problem):

    真实痛点: 在 Google Docs 或 Word 中,最难的技术点不是“打字”,而是“评论跟随”。如果我在第 3 段的“法律条款”上加了评论,然后另一个人在第 1 段插入了图片,把第 3 段挤到了第 2 页。如果系统只记录“坐标位置( Offset 1024 )”,那么评论就会错误地挂在原来的位置(现在可能是第 2 段的内容)。


    3 用户感知与数据一致性的冲突 (UX vs. Truth):

    真实痛点: 网络总是不稳定的。如果用户在高铁上改了文档,网络断断续续。如果系统因为“还没同步确认”就不断让 UI 闪烁报错,用户会崩溃;如果系统“瞎猜”用户意图,最后同步时覆盖了别人的修改,用户会暴怒。

    我做了两个多月的文档功能(阅读+标注),最后不得不从底层重新设计协议来实现标注资产不丢失
    ChinaCN
        8
    ChinaCN  
       22 小时 10 分钟前
    lz 牛,确实存在这样的痛点,本质是那些文档工具还没有很好融合 AI
    tiansiix
        9
    tiansiix  
    OP
       6 小时 3 分钟前
    @ChinaCN 感谢,有机会可以下载体验下,最近还在优化中
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5377 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 08:20 PVG 16:20 LAX 00:20 JFK 03:20
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'create'); ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86