вариант

tao-mine-aoi-images

NVIDIA/skills NVIDIA/skills

Встраивает паркеты целевых и исходных изображений, а затем извлекает изображения-источники ближайших соседей для дополнения в рабочих процессах VCN AOI.

...Расширить все
26
Обновлено время 24 сентября 2026 г.

Навык «DEFT: добыча и встраивание»

Вы являетесь оператором рабочего процесса DEFT «встраивание, а затем добыча» для зоны интереса (AOI) VCN. Ваша задача — взять набор изображений слабых целей (результат анализа пробелов или трассировки) и пул исходных изображений, а затем сгенерировать очищенный от дубликатов набор добытых исходных изображений, похожих на цели, — готовых для подачи в следующий раунд обучения.

Рабочий процесс фиксирован и детерминирован: встраивание целей, встраивание пула источников, затем добыча ближайших соседей. Паркет, полученный на выходе каждого шага, служит входными данными для следующего шага. Здесь нет итеративного поиска, нет этапа кластеризации, нет выбора с участием человека — глубина достигается за счет выбора правильного кодера и правильного topn, а не за счет многоэтапного исследования.

Весь скин представляет собой тонкий обёртку вокруг трёх прямых вызовов docker run с обращением к образу tao_toolkit.data_services, объявленному в файле versions.yaml (определяется во время выполнения — см. раздел «Настройка»). Точка входа контейнера принимает -e [переопределения Hydra...] — передаёт embedding image_embeddings -e … для встраивания и tmm nearest_neighbors -e … для добычи данных. Флаг -e указывает на файл YAML, который предоставляет значения по умолчанию для схемы подзадачи; всё, что следует за ним, представляет собой простое переопределение Hydra (ключ=значение), которое выборочно переопределяет поля спецификации при каждом запуске. (Внутри контейнера нет ключевого слова «dataset» — это префикс «pillar» запускающего модуля TAO, который здесь опускается.) Загрузите образ один раз, если он не находится в кэше: docker pull "$DS_IMAGE" (после определения значения $DS_IMAGE в соответствии с настройками).

Ключи схемы могут переименовываться между выпусками data-services (в навыке RCA, например, inference_csv → inference_results_dir, output_dir → results_dir). В случае сомнений проверьте фактическую схему один раз для каждого образа: docker run --rm "$DS_IMAGE" embedding image_embeddings --cfg=job и ... tmm nearest_neighbors --cfg=job.

Входные данные

  1. Целевой файл Parquet — результат анализа пробелов, обычно mining_gaps.parquet из репозитория tao-route-visual-changenet-samples (или gaps.parquet из tao-analyze-gaps-visual-changenet, если маршрутизация была пропущена). Обязательный столбец: filepath. Если также присутствует столбец label, во время анализа доступна фильтрация с учетом меток; в противном случае задача анализа без предупреждения игнорирует фильтр.
  2. Исходный пул — файл Parquet с изображениями-кандидатами для анализа, содержащий столбец filepath. Если у пользователя есть только файл CSV, преобразуйте его в файл Parquet с теми же столбцами перед шагом 2. Для фильтрации с учетом меток пул также должен содержать столбец label.
  3. Файл спецификации вложения — файл YAML, содержащий model, model_path, batch_size и (только если model_path является файлом TAO .pth/.ckpt) model_config_path. Используется повторно на этапах 1 и 2;input_parquet/output_parquet задаются при каждом запуске в качестве переопределений Hydra. Один и тот же файл спецификации ДОЛЖЕН управляться обоими этапами встраивания — встраивания из разных кодировщиков несопоставимы, а несоответствие кодировщиков является наиболее распространённой причиной сообщений о том, что «извлечённые изображения выглядят несвязанными».
  4. Файл спецификации добычи — файл YAML, содержащий topn, knn_metric, filter_by_label и (редко изменяемые)source_embed_column_name/target_embed_column_name.source_parquet/target_parquet/output_parquet являются переопределениями Hydra во время выполнения. Для вложений SigLIP и CLIP следует использовать knn_metric: cosine. Если filter_by_label: true, но в одном из паркет-файлов с вложениями отсутствует столбец с метками, контейнер записывает предупреждение в журнал и продолжает работу без фильтрации.

Настройка

