图表工具 D2 背后一直藏着一个没开源的组件——TALA。这周,Terrastruct 把这套自研的自动布局算法以 MPL-2.0 协议开源,和 D2 主项目用同一份许可证,随 D2 v0.9.0 一起发布,加一个 --layout=tala 参数就能用,也能在 play.d2lang.com 上直接在浏览器里试,不用装任何东西。
这不是一条例行的"工具开源"公告。TALA 解决的问题,恰好卡在一个正在成型的新场景中间:AI生成图表时,模型能把方块摆得像样,却几乎画不明白连线。
TALA开源:D2补上最后一块专有拼图
D2 语言本身早就开源,但排版最讲究的那块——TALA——一直是黑箱。用户能用,读不到源码,也没法给某个具体的布局bug提PR。这次开源,把这最后一块专有拼图补上了。
官方特别感谢了两位主要贡献者,Gavin Nishizawa 和 Júlio César Batista,前者负责TALA的大量通用改进,后者主攻层级算法。这也说明,过去几年TALA其实是靠一个很小的团队在维护——开源后能不能吸引更多人接盘,是第一个悬念。
正交布局解决了什么,又留下什么坑
D2 原本自带 Dagre 和 ELK 两种布局引擎,都是经典的DAG(有向无环图)算法,擅长把流程图往一个方向铺开,像瀑布一样往下走。TALA走的是另一条路——正交布局,更贴近工程师在白板上随手画架构图的习惯,框可以往四面八方展开,同时兼顾对称、间距、同类节点聚类等审美目标。
Terrastruct自己拿公开D2文件(Fulcro RAD架构、Jupyter on AWS EKS等)做的对比也证实了这一点:同一份图纸,三种引擎画出来是三种风格,没有绝对的"更好",只是审美取向不同。
代价原文写得很直白。TALA默认跑3个随机种子,每个种子生成一版布局,挑分数最高的那版。同一批种子、同一份输入,结果是确定的——但只要往图里加一个节点,布局就可能整个换了模样,Dagre和ELK通常只是在原有基础上局部补一块。它也不擅长把DAG拉得又长又直,大图渲染时间还会随规模非线性拉长,具体跑分放在d2-benchmarks仓库里。
同样的输入,多一个节点,画面可能面目全非。
坐标锁定,才是这次更新真正的看点
容易被漏掉的细节是:TALA支持给节点锁定坐标和尺寸(top/left),也支持一部分节点手动摆位、剩下交给引擎的混合模式。这听起来像编辑器的小彩蛋,实际对着的是一个正在成型的新需求——用大模型生成图表。
当下的大语言模型在二维空间里摆放方块的能力已经不差,真正卡壳的是连线:框和框之间怎么走线(routing),模型一复杂就打结。TALA的坐标锁定把分工挑明了:模型负责"摆哪儿",TALA负责"怎么连"。
- 结论.这等于给LLM生成图表提供了一份"渲染契约"——模型只保证坐标合理,走线交给算法。
不过这份契约目前还比较粗糙。D2的核心卖点原本是声明式布局——只写节点和关系,坐标全自动,不用管细节。允许手动锁定top/left,其实是往"手动精确控制"那头退了一步,和D2原本的设计哲学是拧着的。
对agentic场景而言,单靠锁坐标还不够用。真正好用的版本,至少需要节点有稳定的ID(不然图一变,坐标全乱);种子的确定性机制说清楚("3个种子选最优"和用户抱怨的"随机跳变"之间,官方文档没解释是种子真随机,还是平局判定不稳定造成的);还要支持局部重排——改一小块,不要把整张图推翻重画。这些D2目前都还没有,只能算开源之后留给社区的一张待办清单。
- 风险.坐标锁定越用越像手动出图,离"自动布局"的初心越远,能不能收成一份稳定契约,现在看不出来。
开源之后,谁接得住
直接受益的是用D2布局做架构图和技术文档的工程团队——以前只能"用"TALA,现在能改。给LLM接入图表生成的开发者是另一路受益者,TALA的坐标锁定加自动路由,让它有机会成为agent工作流里可插拔的一层渲染。Dagre、ELK这类老牌DAG布局引擎大概不会因为TALA开源就立刻掉队——它们解决的是不同类型的图,各有各的地盘。
接下来值得盯的,是社区提交的issue和PR会往哪个方向走:是修具体的排版bug,还是有人真去啃"布局稳定性"这道更硬的题。Terrastruct本身已经转成非营利模式,这次开源TALA,是延续那个方向,还是团队精力有限之后先把包袱交出去,现在说不清楚——但对一个刚从专有走向开源的核心组件来说,头几个月的PR质量,基本能说明社区是不是真接得住。
