dtool v0.3.0 发布:面向 AI 的数据工作流,从 Excel 起步,规矩立好了,不烧心

2 天前
 THESDZ

dtool v0.3.0:给 AI Agent 的本地 Excel 数据流水线 CLI


为什么做

现在拿 AI 处理表格的不少——把 Excel 丢给 ChatGPT 、Claude ,让它算个汇总、画张图。实际用下来有四个绕不开的坑:

  1. AI 会编数字。 结果对不上时,你不知道它哪一步算错;同一个表问两遍,答案可能不一样。
  2. 隐私风险。 客户名单、薪资、订单流水被直接粘进在线对话。AI 厂商的隐私条款再漂亮,数据也已经离开本地了。
  3. 不可复核。 AI 的结论没有中间过程。过两周想确认口径,只能重新问,而它可能换一套算法。
  4. 上下文有限。 超过一定行数 AI 就开始丢信息或瞎猜。十万行以上的表,纯对话基本没法处理。

dtool 的做法:数据留在本地,AI 负责写 SQL 和出图思路,dtool 负责执行和留痕。效率拿到了,数据没出去。


设计


安装

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"
install -m 0755 dtool ~/.local/bin/
dtool version

Windows 下载 dtool_<版本>_windows_amd64.zip,解压即用 dtool.exe。


快速上手

# 1. Excel → 数据集(自动生成 Schema:列类型/可空/唯一/基数/角色)
dtool convert --input sales.xlsx --name sales

# 2. SQL 查询,数据集名直接当表名
dtool query --sql 'SELECT region, SUM(amount) AS total FROM sales GROUP BY region ORDER BY total DESC'

# 3. 出图,直接引用上一次查询结果,不用重跑
dtool visualize --input latest:query --type bar --x region --y total --title "区域销量" --output out/sales.png

# 4. 导出 Excel / CSV / Markdown
dtool query --sql 'SELECT * FROM sales WHERE amount > 60' --format xlsx --output out/filtered.xlsx

# 5. 一条龙
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 (含 code/detail/hint ),退出码非 0 。


进阶示例

多表 JOIN

dtool convert --input sales.xlsx --sheet 订单 --name orders
dtool convert --input sales.xlsx --sheet 客户 --name customers
dtool query --sql 'SELECT c."客户名称", COUNT(*) AS 单数, SUM(o."金额") AS 总额
  FROM orders o JOIN customers c ON o."客户 ID" = c."客户 ID"
  GROUP BY 1 ORDER BY 总额 DESC LIMIT 5'

支持 INNER / LEFT / CROSS JOIN 、CTE ( WITH )、子查询、UNION ALL 、窗口函数( RANK / ROW_NUMBER / LAG )。

多系列图表

# 长表透视:region × quarter 拆多系列
dtool visualize --input latest:query --type bar --x region --y total --group-by quarter

# 宽表直取:多列 → 多折线
dtool visualize --input latest:query --type line --x month --y sales,profit

结果集管理

dtool actions results stat     # 统计查询/图表结果(数量/大小/缺失)
dtool actions results verify   # 校验结果文件存在并核对 SHA256
dtool actions results gc       # 清理过期结果(默认 dry-run ,--apply 才真删)

口径与血缘

dtool actions annotate <id> --text "口径:含税" --by ai-agent
dtool query --sql '...' --from action:<上次的 id>

资源与性能(实测)

1 核 2GB 受限环境:

输入 模式 峰值内存 结果
3.4GB / 1830 万行 JSON 自动降档(磁盘档) ~59MB 跑通
37.7MB / 105 万行 Excel (格式上限) convert 流式 ~55MB 跑通
100 万行 默认 ~2s 级 跑通
500 万行 默认 1:29 跑通

结论:


已知限制


适用场景


dtool v0.3.0 ,MIT ,单二进制零依赖。

650 次点击
所在节点    分享创造
1 条回复
sculpture
1 天前
码住

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1250037

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX