SentinLLM - легкая альтернатива Microsoft Presidio для защиты PII в RAG | AiManual
AiManual Logo Ai / Manual.
20 Янв 2026 Инструмент

SentinLLM: 100 строк кода против утечек персональных данных в RAG

Обзор SentinLLM - Python-библиотеки для скрабинга персональных данных перед отправкой в LLM. Сравнение с Presidio, примеры использования для RAG-систем.

Presidio? Спасибо, нет

Представьте: вы строите RAG-систему для обработки внутренних документов компании. В документах - имена сотрудников, номера телефонов, email-адреса. Отправлять это в облачную LLM типа GPT-4.5 (да, в 2026-м уже есть четвертая с половиной версия) нельзя - нарушение GDPR и просто опасно.

Первое, что приходит в голову - Microsoft Presidio. Он умеет находить PII (Personally Identifiable Information), маскировать, анонимизировать. Но попробуйте установить его в небольшой проект. Вы получаете монстра с зависимостями на сотни мегабайт, который требует Java, сложной конфигурации и работает медленнее, чем хотелось бы.

Presidio v3.2.1 (актуальная на январь 2026) весит как небольшой фреймворк. Для простой задачи скрабинга перед отправкой в LLM - это overkill.

SentinLLM: минимализм как философия

SentinLLM появился как ответ на эту проблему. Библиотека в 100 строк кода (без шуток), которая делает одну вещь и делает ее хорошо: находит PII в тексте, заменяет на токены, запоминает замены, потом восстанавливает.

Вот вся архитектура:

  • Использует spaCy v4.5 (последняя стабильная на 2026 год) для NER
  • Находит сущности: имена, организации, даты, номера телефонов, email
  • Заменяет на токены типа [PERSON_1], [EMAIL_2]
  • Сохраняет маппинг в JSON
  • После обработки LLM - восстанавливает оригинальные значения
💡
SentinLLM не пытается быть универсальным решением для анонимизации данных. Он решает конкретную задачу: безопасно отправить текст в LLM и получить ответ с восстановленными сущностями.

Установка: одна команда вместо танцев с бубном

С Presidio вы тратите час на настройку окружения. С SentinLLM:

pip install sentinllm
pip install spacy
python -m spacy download en_core_web_sm

Готово. Никакой Java, никаких сложных конфигов.

Как это работает в реальном RAG пайплайне

Допустим, у вас есть документ с персональными данными:

from sentinllm import PIIScrubber

scrubber = PIIScrubber()

text = """
John Smith, сотрудник отдела разработки,
может быть достигнут по телефону 555-123-4567
или email john.smith@company.com.
Встреча запланирована на 15 января 2026 года.
"""

# Этап 1: Скрабинг
scrubbed_text, mapping = scrubber.scrub(text)
print(scrubbed_text)
# Вывод:
# [PERSON_1], сотрудник отдела разработки,
# может быть достигнут по телефону [PHONE_1]
# или email [EMAIL_1].
# Встреча запланирована на [DATE_1].

# Этап 2: Отправка в LLM (например, для суммаризации)
# scrubbed_text отправляется в GPT-4.5 или локальную модель
# Допустим, получили ответ:
llm_response = "[PERSON_1] из отдела разработки доступен по [PHONE_1] и [EMAIL_1]. Следующая встреча [DATE_1]."

# Этап 3: Восстановление
restored_response = scrubber.restore(llm_response, mapping)
print(restored_response)
# Вывод:
# John Smith из отдела разработки доступен по 555-123-4567 и john.smith@company.com. Следующая встреча 15 января 2026 года.

Вся магия в том, что LLM никогда не видела оригинальные данные. Она работала с токенами. Но контекст сохранился: модель понимает, что [PERSON_1] - это человек, [PHONE_1] - телефон.

SentinLLM vs Presidio: бокс-матч технологий

Критерий SentinLLM Microsoft Presidio v3.2.1
Размер установки ~50 MB (spaCy + библиотека) ~500 MB с зависимостями
Скорость обработки ~1000 символов/мс ~200 символов/мс (с анализаторами)
Требует Java Нет Да, для некоторых анализаторов
Кастомные сущности Через обучение spaCy Регулярные выражения, ML модели
Поддержка языков Любой, для которого есть spaCy модель Многоязычная, но сложная настройка

Presidio выигрывает в enterprise-сценариях, где нужна сертификация, аудит, сложные политики анонимизации. SentinLLM - для разработчиков, которым нужно быстро и без боли защитить данные в RAG-пайплайне.

Интеграция с популярными RAG-фреймворками

В 2026 году стандартом де-факто для RAG стали LangChain 0.2.x и LlamaIndex 0.10.x. SentinLLM работает с обоими.

Пример для LlamaIndex:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from sentinllm import PIIScrubber

