NeMo Anonymizer — скилл
Скилл NVIDIA ведет агента от описания приватности до скрипта, который находит и заменяет личные данные в текстовых наборах.
- 137 ★ репозитория
- Последний коммит
- Apache-2.0
Расширенный доступ
Почему такой уровень
- Сгенерированный скрипт отправляет тексты с персональными данными в модели OpenRouter, если не заданы свои провайдеры.
- Скрипт запускает код на данных пользователя и тратит вызовы платной модели.
Установка
- Работает в
В терминале, через SkillFoxx CLI
npx skillfoxx add skills/nemo-anonymizerОпределит агенты на машине, покажет уровень доступа и зафиксирует версию.
Другие способы установки
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Сгенерированный скрипт отправляет тексты с персональными данными в модели OpenRouter, если не заданы свои провайдеры.
- Скрипт запускает код на данных пользователя и тратит вызовы платной модели.
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
Скилл `anonymizer` поставляется вместе с библиотекой NeMo Anonymizer. Агент уточняет допустимый остаток утечки и цель приватности, называет режим и пишет один запускаемый скрипт Python с `AnonymizerConfig`. Режим Replace находит сущности и заменяет их на месте стратегиями Substitute, Redact, Annotate или Hash; режим Rewrite переписывает весь текст, чтобы убрать и косвенные идентификаторы. Скрипт сначала запускает `preview` на нескольких строках, показывает сбойные записи и метрики качества, при желании оценивает результат судьей на основе модели и только после одобрения запускает полный прогон. Скрипт остается у пользователя для повторных запусков и контроля версий.
Для кого. Инженерам данных и разработчикам, которые готовят текстовые наборы с персональными данными: клинические заметки, обращения, логи, биографии.
Подходит, если
- Перед обучением или передачей подрядчику из набора обращений убирают имена, почту и телефоны.
- Клинические заметки или показания переписывают так, чтобы не осталось и косвенных признаков человека.
- Нужна одинаковая замена одного значения во всех записях: для этого берут `Hash`.
- Перед полным прогоном хотят увидеть превью, метрики покрытия сущностей и список пропусков.
Не подходит, если
- Данные нельзя отправлять в OpenRouter или другой внешний сервис, а своих моделей нет.
- Нужно автоматическое решение без вопросов: скилл всегда спрашивает режим и порог утечки.
- Данные табличные и числовые, без свободного текста.
Пример запроса к агенту
Обезличь колонку `biography` в `bios.csv` скиллом anonymizer: сначала спроси про режим, потом покажи превью на трех строках.Ограничения
Скилл только пишет скрипт, а работа идет в библиотеке `nemo-anonymizer`, которую нужно ставить отдельно командой `pip install nemo-anonymizer`. По умолчанию библиотека ждет локальный эндпоинт GLiNER2 для поиска сущностей и использует тексты в OpenRouter для проверки, поэтому нужен `OPENROUTER_API_KEY`, а чувствительные данные уходят во внешний сервис по его правилам. Стратегия Annotate оставляет исходный текст и не годится для продакшена. Оценка качества судьей на модели платная и диагностическая: сам вывод она не меняет.
Как отключить. Удалите папку `anonymizer` из каталога скиллов агента. Библиотеку снимите командой `pip uninstall nemo-anonymizer`, а ключ OpenRouter отзовите, если он больше не нужен.
Частые вопросы
Как поставить скилл NeMo Anonymizer?
Выполните `npx skills add NVIDIA-NeMo/Anonymizer`. Затем вызовите его командой `/anonymizer` либо опишите задачу, и скилл подключится сам.
Чем режимы Replace и Rewrite отличаются?
Replace находит сущности и заменяет каждую на месте: быстрее, дешевле и сохраняет форму текста. Rewrite переписывает текст целиком, убирает косвенные идентификаторы, но стоит дороже и может изменить структуру.
Как заменять одно значение одинаково во всех записях?
Берите `Hash`. Стратегия `Substitute` последовательна только внутри одной строки, а для связи между записями она не подходит.
Что делать, если после превью остались пропущенные записи?
Сначала исправьте источник сбоя: лимиты, авторизацию или провайдера модели. Настройки стратегии выпавшие строки не вернут.
Можно ли обойтись без OpenRouter?
Да. Передайте свой файл провайдеров в `Anonymizer(model_providers="path/to/model_providers.yaml")` и укажите собственные модели.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
СкиллыОфициальный скилл NVIDIA для Claude Code и Codex: по описанию набора данных агент собирает конфигурацию, проверяет, показывает превью и создает синтетику
NVIDIA BioNeMo Agent Toolkit — скиллы для наук о жизни
NVIDIA BioNeMo Agent Toolkit
Скиллы NVIDIA для биологии и химии: агент предсказывает структуры белков, стыкует молекулы, проектирует белки и разбирает геномы
Скилл Claude Code учит агента библиотеке tangermeme для анализа геномных нейросетей: DeepLIFT/SHAP, мутагенез, дизайн.
Скилл учит агента писать код на nvMolKit: GPU-версии отпечатков, сходства, конформеров и кластеризации молекул из RDKit.
База знаний из ваших документов, где люди и ИИ-агенты ведут разметку вместе, а MCP-сервер и скиллы подключают к ней Claude Code
Скилл для агента: превращает статью с arxiv в минимальную реализацию на Python, где код привязан к разделам и формулам, а неуказанные места честно помечены
Сравнение с похожими
Карточки с тем же главным запросом: чем они отличаются.
| Инструмент | Официальный | Авторизация | Звезды репозитория | Главное отличие |
|---|---|---|---|---|
| NeMo Anonymizer (эта карточка) | нет | 137 | ||
| PII Guard | нет | 255 | PII Guard локально обезличивает документы на традиционном китайском с возвратом после ИИ; NeMo Anonymizer готовит скрипт для текстовых наборов с выбором стратегий | |
| Анонимизатор персональных данных по 152-ФЗ | нет | не нужна | 5 | MCP-сервер маскирует персональные данные под 152-ФЗ перед отправкой в LLM; скилл NVIDIA строит конвейер для целого набора данных |
Коротко о README
Библиотека находит сущности через GLiNER-PII и проверку моделью, затем заменяет их четырьмя стратегиями. Основной вход в README: CLI с командами `preview`, `run`, `validate` и Python API, а раздел про скилл вынесен отдельно.
Бейдж для README
Исходный SKILL.md
--- # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 name: anonymizer description: Use when the user wants to anonymize a text dataset, redact PII, de-identify free-text data, or rewrite text to remove sensitive or inferable identifying information. Produces a runnable Python script that calls the NeMo Anonymizer pipeline (detection → replace or rewrite). license: Apache-2.0 metadata: author: Aaron Gonzales <aagonzales@nvidia.com> --- # Before You Start Do not explore the workspace first. The workflow's data-inspection step shows you what you need. # Goal Anonymize a text dataset using NeMo Anonymizer in the way the user describes: $ARGUMENTS The output is a single runnable Python script that builds an `AnonymizerConfig`, previews results on a few rows, inspects failures and quality metrics, optionally scores output with LLM-as-judge evaluation (Replace and Rewrite modes), and (on user approval) runs the full pipeline. The script is the durable artifact — the user keeps it for re-runs, version control, and production. # Workflow Read `references/interactive.md` and follow it. Anonymization is high-stakes, so there is no autopilot mode. Even when the user says "you decide" or "be opinionated", ask the minimum questions needed to choose `risk_tolerance` and phrase `privacy_goal`. The user must make those choices based on their regulatory and business context. # Rules - **Always preview before running the full pipeline.** Preview is cheap; a full run can be expensive and slow. - **If `result.failed_records` is non-empty after preview, fix that *before* tweaking strategy.** Dropped rows are a model/provider/infra problem (rate limits, auth, etc.), not a config problem. Strategy knobs won't help. See `docs/troubleshooting.md` "Did the run actually complete cleanly?" or the [published troubleshooting guide](https://nvidia-nemo.github.io/Anonymizer/dev/troubleshooting/). - **Ask the user which mode.** Briefly describe both: Replace detects entities and replaces each in place (faster, cheaper, keeps shape); Rewrite transforms the full text to also remove inferable identifiers (more expensive, may restructure). Use the data shape as a hint — free-text with implicit identifiers (clinical notes, biographies, depositions) leans Rewrite; structured records / log lines lean Replace — but the user picks. - **For cross-record consistency** (same value → same replacement everywhere), use `Hash`, not `Substitute`. `Substitute` is consistent within a row only. - **In Replace mode, default to `Substitute`** if the user hasn't specified a strategy. It's the most general-purpose choice and matches the bulk of production usage. - **`Annotate` is for inspection, not production.** Its output keeps the original entity text and is not privacy-safe. Use it during iteration to confirm detection is working, then switch. - **Evaluation is opt-in and runs as a separate step** (Replace and Rewrite modes). After `preview()` / `run()`, call `anonymizer.evaluate(result)` to score the output with LLM-as-judge. **Entity coverage always runs** in both modes — it reports detection recall over the judge's unique candidate values (`entity_coverage` + `missed_entities`). On top of that: Replace `Substitute` adds three quality judges (type fidelity, relational consistency, attribute fidelity); Rewrite adds the holistic privacy/quality/style judge. Detection validity is **opt-in** via `EvaluateConfig(compute_detection_validity=True)` (off by default). Evaluation is diagnostic — it scores quality, it does not change the anonymized output. - **Always set `data_summary` on the input**, even briefly. It is the single cheapest quality lever and it improves both detection and rewrite.