Определите конкретный URI tao_toolkit.data_services из файла versions.yaml один раз в самом начале выполнения, затем убедитесь в наличии Docker, набора инструментов контейнеров NVIDIA и графического процессора (GPU), прежде чем приступать к каким-либо другим действиям. GPU требуется как для прямого прохода кодера, так и для k-NN-поиска cuML/cuDF; без CUDA оба этапа завершаются с ошибкой.

# Определить конкретный URI tao_toolkit.data_services → nvcr.io/... из файла versions.yaml
DS_IMAGE=$(python3 -c "import yaml,os; print(yaml.safe_load(open(os.environ['TAO_SKILL_BANK_PATH']+'/versions.yaml'))['images']['tao_toolkit']['data_services'])")
echo "DS_IMAGE=$DS_IMAGE"

docker info > /dev/null && echo "OK: docker"
nvidia-smi > /dev/null && echo "OK: GPU"
docker image inspect "$DS_IMAGE" > /dev/null \
  || docker pull "$DS_IMAGE"

Каждый путь на хосте, который контейнер считывает или в который записывает, должен быть смонтирован с помощью bind-mount. Наиболее предсказуемый подход заключается в монтировании корневой директории рабочего пространства с идентичными путями внутри и снаружи контейнера, а затем в повторном использовании одного псевдонима $DOCKER для всех трёх вызовов:

WORKSPACE=
DOCKER="docker run --gpus all --rm --ipc=host -v $WORKSPACE:$WORKSPACE -w $WORKSPACE $DS_IMAGE"

Не передавайте аргумент `--user $(id -u):$(id -g) ` — это вызывает ошибку KeyError в функции `getpwuid()` во время импорта трансформеров ещё до начала любой работы. Контейнер запускается с правами root; после этого команда `chown` возвращает UID хоста.

Создавайте два файла спецификации один раз за итерацию, размещая их в каталоге $WORKSPACE, чтобы аргумент -e разрешался по обе стороны монтирования; значения для отдельного запуска не включаются в спецификацию и передаются в качестве переопределений Hydra. Если исходный пул представляет собой файл CSV, сначала преобразуйте его в формат Parquet (сохранив путь к файлу и метку, если она есть). В файле embedding_spec.yaml по умолчанию используется model: SigLIP, model_path: google/siglip-base-patch16-224, batch_size: 64; в файле mining_spec.yaml по умолчанию используются значения topn: 5, knn_metric: cosine, filter_by_label: "false" (в кавычках — схема интерпретирует это как строку).

См. файл references/setup.md для получения полной информации о среде, обработке переменной TAO_SKILL_BANK_PATH, обосновании монтирования путей, обходном решении для команды chown при использовании getpwuid, фрагменте кода для преобразования CSV в Parquet, а также дословных блоков для создания файлов спецификаций.

Метод

Три команды, в указанном порядке. Вывод каждой команды в формате Parquet служит входом для следующей команды. Запускайте их как обычные команды Bash; псевдоним $DOCKER из файла Setup управляет контейнером, графическим процессором и монтированием. Каждый вызов имеет одинаковую структуру: -e для встроенных значений по умолчанию, затем несколько переопределений Hydra для путей, специфичных для данного запуска.

Шаг 1 — Встраивание целевых образов

$DOCKER embedding image_embeddings \
    -e  \
    input_parquet= \
    output_parquet=

Считывает результаты анализа пробелов / маршрутизации и записывает файл в формате Parquet с столбцами filepath, embedding и любыми дополнительными столбцами метаданных (например, label, siamese_score, weakness), перенесёнными дословно из входных данных. Выведите схему выходных данных (pd.read_parquet(...).columns) в стандартный вывод, чтобы хук проверки скрипта мог подтвердить наличие столбца вложения.

Если вам нужно переопределить model / model_path / batch_size для одного запуска без редактирования спецификации, добавьте их в качестве переопределений Hydra (например, model_path=...).

Шаг 2 — Встраивание исходного пула

$DOCKER embedding image_embeddings \
    -e  \
    input_parquet= \
    output_parquet=

Формат команды такой же, как в шаге 1, но применяется к исходному пулу. Используйте тот же файл embedding_spec.yaml, что и в шаге 1, и не переопределяйте здесь параметры model, model_path и batch_size — несовпадение настроек кодировщика в этих двух шагах приводит к получению несопоставимых вложений.

Шаг 3 — Поиск ближайших соседей

$DOCKER tmm nearest_neighbors \
    -e  \
    source_parquet= \
    target_parquet= \
    output_parquet=

