Label Studio Collapse 标签完全指南:用可折叠面板组织高密度标注界面
2026/9/13 12:41:05 网站建设 项目流程

Label Studio Collapse 标签完全指南:用可折叠面板组织高密度标注界面

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

导读

Label Studio 的<Collapse>标签用于创建可折叠、可展开的内容区域,帮助标注员在复杂的标注界面中隐藏非关键信息、聚焦当前任务。本文基于 Collapse 标签官方文档 与 参数说明文档,结合编辑器前端源码,完整讲解<Collapse><Panel>的配置语法、三个核心参数(accordionborderedopen)的行为语义,以及手风琴模式、默认展开状态控制等实战技巧。读完本文,你将能够在 Label Studio 的标注配置(Labeling Config)中自由编排可折叠的内容布局。

Collapse 标签是什么

<Collapse>是 Label Studio 可视化标签体系中的布局(Visual)类标签,用于定义一块可以被折叠和展开的内容区域。在标注界面信息密度过高时(例如同时展示任务说明、参考文档、预标注结果和多个输入控件),使用 Collapse 可以把次要内容收纳起来,让标注员按需展开查看。

它在标签体系中的定位属于"容器"而非"控制"或"对象"标签——它本身不产生标注结果(Region),只负责组织页面结构。从源码看,它被注册在 web/libs/editor/src/tags/visual/index.js 的 Visual 类别中,与ViewHeaderStyleFilter等布局标签并列。

最小可用示例

原文档给出的基础示例展示了 Collapse 与 Panel 的组合用法:

<Collapse> <Panel value="Panel Header"> <View><Header value="Hello world" /></View> </Panel> </Collapse>

这个配置会渲染出一个带标题栏的折叠面板,标题为Panel Header,面板内显示Hello world标题文本,默认处于折叠状态,点击标题栏即可展开内容。

参数说明:三个核心属性

原文档在 参数说明 中给出了<Collapse>的完整参数表,如下:

ParamTypeDefaultDescription
[accordion]booleantrueWorks as an accordion(以手风琴模式工作)
[bordered]stringfalseShows border(显示边框)
[open]booleanfalseSets default collapsed state(设置默认折叠状态)

accordion:手风琴模式

accordion默认值为true。手风琴模式的含义是:同一时刻只允许展开一个面板,展开新的面板会自动收起之前的面板,从而在多个 Panel 并存时保持界面紧凑。设置为false后,多个面板可以同时展开、互不影响。

从 源码实现 可以印证这一行为:accordion: types.optional(types.boolean, true)(默认 true),且渲染时会先计算所有应展开的面板,再在手风琴模式下只保留第一个展开项:

// For accordion mode, only the first active key should be used const finalActiveKeys = item.accordion ? defaultActiveKeys.length > 0 ? [defaultActiveKeys[0]] : [] : defaultActiveKeys;

也就是说,手风琴模式下即使你给多个面板配置了默认展开,界面也只会展开第一个。

bordered:边框显示

bordered的默认值为false,即默认不显示外边框,面板之间仅通过标题栏分隔。设置为true(或任意非空值,源码中类型为boolean)后,Collapse 容器会绘制整体边框,使折叠区域与页面的其他部分在视觉上区分开来。该值直接透传给底层渲染组件:

<Collapse bordered={item.bordered} accordion={item.accordion} defaultActiveKey={finalActiveKeys}>

open:默认展开状态

open的默认值为false,即所有面板默认折叠。设置为true后,面板在标注界面首次加载时即为展开状态。值得说明的是,open是一个"默认态"属性——它只决定初始渲染状态,标注员随后仍可自由折叠或展开。

在源码中open: types.maybeNull(types.boolean),并且Collapse 级与 Panel 级都存在 open 属性,二者存在优先级关系:

// Global open sets the base state for all panels // Local open can override the global state for individual panels const defaultActiveKeys = visibleChildren.filter((panel) => panel.open ?? item.open).map((c) => `panel-${c.value}`);

即:Panel 自身的open优先于 Collapse 级open;当某个 Panel 未声明open时,才回退使用 Collapse 的全局open值。

深入源码:Collapse 的实现原理

基于 Ant Design Collapse 的封装

web/libs/editor/src/tags/visual/Collapse.jsx 是 Collapse 标签的完整实现。它直接复用了antdCollapseCollapse.Panel组件,通过 Label Studio 的标签注册机制(Registry.addTag)接入标签系统:

import { Collapse } from "antd"; const { Panel } = Collapse; // ... Registry.addTag("panel", types.compose("PanelModel", PanelModel, ProcessAttrsMixin), () => {}); Registry.addTag("collapse", CollapseModel, HtxCollapse);

其中CollapseModel = types.compose("CollapseModel", AnnotationMixin, Model, ProcessAttrsMixin),意味着 Collapse 通过AnnotationMixin与标注上下文(annotation)打通,内部子标签可以正常访问当前任务的标注数据。

Panel 支持的内容类型

PanelModelchildren定义在源码中以白名单形式列出,从中可以直观看到 Panel 内可以放置的标签类型非常广泛,包括:

  • 布局与文本viewheaderstylelistfilter
  • 对象数据textimageaudioaudioplushypertextpdfvideotimeseriesparagraphsdialogtabletaxonomy
  • 标注控制labelslabelchoiceschoicedatetimenumberratingrankertextarearelationspairwise,以及各类几何标签(rectangleellipsepolygonkeypointbrushbitmaskvectorvideorectangletimelinelabels等)
  • 自定义扩展custominterface以及通过Registry.customTags注册的自定义标签

