关于 create-interface-skill
create-interface-skill 指导为 Label Studio 编写 HumanSignal 标注界面,采用 JSX 模块形式。它面向界面作者,强调模式定义、领域参考规范,以及与标注外壳的配合。
主要功能
- 01创建单文件 JSX 界面模块
- 02定义输入与输出模式
- 03使用领域专用界面参考资料
- 04遵循主题与无障碍要求
- 05通过 label-studio-sdk 同步界面
适用场景
- 01构建文本分类界面
- 02创建命名实体或空间标注屏幕
- 03实现音频或视频时间轴标注
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ humansignal/ create-interface-skill --skill create-interface-skill安装后在 Claude Code 中输入/create-interface-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdagents/openai.yamlreferences/example-audio.mdexamples.mdexample-classification.mdexample-spatial.mdexample-ner.mdcore-contract.mdschemas-spatial.mdreference.mdschemas.mdvideo-timeline.mdtext-spans.mdstyling-a11y.mdvideo-frames.mdspatial-bounding.md详细介绍
创建标注界面
创建 HumanSignal 界面:一个 JSX 源文件(Screen.jsx),其最后一个表达式是带括号的对象字面量,其中包含一个 default React 组件,以及 getResults、parseResults、paramsSchema、outputSchema 和 hotkeys 等可选导出。
这是基于 JSX 的 Interfaces 运行时。除非用户明确要求使用 ReactCode,否则不要使用旧版 <ReactCode> XML 标签格式。
真相来源
references/ 下的文件由应用内「Create with Agent」助手发送给模型的同一组模块渲染而成。这些文件具有权威性。请严格遵循其中的模块约定、Schema 规则、提交前检查清单、区域约定,以及样式与无障碍要求。
必须遵循的阅读顺序
- 从头到尾阅读
references/core-contract.md。这是所有界面的基础约定,其中包含提交前检查清单。 - 阅读
references/schemas.md和references/styling-a11y.md。每个界面都必须包含 Schema,并通过设计系统令牌支持浅色和深色模式。 - 阅读与请求匹配的领域模块,以及对应的完整示例并据此调整:
| 参考资料 | 涵盖内容 |
|---|---|
references/core-contract.md | 响应/输出格式、防御式编码、提交前检查清单、编辑工具、动态屏幕模块、参数、无障碍基础知识和任务数据访问。 |
references/text-spans.md | 基于绝对偏移量的文本高亮、NER/实体片段和选择偏移量辅助工具。 |
references/spatial-bounding.md | 空间区域持久化、ShellRegion 结构、可见性/锁定状态、AnnotationResult 结构、图像导航与选择工具(选择、平移、缩放、适应窗口/100%),以及排序/排序方式(仅在 Interface Components 关闭时使用旧版 DIY)。 |
references/video-frames.md | 用于时间轴导航的安全定位 HTML5 视频 FPS 探测和稳定帧计数器(FIT-2803)。 |
references/schemas.md | inputSchema、outputSchema 语法、必需输出字段、dependsOn 和 parseResults。 |
references/schemas-spatial.md | 多选图像 URL、空间关键点 Schema,以及 PDF OCR/边界框 Schema。 |
references/example-classification.md | 一份完整的情感分析/文本分类屏幕模块示例。 |
references/example-ner.md | 一份完整的命名实体识别(NER)屏幕模块示例。 |
references/example-audio.md | 带 Shell 关系锚点和正确序列化的音频/波形时间跨度区域(FIT-2247)。 |
references/example-spatial.md | 一份完整的图像边界框/空间屏幕模块示例。 |
references/video-timeline.md | 加载时通过 EditorDeps.video 探测实际 FPS,保持帧计数单调递增,且绝不将标注帧裁剪到 24fps 备用值(FIT-2804)。 |
references/styling-a11y.md | 主题适配令牌、字体排印、间距、组件、布局及交互/无障碍规则。 |
- 只阅读
references/reference.md中所需的部分(当 UI 读取task.data时,先阅读 Schemas & sample data)。只有在reference.md指引时才打开references/examples.md。
本地创作的运行时注意事项
- 注入的全局对象。 除了
core-contract中列出的React/ hooks /getField全局对象外,沙箱还会注入EditorUI(@humansignal/ui命名空间)和EditorDeps(例如EditorDeps.audioDecoder.WasmStreamingDecoder、EditorDeps.video.probeFrameRate)。 - 不要引用
window.InterfaceComponents(AudioCanvas、useComponentHotkeys)——它们受fflag_interfaces_components控制,而该标志处于关闭状态。请按照core-contract和example-audio中的示例,使用EditorDeps.audioDecoder.WasmStreamingDecoder构建音频界面,并忽略reference.md中任何关于InterfaceComponents的做法。 EditorUI的双路径陷阱。EditorUI仅在运行时 iframe 内注入,不会在提取paramsSchema的管理端求值过程中注入。顶层引用EditorUI会触发EditorUI is not defined,并导致标注设置中的paramsSchema静默失效。仅在渲染时引用它,或者省略它并使用带设计令牌的内联样式。- 由外壳负责的行为。 标注外壳负责提交/更新、撤销/重做/重置、Regions/Info/Relations 面板、区域可见性和评论。通过
core-contract和spatial-bounding中的属性和回调驱动这些功能(addRegion、updateRegion、deleteRegion、selectRegion、selectedRegionIds、隐藏/锁定状态)。不要在屏幕中重新实现这些功能:自定义删除按钮、仅保存在本地的区域状态,或忽略隐藏状态,都会导致外壳的面板和历史记录失效。 - 编译器提取。 编译器会将最后一个带括号的对象字面量转换为模块导出。如果文件末尾不是裸露的
({ default: ... }),编辑器会报错:"Module missing 'default' function export." - 不支持持久化存储。
localStorage/sessionStorage是内存模拟对象,每次 iframe 重新挂载都会重置;只能通过变更回调和标注结果持久化。 - 示例数据。 保持
task.json简洁,并对paramsSchema/inputSchema中的每个dataField使用完全一致的default任务数据路径。 - 保存到 Label Studio。 只能使用
label-studio-sdk interface sync <dir> --title "<Title>" --publish(新建界面;需要时添加--workspace <id>),或label-studio-sdk interface sync <dir> --message "<change>"(已有界面,由旁车文件跟踪)创建或更新界面。后一种方式会创建未发布的草稿;如果新项目需要使用该界面,请添加--publish。sync会从模块中提取inputSchema/outputSchema/paramsSchema,并将其与代码一并存储。切勿自行向/api/interfaces/发送POST/PATCH请求:服务器无法从代码中读取架构,因此手动构造的请求会在不报错的情况下保存空的output_schema/input_schema,并导致从该界面创建的项目丢失 Data Manager 标注筛选器。同步后,请确认GET /api/interfaces/<id>/返回非空的output_schema。
评论
支持 Markdown