Вы когда-нибудь тратили полдня на то, чтобы вычеркнуть имена и номера телефонов из пачки юридических документов? Если да - вы знаете эту боль. Ручное редактирование (redaction) - занятие для терпеливых зомби. Но мы живём в 2026 году, и локальные LLM наконец-то доросли до того, чтобы делать это за нас. Сегодня я расскажу, как собрать агентный пайплайн на Qwen 2.5 27B и фреймворке Pi-agent, который автоматически найдёт и заменит персональные данные в документах. И никаких облачных API, всё под вашим контролем.
Почему Qwen 2.5 27B + Pi-агент, а не просто регулярки или GPT-4o на сервере?
Допустим, у вас есть документ, где конфиденциальные данные могут быть скрыты хитро: "Джон Смит, номер карты 1234-5678-9012-3456" или "Иван Петрович, тел. +7 (495) 123-45-67". Регулярками такое можно поймать, но LLM видит контекст: например, если слово "Джон" используется как имя, а не как часть названия. Qwen 2.5 27B (с версией от мая 2026) отлично понимает семантику и может не только найти сущности, но и заменить их с сохранением стиля текста.
Альтернативы? Llama 3 70B тоже умеет tool calling, но требует больше ресурсов. Mistral Large - отличная, но проприетарная. Локально же Qwen 2.5 27B работает на одной видеокарте с 24 ГБ VRAM (RTX 4090) и выдаёт качество, близкое к GPT-4. А Pi-агент - легковесный фреймворк, который не тащит за собой LangChain с его dependency hell. Кстати, если у вас были проблемы с tool calling у Qwen, советую глянуть наш гайд по настройке агентов - там детально разобраны грабли.
Что такое Pi-агент и зачем он здесь?
Pi-агент (пишется пи-агент, не путать с Raspberry Pi) - это open-source фреймворк для построения агентов на базе LLM. Его фишка: ультралёгкая архитектура, минимум кода, и он из коробки понимает OpenAPI-спецификации инструментов. В отличие от AutoGen (слишком много boilerplate) или LangChain AgentExecutor (тяжёлый), Pi-агент работает практически без накладных расходов. Для задачи редактирования документов он идеален: мы просто определяем два инструмента - find_pii и redact_text, а LLM сама решает, когда их вызвать.
Но есть нюанс: Pi-агент требует строгого описания функций через Pydantic-схемы. Если вы привыкли к вольным описаниям инструментов, модель может начать галлюцинировать. Хорошая новость: Qwen 2.5 27B генерирует tool calls с точностью ~95% (по тестам июнь 2026).
Собираем пайплайн: пошагово
1 Установка зависимостей
# Устанавливаем Ollama и запускаем модель
ollama pull qwen2.5:27b-q4_K_M
# Устанавливаем Pi-agent
pip install pi-agent
# Также понадобится PyMuPDF для чтения PDF
pip install pymupdf
Модель можно качать в любой квантизации. Q4_K_M - золотая середина между скоростью и качеством. На RTX 3090 она выдаёт ~30 токенов/сек.
2 Определяем инструменты
Создадим файл tools.py, где опишем функции для поиска PII и редактирования. Важно: модель должна видеть понятные названия и описания.
from pydantic import BaseModel, Field
from typing import List, Optional
import re
class PIISpan(BaseModel):
start: int
end: int
entity_type: str # PERSON, PHONE, EMAIL, etc.
text: str
class FindPIIInput(BaseModel):
text: str = Field(description="Текст документа для анализа")
class FindPIIOutput(BaseModel):
spans: List[PIISpan]
class RedactInput(BaseModel):
text: str
spans: List[PIISpan]
replacement: Optional[str] = "[REDACTED]"
class RedactOutput(BaseModel):
result: str
# Реализация: используем regex + NLP fallback
# В реальности можно передать модели задачу экстракции через промпт,
# но для скорости используем предобученный spaCy + регулярки
3 Создаём агента
from pi_agent import Agent, Tool
find_tool = Tool(
name="find_pii",
description="Найти все персональные данные в тексте (имена, телефоны, email, адреса)",
input_schema=FindPIIInput,
output_schema=FindPIIOutput,
handler=lambda text: find_pii_impl(text) # ваша реализация
)
redact_tool = Tool(
name="redact_text",
description="Заменяет найденные фрагменты на плейсхолдеры",
input_schema=RedactInput,
output_schema=RedactOutput,
handler=lambda text, spans, replacement: redact_impl(text, spans, replacement)
)
agent = Agent(
model="ollama:qwen2.5:27b-q4_K_M",
tools=[find_tool, redact_tool],
system_prompt="Вы - ассистент по редактированию конфиденциальных документов. "
"Сначала вызовите find_pii, затем redact_text. Не придумывайте данные."
)
4 Запуск и тест
import fitz # PyMuPDF
doc = fitz.open("contract.pdf")
full_text = ""
for page in doc:
full_text += page.get_text()
result = agent.run(full_text)
print("Обработанный текст:", result)
На выходе получим текст, где все конфиденциальные данные заменены на [REDACTED]. Если нужно сохранить структуру документа, можно добавить инструмент для работы с PDF-аннотациями - но это уже другая история.
Живой пример: что внутри?
Допустим, исходный документ содержит:
Клиент: Иванов Иван Иванович
Дата рождения: 12.03.1980
Паспорт: 4510 123456
Телефон: +7 (916) 555-44-33
После обработки через агента:
Клиент: [REDACTED]
Дата рождения: [REDACTED]
Паспорт: [REDACTED]
Телефон: [REDACTED]
Разумеется, можно настроить разные плейсхолдеры для разных типов данных: [ИМЯ], [ТЕЛЕФОН]. Для этого достаточно передать агенту более детализированный replacement в инструменте redact_text. Только не забудьте поправить промпт, чтобы модель не начала заменять всё подряд - агент тоже ошибается. О том, как отлавливать такие ошибки, мы писали в материале 10 критических ошибок RAG в продакшене - многие применимы и к агентам.
Кому это реально нужно?
- Юридические отделы - автоматическое цензурирование судебных исков, контрактов;
- HR - обработка резюме и личных дел;
- Медицинские учреждения - удаление PHI из медицинских карт;
- Фрилансеры-аналитики - быстрая анонимизация датасетов для отправки клиенту.
Главное преимущество такого подхода - полная приватность. Данные не уходят ни в какой облачный сервис, модель работает локально. Да, на первой итерации придётся повозиться с настройкой инструментов, но когда пайплайн отлажен, один документ обрабатывается за 10-20 секунд. Это быстрее, чем пить кофе, пока вы руками замазываете PDF-редактором.
Кстати, если вы думаете, что Adobe Acrobat AI уже умеет редактировать промптами - да, умеет, но только в облаке. Локальный Pi-агент с Qwen 2.5 27B даёт вам и скорость, и контроль. Выбор за вами.
Проверьте сами
Скачайте модель, поставьте Pi-агент и попробуйте на своём документе. Важно: не ждите идеала с первого раза - промпт придётся дорабатывать под ваш тип документов. Зато когда всё заработает, вы сможете обрабатывать сотни страниц без единого взгляда человека.