因此 Panel 既可以收纳说明性文本,也可以承载完整的标注控件组,这是用它构建"折叠式标注工作台"的基础。

Panel 标题的取值逻辑

Panel 的标题取自value属性,源码中的回退逻辑为:

<Panel key={`panel-${c.value}`} header={c._value || c.value || `Panel ${index + 1}`} forceRender>

即:优先使用处理后的_value,其次使用原始value,两者都为空时自动生成Panel 1Panel 2这样的占位标题。value也可以使用$task_field形式绑定任务数据字段,用于动态标题。另外 Panel 渲染时带有forceRender,保证折叠状态下内部内容也会被渲染(对统计 DOM 或需要预加载的组件有意义)。

isIndependent:面板能否脱离数据独立存在

源码中 Collapse 和 Panel 都实现了isIndependent视图:

get isIndependent() { return !!self.children?.some((c) => { return c.isIndependent === true; }); }

它表示"该面板在没有任何任务对象、任务数据或 Region 的情况下也能渲染"。在批量标注模式annotation:bulk)下,Collapse 会据此过滤子面板,只展示可独立存在的面板,避免批量操作界面出现依赖单条任务数据的区域:

const visibleChildren = item.children.filter((i) => i.type === "panel" && (!isBulkMode || i.isIndependent));

这意味着:如果你希望在批量标注时仍显示某个面板,应确保其内部子标签是可独立渲染的(如纯文本、说明性控件)。

实战配置示例

1. 多面板 + 非手风琴模式

需要同时展开多个区域时,将accordion设为false

<Collapse accordion="false"> <Panel value="Task Instructions"> <View><Header value="Annotation Guidelines" /></View> <View><Text name="instructions" value="$instructions" /></View> </Panel> <Panel value="Reference Material"> <View><Text name="reference" value="$reference" /></View> </Panel> </Collapse>

2. 默认展开第一个面板

通过 Collapse 级open="true"让所有面板默认展开,或通过 Panel 级open精准控制单个面板:

<Collapse bordered="true" open="true"> <Panel value="Primary Task"> <View> <Text name="content" value="$content" /> <Choices name="sentiment" toName="content"> <Choice value="Positive" /> <Choice value="Negative" /> </Choices> </View> </Panel> <!-- 此面板显式覆盖全局 open,保持折叠 --> <Panel value="Advanced Options" open="false"> <View><Text name="notes" value="$notes" /></View> </Panel> </Collapse>

根据前文所述的优先级逻辑,open="false"的 Panel 会覆盖 Collapse 级open="true",最终只有第一个面板默认展开。

3. 嵌套 Collapse

PanelModel的子标签白名单中包含collapse,因此 Collapse 可以嵌套使用,适合对多层级说明内容进行分组收纳:

<Collapse> <Panel value="Section A"> <Collapse> <Panel value="Sub-section A-1"> <View><Header value="Nested content" /></View> </Panel> </Collapse> </Panel> </Collapse>

4. 在批量标注场景中固定展示说明

结合源码中isIndependent与批量模式的过滤逻辑,若希望面板在批量标注界面始终可见,应保证面板内容不依赖具体任务对象:

<Collapse accordion="true" open="true"> <Panel value="General Guidelines"> <View> <Header value="Labeling Rules" /> <Style>p { font-size: 12px; }</Style> <Text value="Always label entities precisely." /> </View> </Panel> </Collapse>

相关模板与文档线索

仓库文档中多处模板与指南实际使用了 Collapse 类折叠交互:

  • react_claims.md:基于ReactCode的自定义界面中,将 Agent 执行轨迹渲染为可折叠的树状结构,并内置"可折叠的用户提问与追问会话区",是 Collapse 交互模式在可编程界面(Programmable UI)中的典型延伸。
  • 其余模板 video_object_detector.md、react_spreadsheet.md、generative-llm-ranker.md、multi_turn_chat.md、llm_rag_human_feedback.md 中也出现了 Collapse/collapse 字样,说明折叠式布局被广泛用于对话、生成式标注等复杂界面。
  • 批量标注指南 中,批量标注界面同样借助折叠式布局组织设置项,与本标签的设计目标一致。

使用建议与注意事项

  1. 默认手风琴accordion默认开启,若多个面板需要同时展开,务必显式设置accordion="false",否则会出现"展开 A 后 B 自动收起"的现象。
  2. open 是初始态open只决定首屏渲染状态,无法锁定面板,标注员仍可手动切换。
  3. 优先级规则:Panel 级open覆盖 Collapse 级open;手风琴模式下即使多个面板声明默认展开,也只保留第一个。
  4. 标题必填建议:虽然未设置value时会自动生成占位标题(Panel 1等),但建议始终显式提供语义化标题,提升标注员的使用效率。
  5. 批量模式过滤:在启用了annotation:bulk的批量标注流程中,依赖任务数据的面板可能被过滤隐藏;如需固定展示,请使用可独立渲染的内容。
  6. 嵌套有度:Collapse 支持嵌套,但层级过深会降低标注界面的可读性,建议控制在两层以内。

总结

<Collapse>是 Label Studio 标签体系中组织高密度标注界面的核心布局标签:通过accordion控制手风琴行为、bordered控制视觉边界、open控制默认展开状态,配合支持大量子标签的<Panel>,即可将说明文本、参考数据和标注控件分层收纳。结合 源码实现 中基于 Ant Design 的封装、Panel 级 open 优先的展开逻辑与批量标注模式过滤机制,你可以精准设计出既紧凑又高效的标注工作台。

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询