Для каждого целевого вложения находит topn ближайших исходных вложений по выбранной метрике, удаляет дубликаты по всем целям и записывает одностолбцовый (filepath) файл в формате Parquet, содержащий уникальные извлеченные исходные пути. Контейнер также создает файл mining_summary.txt рядом с выходным файлом Parquet, содержащий: количество запросов, количество соседей, количество удаленных дубликатов, а также (при включенной фильтрации по меткам) количество сохраненных и удаленных пар. Настройте topn, knn_metric или filter_by_label с помощью встроенного переопределения Hydra при прогоне (например, topn=10) — нет необходимости переписывать спецификацию.

Если filter_by_label=true, но в одном из паркет-файлов вложений отсутствует столбец с метками, контейнер записывает предупреждение в журнал и продолжает работу без фильтрации. Если объем добытых данных оказался больше ожидаемого или содержит межметковые пары, проверьте журнал Docker на наличие этого предупреждения, прежде чем считать, что задача выполнилась правильно.

См. файл references/reference-invocation.md, где приведён минимальный рецепт «скопируй-вставь-отредактируй» (решает $DS_IMAGE, записывает обе спецификации, запускает все три шага, меняет владельца выходных файлов и выводит количество строк), который можно запустить как единый потоковый блок Bash.

Результаты и отчёт

Запишите всё в папку с отметкой времени в каталоге эксперимента / итерации. Получите реальную отметку времени, выполнив в Bash команду `date +%Y-%m-%d_%H%M%S ` — НЕ указывайте её жестко и не угадывайте. Если пользователь указал собственный путь для вывода, используйте его напрямую, но сохраните ту же внутреннюю структуру. Хук упаковки автоматически добавляет каталоги `mining_config/` и файл ` claude_session.jsonl ` при записи файла ` Mining_Report.md`.

Полученный файл Parquet является артефактом, используемым последующим этапом обучения. Два файла Parquet с вложениями являются промежуточными, но их стоит сохранить — они могут быть повторно использованы в нескольких циклах майнинга на одном и том же пуле источников и являются единственным местом, куда следует обращаться, когда отчет, «выглядящий несвязанным», требует отладки на уровне кодировщика.

См. файл references/outputs-and-reporting.md для ознакомления с полной структурой каталога вывода и дословным шаблоном файла Mining_Report.md (Вердикт, Входные данные, Согласованность кодировщика, Прогон майнинга, Разбивка по меткам, Корректность вывода, Рекомендуемые действия; объем должен составлять 600–1200 слов).

Распространённые ошибки

Наиболее частая ошибка — несовпадение кодировщиков на двух этапах встраивания — самая распространённая причина получения бессмысленных результатов майнинга; оба этапа должны использовать один и тот же файл embedding_spec.yaml. Другие повторяющиеся ловушки: передача параметра --user ( ошибка KeyError при вызове getpwuid ), пропуск этапа встраивания, отсутствующий столбец с метками, приводящий к скрытому игнорированию параметра filter_by_label=true, файлы спецификаций за пределами $WORKSPACE, неразрешенные ??? сентинелы, контрольные точки TAO без model_config_path, прямая подача пулов исходных данных в формате CSV, несоответствие путей на хосте и в контейнере, отсутствие GPU, незагруженный тег образа или тег :latest, а также topn × N_targets ≫ размер исходного набора (ожидаемо — укажите фактическое количество извлеченных данных).

См. файл references/troubleshooting.md для полного списка проблем с точными ошибками, причинами и способами устранения.

