爱意满满的作品展示区。
THESDZ

[开源]dtool v0.4.0 发布: SQL 引擎不再只有 SQLite,数据接入先预演再落盘

  •  
  •   THESDZ · 5h 12m ago · 248 views

    V2EX 的各位好,dtool 是一个给 AI Agent 用的本地 Excel 数据流水线 CLI:Excel 转数据集,AI 写 SQL ,dtool 执行、留痕、出图,数据不出本地。之前发过 v0.3.0 ,这次是 v0.4.0 。

    v0.3.0 用下来,有两个痛点比较硬:

    痛点一:SQL 引擎只有 SQLite ,分析型查询有天花板。

    日常 GROUP BY 、窗口函数够用,但一遇到多维小计就难受——ROLLUP / CUBE / GROUPING SETS 全不支持,只能拿 UNION ALL 硬拼,SQL 又长又容易写错。表一宽、数据一多,体验就卡在这。更根本的问题是,引擎是写死在里面的,想换、想加,没有口子。

    痛点二:convert 一跑就落盘,Schema 生成即事实。

    Excel 丢进去,列类型、可空性、唯一性直接定死,猜错了只能等查询跑偏了再回头重跑。数据入口没有可复核的中间态。同样地,转换器本身也是内部实现,想加个新格式、改个推断逻辑,都得动核心代码。

    v0.4.0 的思路不是单点打补丁,而是把引擎和转换器这两层都抽成接口,让能力扩展变成可插拔的事。

    引擎接口化:SQLite 之外,DuckDB 正式接入

    所有 v0.4.0 发布二进制现在同时内置 SQLite + DuckDB,单文件零依赖的契约不变,不用另装。DuckDB 补上了 SQLite 在分析型查询上的短板,ROLLUP / CUBE / GROUPING SETS 这类多维小计不再只能拿 UNION ALL 硬凑。SKILL.md 也补了引擎方言、沙箱边界和跨引擎哈希的说明,避免 Agent 拿 SQLite 的习惯去写 DuckDB 。

    关键不在“多了一个引擎”,而在引擎变成了接口:后端可扩展,后面再加新引擎是接一个实现的事,不用反复动核心。DuckDB 是第一个走通这条路的,不是最后一个。

    代价是依赖里多了 duckdb-go/v2 、arrow-go/v18 这些,二进制会大一些。另外这版不再提供 windows/arm64 构建,Windows 用 amd64 的没影响。

    转换器接口化:可预演练,也为新格式留了口子

    转换器从内部实现提升为接口层。直接效果是可以先预演练,确认之后再正式落盘——列类型、可空性、唯一性这些判断,能在写盘之前拦住,Excel 入口从“生成即成事实”变成了可审阅的一步。

    同样地,接口化的意义不止于预演练:转换器可扩展,后续接入新的输入格式、替换推断策略,都是按接口加实现,不用改核心。今天受益的是 Excel 的预演练,明天受益的是“再加一种格式”。

    没变的

    单二进制零依赖、默认强隐私( stdout 只给路径 + SHA256 ,不打印数据内容)、Action 台账、stdout 结构化 JSON 、退出码 4 = 跑完但出错 / 5 = 可重跑、默认沙箱只放单条 SELECT / WITH 、图表单图 1000 点上限。这些契约都保留。

    一句话:v0.3.0 立规矩,v0.4.0 把引擎层和转换层都接口化了——DuckDB 和 Excel 预演练是这次看得见的两项新能力,可扩展性是留在底下的那条线。隐私和留痕的底线没动。


    快速开始

    dtool 的发布包是完整包:二进制、SKILL.md、README.md、LICENSE、THIRD_PARTY_NOTICES.md 都在同一个压缩包里。无论走哪条安装路径,目标都是把这一整套落到机器上——技能描述和可执行文件一起装,不用分两次。

    方式一:对话安装(最省事,技能 + 二进制一次到位)

    不用开终端,直接在 Agent 聊天框里发一句话。

    OpenClaw:

    请帮我安装 dtool 这个 skill ,完整包(含 dtool 二进制),从 https://github.com/dezhishen/dtool 拉取。

    支持 SkillHub 对话安装的 Agent( QClaw 、WorkBuddy 、Kimi 、Claude 等):

    根据 https://skillhub.cn/install/skillhub.md 安装 SkillHub 商店,然后安装 dtool 技能完整包(含二进制),技能页面是 https://skillhub.cn/skills/indiv-sdz/dtool ,源码仓库是 https://github.com/dezhishen/dtool 。

    Agent 会把技能描述和二进制一起装好。装完在会话里让它跑一句 dtool version,有版本输出就说明二进制也到位了。

    方式二:GitHub Releases 手动下载(离线 / 想自己控制路径)

    Releases 页面: https://github.com/dezhishen/dtool/releases

    Linux / macOS:

    V=$(curl -sSL https://api.github.com/repos/dezhishen/dtool/releases/latest \
      | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p')
    base=https://github.com/dezhishen/dtool/releases/download/$V
    curl -LO "$base/dtool_${V#v}_linux_amd64.tar.gz" && curl -LO "$base/checksums.txt"
    sha256sum -c --ignore-missing checksums.txt
    tar -xzf "dtool_${V#v}_linux_amd64.tar.gz"
    ls   # dtool 、SKILL.md 、README.md 、LICENSE 、THIRD_PARTY_NOTICES.md
    install -m 0755 dtool ~/.local/bin/
    mkdir -p ~/.claude/skills/dtool && cp SKILL.md ~/.claude/skills/dtool/
    dtool version
    

    Windows:下载 dtool_<版本>_windows_amd64.zip,解压得到 dtool.exe、SKILL.md、README.md、LICENSE、THIRD_PARTY_NOTICES.md。dtool.exe 放进 PATH,SKILL.md 复制到 Agent 技能目录。v0.4.0 不再提供 windows/arm64 构建,amd64 不受影响。

    方式三:OpenClaw 原生命令

    openclaw skills install @indiv-sdz/dtool
    # 或直接从 GitHub 仓库装
    openclaw skills install git:dezhishen/dtool
    # 装到共享目录(所有 Agent 可见)
    openclaw skills install @indiv-sdz/dtool --global
    

    不加 --global 默认装到当前工作区 ./skills/。装完 openclaw skills list 确认,再跑 dtool version 验证二进制。

    方式四:ClawHub CLI ( OpenClaw 生态的标准包管理)

    npm i -g clawhub          # 需要 Node.js 22.13+ 或 24+
    clawhub install <skill-slug>
    clawhub list
    

    默认装到 ./skills/ 并记录版本到 .clawhub/lock.json。ClawHub 的 GitHub 仓库:https://github.com/openclaw-community/openclaw-hub。

    方式五:SkillHub CLI (国内镜像,跨平台通用)

    curl -fsSL https://skillhub.cn/install/install.sh | bash
    skillhub install dtool
    skillhub link    # 自动链接到本机检测到的 Agent 技能目录
    

    SkillHub 技能页:https://skillhub.cn/skills/indiv-sdz/dtool。装完同样用 dtool version 验证二进制。

    方式六:手动复制(离线 / 私有环境兜底)

    如果手头只有仓库源码、拿不到 Releases 包:

    git clone https://github.com/dezhishen/dtool.git
    mkdir -p ~/.claude/skills/dtool
    cp dtool/SKILL.md ~/.claude/skills/dtool/
    

    这条路径只复制了技能描述,二进制需要另外从 Releases 下载或自行编译。OpenClaw 全局技能目录是 ~/.openclaw/skills/,项目级是 <项目>/.openclaw/skills/。

    装完验证

    新开一个 Agent 会话,发一句:

    用 dtool 查一下当前版本,然后帮我看看工作区里有哪些数据集。

    dtool version 能返回版本号、dtool query 能返回结构化 JSON ,才算技能和二进制都就绪。如果 Agent 提示找不到 dtool,检查二进制是否在 PATH 里;如果技能列表里有 dtool 但 Agent 不主动调用,检查技能是否落到了 Agent 实际加载的 skills 目录。

    跑第一条流水线

    # Excel → 数据集( v0.4.0 可先预演练 Schema ,确认后再落盘)
    dtool convert --input sales.xlsx --name sales
    
    # SQL 查询,数据集名直接当表名
    dtool query --sql 'SELECT region, SUM(amount) AS total FROM sales GROUP BY region ORDER BY total DESC'
    
    # 出图,引用上一次查询结果,不用重跑
    dtool visualize --input latest:query --type bar --x region --y total --title "区域销量" --output out/sales.png
    
    # 一条龙
    dtool pipeline --excel sales.xlsx \
      --sql 'SELECT region, SUM(amount) AS total FROM data GROUP BY region' \
      --chart bar --x region --y total --output out/summary.png
    

    每步 stdout 都是结构化 JSON ,含 action_id、产物路径和 SHA256 ;失败时 stdout 仍是 JSON ,退出码非 0 。数据不出本地,AI 只负责写 SQL 和出图思路,执行和留痕交给 dtool 。

    关键地址汇总:

    1 replies  •  2026-10-28 12:47:48 +08:00
    vexify
        1
    vexify  
       4h 6m ago via Android
    ai 味太重
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4956 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 133ms · UTC 08:54 · PVG 16:54 · LAX 01:54 · JFK 04:54
    ♥ Do have faith in what you're doing.