SuperAPI AI 工具集

fiftyone-develop-plugin

编程与开发

查看项目

更新于 10-16 04:20

技能介绍

用途

该技能用于从零开发自定义 FiftyOne 插件,包括算子(operators)和面板(panels)。当需要创建插件、用自定义算子扩展 FiftyOne,或构建交互式面板时使用。

主要能力

  • 根据目标选择插件类型:运行计算、处理样本、触发动作使用算子(Operator);网格中的持久面板、简单/表单 UI 使用 Python 面板;网格中的持久面板、丰富/交互 UI 使用混合面板;在样本模态框内打开的面板使用 JS 模态面板。
  • 提供插件结构、算子、面板、混合插件、执行存储、故障排查、快速参考等参考文件,要求在生成代码前先阅读对应文件。
  • 支持克隆官方插件仓库作为参考模式,并搜索相似模式。
  • 支持本地测试:Python 使用 pytest 测试算子/面板,JavaScript 使用 vitest 测试 React 组件,并在 FiftyOne App 中验证。
  • 支持调试模式启动以查看服务端日志,以及使用 Playwright 端到端测试进行自动化迭代。

使用方式

  1. 确定构建目标并阅读对应参考文件(PYTHON-OPERATOR.md、PYTHON-PANEL.md、HYBRID-PLUGINS.md、JAVASCRIPT-PANEL.md)。
  2. 克隆官方插件仓库: git clone https://github.com/voxel51/fiftyone-plugins.git /tmp/fiftyone-plugins 2>/dev/null || true
  3. 安装插件,将其放置或软链接到插件目录: PLUGINS_DIR=$(python -c "import fiftyone as fo; print(fo.config.plugins_dir)") ln -s /path/to/my_plugin "$PLUGINS_DIR/my_plugin"
  4. 以调试模式启动: fiftyone app debug <dataset-name>
  5. 按工作流分阶段进行:需求理解、设计(选择面板架构、创建计划并获用户批准)、生成代码、验证与测试、迭代。

关键规范

  • 编码前先理解需求,提出澄清问题,不假设插件功能。
  • 实现前先规划,展示文件结构与设计,获得用户批准后再生成代码。
  • 搜索现有插件模式,使用 list_plugins、list_operators、get_operator_schema 等。
  • 完成前本地测试,并在 FiftyOne App 中验证。
  • 复杂逻辑先在插件外独立测试,再包装进 execute()。
  • 迭代反馈,可分别运行服务端查看日志,或使用 Playwright 端到端测试。

关键陷阱

  • default= 绝不能引用状态,否则导致无限渲染循环;应使用字面量,单独读取状态。
  • 事件处理器必须是绑定的实例方法,不能是静态方法,否则处理器 URI 静默失效。
  • 缺少 register(p) 是静默失败,插件加载但算子/面板不可见;必须为每个类显式调用 p.register()。
  • 目录命名约定使用下划线(如 myorg_my_plugin),@org/name URI 仅存在于 fiftyone.yml 中。

算子执行与状态

  • 链式触发算子:ctx.trigger("@plugin/other_operator", params={...}),仅限非委托算子在 execute() 中触发。
  • UI 操作:ctx.ops.notify("Done!")、ctx.ops.set_progress(progress=0.5)(progress 必须为关键字参数)。
  • 视图选择:ctx.target_view() 尊重用户当前选择与过滤;ctx.dataset 为完整数据集;ctx.view 为过滤视图。
  • 存储键:ctx.store() 已按 dataset_id 作用域,使用插件唯一名称避免冲突。
  • 面板状态与执行存储:ctx.panel.state 为瞬态(面板重载时重置),ctx.store() 为持久(跨会话保留)。
  • 委托执行:适用于处理超过 100 个样本或耗时超过 1 秒的操作,通过 allow_delegated_execution 和 default_choice_to_delegated 配置。
  • 进度上报:使用 execute_as_generator=True 并通过 yield ctx.trigger("set_progress", {"progress": ...}) 上报。
  • Custom Runs:用于需要可复现性和历史追踪的操作,使用 init_run 和 register_run。

适用场景

  • 为 FiftyOne 数据集应用扩展自定义计算、样本处理或动作触发。
  • 构建网格中的持久面板或样本模态框内的交互面板。
  • 需要跨会话持久化状态、进度上报或可审计运行记录的操作。

限制

  • 资料未提供具体的收费、价格、平台支持范围或效果保证信息。
  • 部分高级模式(如 Custom Runs 完整模式、执行存储高级缓存、混合插件通信)需参考对应文件,资料中仅给出指引。
  • 资料未提供完整的输入类型表、面板 UI 组件表、配置选项表,需阅读 QUICK-REFERENCE.md。