Порядок выполнения

  1. Определите DS_IMAGE из файла versions.yaml (images.tao_toolkit.data_services), затем один раз запустите коман ды docker info, nvidia-smi и docker image inspect "$DS_IMAGE" (загрузив образ, если он отсутствует), чтобы проверить среду. В случае сбоя любой из операций прервите процесс с чётким сообщением.
  2. Запустите команду `date +%Y-%m-%d_%H%M%S`, чтобы получить метку времени; создайте каталоги ` `, `/mining_results/` и `/`.
  3. Запишите файлы `embedding_spec.yaml ` и `mining_spec.yaml` в каталог с отметкой времени, указав выбранный кодер и параметры майнинга. Сохраните их в каталоге `$WORKSPACE`, чтобы путь, указанный с помощью опции `-e`, разрешался внутри контейнера.
  4. Если исходный набор данных представляет собой файл CSV, сначала преобразуйте его в формат Parquet (сохранив путь к файлу и метку).
  5. Запустите Шаг 1 (встраивание целей) с помощью команды docker run … embedding image_embeddings -e embedding_spec.yaml input_parquet=… output_parquet=…. Выведите количество строк и столбцов выходного файла Parquet в стандартный вывод (stdout).
  6. Запустите шаг 2 (встраивание пула источников) с тем же файлом embedding_spec.yaml, что и в шаге 1. Выведите количество строк и столбцов выходного файла.
  7. Запустите шаг 3 (добыча ближайших соседей) с помощью команды ` docker run … tmm nearest_neighbors -e mining_spec.yaml source_parquet=… target_parquet=… output_parquet=…`. Убедитесь, что файл `mining_summary.txt` был записан рядом с файлом `mined.parquet`.
  8. Вычислите разбивку по меткам (раздел 5), объединив целевой файл embeddings.parquet с результатом поиска по пути к файлу, если оба содержат метку.
  9. В последнюю очередь запишите файл Mining_Report.md — его запись запускает хук упаковки, который копирует журналы сеанса и конфигурацию навыка.
Посмотреть на GitHub
---
name: tao-mine-aoi-images
description: Embeds target and source image parquets, then mines nearest-neighbour source images for augmentation in VCN AOI workflows.
license: Apache-2.0
---

# DEFT Mining and Embedding Skill

You are the operator of the DEFT embed-then-mine workflow for VCN AOI. Your job is to take a parquet of weak target images (the gap-analysis or routing output) and a source pool, then produce a deduplicated parquet of mined source images that look similar to the targets — ready to feed into the next training round.

The workflow is fixed and deterministic: **embed the targets, embed the source pool, then mine nearest neighbours.** Each step's output parquet is the next step's input. There is no iterative search, no clustering pass, no human-in-the-loop selection — depth comes from picking the right encoder and the right `topn`, not from a multi-phase investigation.

The whole skill is a thin wrapper around three direct `docker run` invocations against the `tao_toolkit.data_services` image declared in `versions.yaml` (resolved at runtime — see Setup). The container's entrypoint takes `<category> <action> -e <spec.yaml> [hydra overrides...]` — pass `embedding image_embeddings -e <embedding_spec.yaml> …` for embedding and `tmm nearest_neighbors -e <mining_spec.yaml> …` for mining. The `-e` flag points at a YAML that supplies default values for the subtask's schema; anything afterward is a bare Hydra override (`key=value`) that selectively overrides spec fields per run. (There is no `dataset` keyword inside the container — that's the TAO launcher's pillar prefix and is dropped here.) Pull the image once if it isn't cached: `docker pull "$DS_IMAGE"` (after resolving `$DS_IMAGE` per Setup).

Schema keys can rename between data-services releases (the RCA skill saw `inference_csv` → `inference_results_dir`, `output_dir` → `results_dir`). When in doubt, introspect the actual schema once per image: `docker run --rm "$DS_IMAGE" embedding image_embeddings --cfg=job` and `... tmm nearest_neighbors --cfg=job`.

---

## Inputs

1. **Target parquet** — the gap-analysis output, typically `mining_gaps.parquet` from `tao-route-visual-changenet-samples` (or `gaps.parquet` from `tao-analyze-gaps-visual-changenet` if routing was skipped). Required column: `filepath`. If `label` is also present, label-aware filtering during mining is available; otherwise the mining task silently no-ops the filter.
2. **Source pool** — a parquet of candidate images to mine against, with a `filepath` column. If the user only has a CSV, convert it to a parquet **with the same columns** before Step 2. For label-aware filtering, the pool must also carry a `label` column.
3. **Embedding spec file** — a YAML containing `model`, `model_path`, `batch_size`, and (only when `model_path` is a TAO `.pth`/`.ckpt`) `model_config_path`. Reused across Steps 1 and 2; `input_parquet`/`output_parquet` are supplied per run as Hydra overrides. The **same** spec MUST drive both embedding steps — embeddings from different encoders are not comparable, and mismatched encoders are the most common cause of "the mined images look unrelated" reports.
4. **Mining spec file** — a YAML containing `topn`, `knn_metric`, `filter_by_label`, and (rarely changed) `source_embed_column_name`/`target_embed_column_name`. `source_parquet`/`target_parquet`/`output_parquet` are Hydra overrides at run time. SigLIP and CLIP embeddings should use `knn_metric: cosine`. When `filter_by_label: true` but either embedding parquet lacks a `label` column, the container logs a warning and proceeds **without** filtering.

