Annotation for complex ML pipelines复杂 ML Pipeline 的 Annotation
I designed a lightweight annotation system that helps data scientists explain, revisit, and share complex pipeline graphs—without letting notes take over the canvas. 我为数据科学家设计了一套轻量 Annotation 系统,让复杂 pipeline graph 更容易被解释、回看与协作,同时不让辅助信息干扰主画布。

AzureML users could build and inspect large pipeline graphs, but the graph alone could not explain why a branch existed, what had failed, or what someone should remember before reusing it. People worked around this by adding ordinary nodes as notes. AzureML 用户可以搭建和查看大型 pipeline graph,但 graph 本身无法说明某个分支为何存在、哪里失败过、复用前该注意什么。用户只能把普通 node 当作便签来绕过这个问题。

Because AzureML had no annotation data yet, I studied real Aether usage and mapped it onto AzureML workflows. Three patterns stood out: AzureML 当时没有 annotation 使用数据,所以我先研究 Aether 的真实用法,再映射到 AzureML workflow。三个模式最明显:
- Creation is infrequent. It should not compete with core build and debug actions.创建频率低。入口不应与 build / debug 主任务争夺注意力。
- Single-node and pipeline-level notes dominate. Multi-node annotation is useful, but secondary.单节点与整条 pipeline 最常用。多节点 annotation 有价值,但不是主流。
- Content needs hierarchy. Users needed links, emphasis, and references—not only plain text.内容需要层级。用户需要链接、强调和引用,而不只是纯文本。

I mapped when annotations appear across authoring, retraining, and run-detail workflows. That exposed three decisions that mattered more than visual polish. 我先梳理 annotation 在 authoring、retraining 与 run detail 中何时出现。由此明确了三个比视觉样式更关键的决策。


The final system treated annotations as independent, flexible canvas objects. Users could attach them to a node, several nodes, or the whole pipeline; quote targets with #; emphasize key text; resize or minimize a note; and hide all annotations when they needed to read topology. 最终系统把 annotation 定义为独立、灵活的 canvas object。用户可以关联单节点、多节点或整条 pipeline;用 # 引用对象;强调关键信息;调整或最小化便签;需要专注 topology 时也可一键隐藏全部 annotation。

Users valued the visibility of annotations for lineage, cross-platform links, and failed runs. The same feedback also exposed limits in the first version: links needed to render as links, and run-specific annotation deserved first-class support. 用户认可 annotation 在 lineage、跨平台链接和失败任务记录上的可见性。同时,反馈也暴露了首版边界:链接应被真正渲染,特定 run 的 annotation 也值得成为一等能力。
