我用 DuckDB 搓了个“本地” Excel As Chat BI 工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Edward4074
V2EX    分享创造

我用 DuckDB 搓了个“本地” Excel As Chat BI 工具

  •  
  •   Edward4074 7 天前 1055 次点击

    这是我在业余时间独立开发并发布的第一个完整桌面应用Wansan Studio (万三)。

    我的本职工作是个 Java 开发,在工作中经常和产品经理对线。他们总是把 BI 报表需求整得天花乱坠,又是复杂的 Dashboard ,又是各种炫酷但没用的交互。在我看来,分析数据根本不需要那么复杂。

    于是我想:能不能做一个“有手就会”的工具?

    没有复杂的配置,没有花哨的仪表盘。拖进去文件,直接问它,出图,打印 PDF 交差。 完事。

    就这样,为了对抗“过度设计”,我开发了 Wansan Studio 。

    它是做什么的?

    简单来说,它是一个 Local-First Chat BI

    1. 拖入文件:支持 Excel 、CSV 和 JSON 。
    2. 自然语言提问:比如“分析一下 Q3 季度各产品的毛利率变化”。
    3. 自动出图:AI 会生成 SQL 查数据,并画出图表。
    4. A4 报告:A4 画布,排版完直接导出 PDF ,甚至可以直接拿去开会。

    技术栈

    • Electron: 用于构建 UI (我知道大家会吐槽内存,但是他撸起来快啊)。
    • DuckDB: 这是核心。内置的 OLAP 数据库引擎,在本地处理百万行数据几乎是 0 延迟,SQL 查询极快。
    • LLM (BYOK): 逻辑推理层(说人话:吐 sql )。采用 BYOK (Bring Your Own Key) 模式,V 站大家谁手上没几个 key 呢。

    数据安全

    Raw Data Never Leaves Your Device. 众所周知,云服务没有数据隐私。

    • 你的 Excel/CSV/JSON 行数据( Rows )存在于本地 DuckDB 内存中。
    • 我们将表头( Schema/Column Names )发给 LLM 用来生成 SQL 。
    • 应用关闭,内存销毁,数据归零。

    关于 Vibe Coding

    这个应用的全流程都是和 AI 协作完成的。

    • 想法、mvp 设计
    • 项目初始化
    • 需求规划分析
    • UI 走查
    • bug 修复
    • 图标设计
    • Landing 页设计
    • 白嫖 cloudflare
    • 包括这个帖子的大部分内容

    实际上更多时候是我提出想法,AI 负责分析、设计、确认方案,而我只是个在架构师 AICode Agent之间的提示词搬运工。

    我做 Android 出身转 Java 后端,前端我懂得不多,没有 AI 的话我大概无法自己完成这个项目,可能就停在新建文件夹的阶段了。

    我对这个项目的代码贡献甚至可能是负数,因为我时不时要手动删除一些因为重构而不再被引用的代码,避免 AI 误解。

    AI 太牛逼了,加上工作上的一些不稳定因素,以至于我这个已经超过毕业线的感到焦虑。

    那 Vibe Coding 真的零门槛吗?

    并不是,至少目前人类还需要把控工程架构,在 AI 陷入死循环能告诉他排查方向,在合适的时间点指挥 AI 进行彻底重构。

    总结:每个老板都应该给工程师配一个 200 美元的 AI ,绝对超值。(我老板不愿意,所以我在摸鱼)

    试用

    目前软件处于 Public Beta 阶段。

    什么时候正式发布?我也不知道,说不定这就是个我自己臆想的伪需求,没人用的话大概永远 beta 了……

    签名问题

    独立开发,暂时还没交保护费

    1. macOS 未签名:macOS 用户首次打开会提示“已损坏”。
      • 解决方法:在终端执行 sudo xattr -r -d com.apple.quarantine /Applications/Wansan\ Studio.app 即可。
    2. Windows:部分杀毒软件可能会误报,请添加信任。

    第一次做独立产品,恳请大佬们多指点指点,谢谢。

    第 1 条附言    3 天前

    Wansan Studio v0.2.0 更新了,移步

    8 条回复    2025-12-17 14:12:12 +08:00
    wogogoing
        1
    wogogoing  
    PRO
       7 天前 via iPhone
    我以前也为公司开发 BI ,随着业务增长再加上变数太多,后面公司用数数了。
    aheadlead
        2
    aheadlead  
       7 天前
    用 notebooklm 撸一个 intro video 吧
    Edward4074
        3
    Edward4074  
    OP
       7 天前
    @wogogoing 我本身不负责 BI 业务,只是参与讨论,但每次都觉得很扯


    @aheadlead notebooklm 还没玩过,回头玩下
    KunpengTalk
        4
    KunpengTalk  
       7 天前
    大佬,开源吧
    MIUIOS
        5
    MIUIOS  
       7 天前
    京东最近也开源了一个类似的,不过代码质量很堪忧
    Edward4074
        6
    Edward4074  
    OP
       7 天前 via iPhone
    @KunpengTalk 没有开源的打算,除非利益驱动


    @MIUIOS 就搜到个 easy bi ,你说的是这个?
    MIUIOS
        7
    MIUIOS  
       7 天前
    @MIUIOS joyagent-jdgenie ,基于 python+java 的,也是生成报表报告
    Edward4074
        8
    Edward4074  
    OP
       7 天前
    @MIUIOS 这个是企业级产品,我这是偏向给普通人开箱即用的工具,只是目前不太想做 ai 流量代理,BYOK 又挡住普通人了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1538 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 16:32 PVG 00:32 LAX 08:32 JFK 11:32
    Do have faith in what you're doing.
    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