---

## Setup

Resolve the concrete `tao_toolkit.data_services` URI from `versions.yaml` once at the top of the run, then confirm Docker, the NVIDIA container toolkit, and a GPU are present before doing anything else. A GPU is required for both the encoder forward pass and the cuML/cuDF k-NN search; both steps fail without CUDA.

```bash
# Resolve tao_toolkit.data_services → concrete nvcr.io/... URI from versions.yaml
DS_IMAGE=$(python3 -c "import yaml,os; print(yaml.safe_load(open(os.environ['TAO_SKILL_BANK_PATH']+'/versions.yaml'))['images']['tao_toolkit']['data_services'])")
echo "DS_IMAGE=$DS_IMAGE"

docker info > /dev/null && echo "OK: docker"
nvidia-smi > /dev/null && echo "OK: GPU"
docker image inspect "$DS_IMAGE" > /dev/null \
  || docker pull "$DS_IMAGE"
```

Every host path the container reads or writes must be bind-mounted. The most predictable approach mounts the workspace root with **identical paths** inside and outside the container, then reuses one `$DOCKER` alias for the three invocations:

```bash
WORKSPACE=<absolute path that contains all parquets, outputs, and the source-pool images>
DOCKER="docker run --gpus all --rm --ipc=host -v $WORKSPACE:$WORKSPACE -w $WORKSPACE $DS_IMAGE"
```

Do **not** pass `--user $(id -u):$(id -g)` — it triggers a `getpwuid()` `KeyError` during the `transformers` import before any work starts. The container runs as root; chown outputs back to the host UID afterward.

Author the two spec files once per iteration, placing them under `$WORKSPACE` so the `-e` argument resolves on both sides of the mount; per-run values stay out of the spec and are passed as Hydra overrides. If the source pool is a CSV, convert it to parquet up front (preserving `filepath`, and `label` if present). The default `embedding_spec.yaml` uses `model: SigLIP`, `model_path: google/siglip-base-patch16-224`, `batch_size: 64`; the default `mining_spec.yaml` uses `topn: 5`, `knn_metric: cosine`, `filter_by_label: "false"` (quoted — the schema reads it as a string).

See `references/setup.md` for the full environment notes, `TAO_SKILL_BANK_PATH` handling, the path-mounting rationale, the `getpwuid` chown workaround, the CSV-to-parquet snippet, and the verbatim spec-file authoring blocks.

---

## Method

Three commands, in order. Each command's output parquet is the next command's input. Run them as plain Bash; the `$DOCKER` alias from Setup handles the container, GPU, and mounts. Every invocation follows the same shape: `-e <spec>` for the baked-in defaults, then a handful of Hydra overrides for the run-specific paths.

### Step 1 — Embed the target images

```bash
$DOCKER embedding image_embeddings \
    -e <embedding_spec.yaml> \
    input_parquet=<target_parquet> \
    output_parquet=<target_embeddings_parquet>
```

Reads the gap-analysis / routing output and writes a parquet with `filepath`, `embedding`, and any extra metadata columns (e.g. `label`, `siamese_score`, `weakness`) carried forward verbatim from the input. Print the output schema (`pd.read_parquet(...).columns`) to stdout so the script-check hook can confirm the embedding column exists.

If you need to override `model` / `model_path` / `batch_size` for one run without editing the spec, append them as Hydra overrides (e.g. `model_path=...`).

### Step 2 — Embed the source pool

```bash
$DOCKER embedding image_embeddings \
    -e <embedding_spec.yaml> \
    input_parquet=<source_pool_parquet> \
    output_parquet=<source_embeddings_parquet>
```

Same command shape as Step 1, applied to the source pool. Use the **identical** `embedding_spec.yaml` as Step 1, and do not override `model` / `model_path` / `batch_size` differently here — mismatched encoder configs across the two steps produce non-comparable embeddings.

### Step 3 — Mine nearest neighbours

```bash
$DOCKER tmm nearest_neighbors \
    -e <mining_spec.yaml> \
    source_parquet=<source_embeddings_parquet> \
    target_parquet=<target_embeddings_parquet> \
    output_parquet=<mined_parquet>
```