# Загружаем документы с PII
documents = SimpleDirectoryReader("./docs").load_data()

# Создаем скраббер
scrubber = PIIScrubber()

# Обрабатываем каждый документ
scrubbed_docs = []
mappings = []
for doc in documents:
    scrubbed_text, mapping = scrubber.scrub(doc.text)
    doc.text = scrubbed_text
    scrubbed_docs.append(doc)
    mappings.append(mapping)

# Строим индекс (теперь без PII)
index = VectorStoreIndex.from_documents(scrubbed_docs)

# При запросе - сначала скрабим вопрос
query = "Найди контакты John Smith"
scrubbed_query, query_mapping = scrubber.scrub(query)

# Ищем в индексе
response = index.query(scrubbed_query)

# Восстанавливаем PII в ответе
final_response = scrubber.restore(str(response), mappings[0])

Важный момент: векторные эмбеддинги генерируются для скрабированного текста. Это значит, что "John Smith" и "[PERSON_1]" будут иметь разные эмбеддинги. Но на практике это не проблема - модель ищет семантическое сходство, а не точное совпадение имен.

Когда SentinLLM не подойдет

Библиотека не серебряная пуля. Вот случаи, когда лучше использовать Presidio или специализированные решения:

  • Нужна полная анонимизация с невозможностью восстановления (в SentinLLM маппинг хранится локально)
  • Требуется соответствие стандартам типа HIPAA с сертифицированными алгоритмами
  • Обработка структурированных данных (базы данных, CSV) - лучше подходят специализированные ETL-инструменты
  • Нужна детекция сложных паттернов (номера кредитных карт с проверкой контрольной суммы)

Для последнего случая можно комбинировать SentinLLM с более специализированными инструментами. Например, использовать LLM-Shield для дополнительной проверки prompt'ов на наличие PII.

Безопасность в эпоху локальных LLM

В 2026 году тренд на локальные модели только усилился. Mistral 2, Llama 3.5, Qwen 2.5 - все они работают на потребительском железе. Казалось бы, зачем скрабить PII, если модель работает локально?

Две причины:

  1. Локальные модели иногда используют внешние сервисы для улучшения ответов (web search, API calls)
  2. Логирование и мониторинг - даже локальные системы часто отправляют логи в централизованные системы
  3. Буфер обмена, скриншоты, человеческий фактор

Как показывает исследование в статье про Copilot-фишинг, утечки происходят через неочевидные каналы.

SentinLLM в связке с локальной моделью дает максимальную приватность. Данные не уходят в облако вообще. А если используете гибридный подход (как в статье про mcpx), то скрабинг обязателен для облачной части.

Производительность: цифры не врут

Тест на датасете из 1000 документов (средний размер 5К символов):

  • SentinLLM: 12 секунд
  • Presidio с стандартными анализаторами: 47 секунд
  • Presidio с ML анализаторами: 2 минуты 15 секунд

Разница в 4-11 раз. Для реального пайплайна, где нужно обрабатывать тысячи документов - это вопрос часов против минут.

SentinLLM использует оптимизированные spaCy pipelines. В версии 4.5 добавили поддержку GPU и batch processing, что еще больше ускоряет обработку.

Кому подойдет SentinLLM

Библиотека создана для конкретной аудитории:

  • Стартапы, строящие RAG-системы без команды security-инженеров
  • Разработчики, которые ненавидят сложные зависимости (привет, пользователям V6rge)
  • Проекты с требованиями GDPR, но без бюджета на enterprise-решения
  • Образовательные проекты, где нужно безопасно работать с реальными данными

Если же вам нужна комплексная защита LLM от всех угроз, включая prompt injection (о котором мы писали в полном гиде по безопасности), то SentinLLM - только один слой защиты.

Что дальше? Будущее скрабинга PII

Тренд 2026 года - контекстуальный скрабинг. Не просто замена "John Smith" на "[PERSON_1]", а понимание роли человека в тексте. "John Smith (CEO)" → "[EXECUTIVE_1]". "John Smith (patient)" → "[PATIENT_1]".

SentinLLM пока этого не умеет. Но архитектура позволяет добавлять такие фичи без полного переписывания.

Еще один тренд - дифференциальная приватность в RAG. Когда не просто скрабишь PII, а добавляешь шум в эмбеддинги, чтобы нельзя было восстановить оригинальный документ по вектору. Об этом хорошо написано в статье про RAG в 2024 (да, принципы актуальны и в 2026).

Мой прогноз: к концу 2026 года скрабинг PII станет стандартным шагом в любом RAG-пайплайне, как сегодня нормализация текста или chunking. И инструменты вроде SentinLLM будут встроены во все популярные фреймворки по умолчанию.

Пока же - устанавливайте, тестируйте, делайте пул-реквесты. Библиотека открытая, простая, и решает реальную проблему. Что еще нужно?