dbt Charts 开源:为 Chat 而生的声明式图表语言
事件概述
dbt 团队(原文作者为 Dave Fowler,发布于 2026 年 9 月 14 日)宣布开源 dbt Charts,将其定位为一种用于仪表盘的声明式语言。核心理念是:既然越来越多前端与用户正在变成聊天式 Agent,那么图表就应该从 BI 工具的 UI 里搬出来,放到代码里去。
同时,团队还上线了托管平台 dbtCharts.com 的公测版本,承接图表语言之外剩下的那部分 BI 能力。
原文的论证起点是一个很现实的痛点:用 Agent 做分析报告确实快,一个下午就能”聊”出一份报表,但默认产物是一堆 HTML、CSS、JavaScript、若干图表库,再加上一个 React 或 Streamlit 应用。要把一个结果回溯到数据源,得跨好几种语言和文件去追,人工审计慢,而且 Agent 每次改动都要为此付出时间和 token 成本。
另一条路线——在 UI 优先的 BI 工具上外挂 Copilot——虽然把 AI 约束在受治理的轨道上,但轨道很窄:Agent 只能做 UI 暴露出来的那些事。dbt Charts 想提供的是第三种选择。
关键技术点
SQL 管”看什么”,YAML 管”怎么看”。 这是该语言最核心的分工。原文明确写道:SQL 仍然是声明”想要看到什么数据”的语言,而 YAML 包在它外面,声明”想怎么看到它”。除了 SQL,Markdown 承载文字叙述,Jinja(与 dbt 一致)承载变量和宏。
结构极简但表达很深。 原文给出的最小示例包含三类元素:variables(一个 UI 过滤器)、queries(一段 SQL 查询)、charts(图表定义),最后用 rows 组成版面。原文称这几个核心元素是”可扩展的”,目前共有 1100 多个配置项、16 种图表类型,以及由它们组合出的 composed charts。
渲染与发布走 CLI。 dct render charts/documents.yml --format svg 可以把任意 board 文件渲染为静态 SVG,也支持 HTML、PNG、PDF 甚至终端输出;dct serve 则把一整个目录作为站点提供服务。渲染既可以在本地跑,也可以在 CI 里跑。
样式级联与继承。 图表从 board 继承样式,board 从 theme 继承,切换主题只需一行;board 还可以通过 extends: 继承另一个 board,从而把企业样式或标准报表写一次、到处复用。
与 dbt 深度集成(可选)。 不强依赖 dbt 项目,但在 dbt 项目中使用会解锁更多能力:charts/ 目录与 models/ 并排放在同一个 Git 仓库里,模型与其图表的改动走同一个分支、同一次 CI;查询通过 ref() 从 manifest 解析,因此模型重命名或列缺失会在 PR 阶段就失败,早于 dbt run 重建仓库。原文示例命令为 dbt parse && dct validate charts/。对 dbt Semantic Layer 的支持尚在计划中(原文引用了 dbt-labs/dbt-charts#1),届时 board 可以直接使用项目定义的指标,而不必重写一遍 SQL。
面向 Chat 的反馈闭环。 原文强调 Agent 是”相当盲的”,需要紧凑的反馈回路。dbt Charts 提供 YAML 与 SQL 的严格校验,以及一整套可视化检查,能在任何人看到 board 之前就报出问题,例如:
WARN-BAR-BAND-WIDTH-TOO-NARROW:640px 宽度下放 182 个 band × 2 个 series,建议改为更粗的粒度WARN-TABLE-COLUMNS-OVERFLOW:表格需要 980px 但只有 640px,建议减少列或加宽槽位
视觉设计。 团队请来数据图形设计师、作者与历史研究者 RJ Andrews 设计图表,原文称其结果是”超越仪表盘时代”的、有凝聚力的图表系统。
托管平台。 dbtCharts.com 承接图表被抽走之后剩下的部分:托管、访问控制和一个 UI。平台连接数据仓库,提供会话式分析、用于收尾微调的可视化编辑器、版本历史,以及面向用户和组的带权限分享,使看板读者不需要仓库登录凭据。原文此段在”first-class conversational analytics: like Claude or”处截断,后续内容原文未说明。
对数据科学或 AI Agent 落地的意义
这篇文章的价值不在”又一个图表库”,而在于它给出的一个结构性判断:当 Agent 成为前端和用户时,交互形态的偏好会发生反转。
过去图表留在 UI 里是合理的,因为对大多数人来说点击比写 YAML 快。但当生成者从人变成 Agent,这个前提就失效了——Agent 精通代码、SQL 和 Git,却在别人的 UI 里笨拙。
对 AI Agent 落地而言,这里有三点可迁移的经验:
- 产出物要可审计、可追溯到源头。 一个 HTML+CSS+JS+React 的”报表应用”在治理上是黑盒;一份 YAML + SQL 是能被评审的。
- 把校验做成 Agent 的反馈信号。 严格校验 YAML 与 SQL、再加上可视化层面的告警,本质上是在给 Agent 构造一个可自动判断对错的奖励信号,而不是让它盲改。
- 把治理下沉到语言层。 与其把 Agent 关进 UI 的窄轨道,不如给它一门表达力足够但边界清晰的语言。
对数据科学工作流来说,charts/ 与 models/ 同仓、同分支、同 CI 的做法,把”分析结果”重新纳入了软件工程意义上的变更管理。模型重命名会连带打断对应的图表定义,这种”在 PR 阶段就失败”的设计,正是很多 BI 层长期缺失的一环。
我的技术点评
方向判断是对的,但胜负手在生态。 “SQL 管 what、YAML 管 how”这个分层并不新鲜——Vega-Lite、Observable、Evidence.dev、Streamlit 的声明式写法,乃至各类 metrics-as-code 方案都在这个谱系上。dbt Charts 真正的差异化在于:它把自己绑在 dbt 的 ref() 和 manifest 上,等于直接继承了 dbt 已有的项目结构与语义层入口。这是聪明的杠杆,但也意味着它最强的形态是”dbt 用户的图表层”,而非通用图表语言。原文说”希望像 dbt 一样成为该层的开放标准”——这话说得很有野心,但标准从来不是靠设计优雅赢的,而是靠安装量。
1100 多个配置项是个双刃剑。 原文把它当作语言深度的证据,我部分同意:表达力深才能避免”稍微复杂一点就要跳出框架”。但反过来说,这么宽的配置面,谁来保证 Agent 生成的结果一致?原文的答案显然是”样式级联 + 严格校验”——用少量核心元素加继承来压缩实际需要写的配置,用 validator 兜住越界。这个组合逻辑是自洽的,效果取决于 validator 覆盖率。而 validator 本身的覆盖率,原文只给了两个示例告警,未说明完整检查项清单。
“为 Chat 而生”目前更多是设计意图而非已验证事实。 会话语义分析、可视化编辑器这些能力都挂在闭源的 dbtCharts.com 上,而开源部分只覆盖”语言 + 渲染 + 校验”。这是一个典型的 open-core 结构,本身无可厚非,但需要提醒的是:如果 Agent 的最佳体验依赖托管平台,那”开放标准”的成色就要打折扣。另外,开源许可证类型、支持的数据仓库清单、性能与规模上限,原文均未说明。
一个容易忽略的亮点是设计。 请 RJ Andrews 来做视觉系统,说明团队意识到”治理好的图表”和”看得下去的图表”是两件事。原文批评很多工具用卡片和框线制造虚假对齐,以视觉噪声和空间浪费为代价——这个批评相当准确,也是当前大量 AI 生成报表的通病。如果 dbt Charts 真能把这套间距与版式规则固化进语言,那它对 Agent 的价值可能比 YAML 本身更大:Agent 生成的图表默认就是体面的,这省掉了大量事后调格式的往返。
总体判断: 这是一个定位清晰、问题意识准确的产品。它没有去卷”更炫的可视化”,而是去卷 Agent 时代的分析与治理边界。值得数据团队关注,尤其已经在用 dbt 的团队。但它的天花板取决于两件事——Semantic Layer 集成的落地时间(原文只说”计划中”),以及托管平台与开源语言之间的能力落差能压到多小。
原文链接
- 文章:Charts built for Chat · dbt Charts — https://dbtcharts.com/blog/charts-built-for-chat/
- 讨论:Hacker News(79 points,25 comments)— https://news.ycombinator.com/item?id=49704246