For each target embedding, finds the `topn` closest source embeddings under the chosen metric, deduplicates across targets, and writes a single-column (`filepath`) parquet of unique mined source paths. The container also drops a `mining_summary.txt` next to the output parquet with: query count, neighbour count, duplicates removed, and (when label filtering is on) kept-vs-dropped pair counts. Tweak `topn`, `knn_metric`, or `filter_by_label` via inline Hydra override when sweeping (e.g. `topn=10`) — no need to rewrite the spec.

When `filter_by_label=true` but one of the embedding parquets is missing the `label` column, the container logs a warning and proceeds without filtering. If the mined output looks larger than expected or contains cross-label pairs, scan the docker log for that warning before assuming the task did the right thing.

See `references/reference-invocation.md` for the minimal paste-and-edit end-to-end recipe (resolves `$DS_IMAGE`, writes both specs, runs all three steps, chowns outputs, and prints row counts) to run as a single streamed Bash block.

---

## Outputs and report

Write everything into a timestamped folder under the experiment / iteration directory. Get the real timestamp by running `date +%Y-%m-%d_%H%M%S` in Bash — do NOT hardcode or guess. If the user specifies a custom output path, use it directly but maintain the same internal layout. The packaging hook adds `mining_config/` and `claude_session.jsonl` automatically when `Mining_Report.md` is written.

The mined parquet is the artifact downstream training consumes. The two embedding parquets are intermediate but worth retaining — reusable across multiple mining runs against the same source pool, and the only place to look when a "looks unrelated" report needs encoder-level debugging.

See `references/outputs-and-reporting.md` for the full output-directory layout and the verbatim `Mining_Report.md` template (Verdict, Inputs, Encoder Consistency, Mining Run, Per-Label Breakdown, Output Sanity, Recommended Actions; keep it 600–1200 words).

---

## Common pitfalls

The most frequent failure is **mismatched encoders between the two embedding steps** — the single most common cause of garbage mining output; both steps must consume the same `embedding_spec.yaml`. Other recurring traps: passing `--user` (the `getpwuid` `KeyError`), skipping an embedding step, a missing `label` column silently no-oping `filter_by_label=true`, spec files outside `$WORKSPACE`, unresolved `???` sentinels, TAO checkpoints without `model_config_path`, CSV source pools fed in directly, host/container path mismatches, no GPU, an unpulled or `:latest` image tag, and `topn × N_targets ≫ source size` (expected — report the actual mined count).

See `references/troubleshooting.md` for the full pitfall list with the exact errors, causes, and fixes.

---

## Execution Order

1. Resolve `DS_IMAGE` from `versions.yaml` (`images.tao_toolkit.data_services`), then run `docker info`, `nvidia-smi`, and `docker image inspect "$DS_IMAGE"` (pulling if missing) once to confirm the environment. Abort with a clear message if any fail.
2. Run `date +%Y-%m-%d_%H%M%S` to get the timestamp; create `<output_dir>/mining_results/<timestamp>/`.
3. Write `embedding_spec.yaml` and `mining_spec.yaml` into the timestamped dir, filling in the encoder choice and mining knobs. Keep these under `$WORKSPACE` so the `-e` path resolves inside the container.
4. If the source pool is a CSV, convert to parquet first (preserve `filepath` and `label`).
5. Run Step 1 (embed targets) via `docker run … embedding image_embeddings -e embedding_spec.yaml input_parquet=… output_parquet=…`. Print the output parquet's row count and columns to stdout.
6. Run Step 2 (embed source pool) with the **identical** `embedding_spec.yaml` as Step 1. Print output row count and columns.
7. Run Step 3 (mine nearest neighbours) via `docker run … tmm nearest_neighbors -e mining_spec.yaml source_parquet=… target_parquet=… output_parquet=…`. Confirm `mining_summary.txt` was written next to `mined.parquet`.
8. Compute the per-label breakdown (Section 5) by joining the target embeddings parquet with the mined output on filepath, if both carry `label`.
9. Write `Mining_Report.md` last — writing it triggers the packaging hook, which copies session logs and skill config alongside.

Установить tao-mine-aoi-images

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/NVIDIA/skills/tree/main/skills/tao-mine-aoi-images # Copy SKILL.md to your .claude/skills/ directory

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ Claude автоматически обнаружит и запустит этот скилл
Репозиторий NVIDIA/skills

Похожие навыки

microservices-patterns
Обновлено время 29 июня 2026 г.
jpa-patterns
Обновлено время 30 июня 2026 г.
fabric-lakehouse
Обновлено время 30 июня 2026 г.
prisma-expert
Обновлено время 29 июня 2026 г.
OR