Фильтрация вывода (Llama Guard, NeMo)
Запускайте небольшую защитную модель для проверки вывода, чтобы до публикации обнаруживать токсичность, утечки PII и нарушения правил.
«Фильтрация вывода (Llama Guard, NeMo)» — бесплатный урок AI Agents на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Зачем фильтровать вывод?
Даже при безопасных входных данных модели могут выдавать:
- утечки персональных данных
- язык вражды или оскорбления
- контент о самоповреждении
- вызовы инструментов, нарушающие намерение пользователя
Фильтр вывода — последняя линия защиты перед тем, как пользователь что-либо увидит.
Llama Guard
Классификатор безопасности Meta — с открытыми весами, очень быстрый:
from transformers import AutoTokenizer, AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-Guard-3-8B')
# Outputs 'safe' or 'unsafe' with category.NeMo Guardrails
NVIDIA NeMo Guardrails — Python-фреймворк, который добавляет проверки для LLM:
# pip install nemoguardrails
from nemoguardrails import RailsConfig, LLMRails
config = RailsConfig.from_path('./config')
rails = LLMRails(config)
response = rails.generate(messages=[{'role': 'user', 'content': '...'}])Guardrails AI
guardrails-ai — библиотека Python, предназначенная для проверки и защитных механизмов. Она поддерживает «rails» на основе XML и циклы исправления reAsk.
Конституционный классификатор Anthropic
Anthropic выпустила классификатор в дополнение к обучению безопасности в Claude. Он полезен для последующей фильтрации вывода любой модели.
Пользовательский фильтр на основе LLM
Самый дешёвый вариант — небольшая LLM, которая проверяет вывод:
FILTER_PROMPT = '''
Analyse the output. Return JSON: {safe: true/false, reason: str, categories: list}
Unsafe categories: PII leak, harmful instructions, copyright violation, prompt-injection echo.
Output:
{output}
'''
result = guard_llm.invoke(FILTER_PROMPT.format(output=text))Фильтры на основе регулярных выражений и правил
Для конкретных шаблонов регулярные выражения работают быстро и надёжно:
import re
EMAIL_RE = re.compile(r'[\w\.-]+@[\w\.-]+')
SSN_RE = re.compile(r'\b\d{3}-\d{2}-\d{4}\b')
def has_pii(text):
return bool(EMAIL_RE.search(text) or SSN_RE.search(text))
# --- demo ---
samples = ['Contact me at jane@example.com', 'My SSN is 123-45-6789', 'No PII in this sentence']
for s in samples:
print(f'{s!r} -> has_pii={has_pii(s)}')
Маскирование PII
Не только блокируйте содержимое — иногда маскируйте его и пропускайте остальную часть:
def redact(text):
text = EMAIL_RE.sub('[email]', text)
text = SSN_RE.sub('[ssn]', text)
return textДвухуровневый фильтр
Сначала применяйте быстрые правила, затем более дорогой фильтр на основе LLM:
def filter_output(text):
if has_obvious_pii(text):
return BLOCKED
result = guard_llm.invoke(...)
return resultПотоковый вывод
Для потокового вывода фильтруйте по предложениям (SENTENCE-BY-SENTENCE):
buf = ''
for token in stream:
buf += token
if buf.endswith(('. ', '! ', '? ', '\n')):
if not safe(buf):
stream.close()
emit_to_client('[content filtered]')
break
emit_to_client(buf)
buf = ''Ложные срабатывания и пропуски
Настройте правильный баланс:
- для ситуаций с высокими рисками (медицина, финансы) склоняйтесь к ложным срабатываниям (больше блокировок)
- для творчества и развлечений склоняйтесь к пропускам (меньше блокировок)
Журналы фильтрации конфиденциальны
Журналы фильтрации содержат заблокированное содержимое. Храните их в безопасности и устанавливайте короткие сроки хранения:
log.warning('Blocked output', extra={'reason': r, 'category': c}, sanitize_payload=True)Информируйте пользователя
При блокировке сообщайте пользователю причину, чтобы он не отправлял повторные попытки без необходимости:
def handle_privacy_request():
return 'I cannot share that information for privacy reasons.'
print(handle_privacy_request())Многоуровневый фильтр
Зачем объединять регулярные выражения с фильтрацией на основе LLM?
Итоги
Llama Guard / NeMo / пользовательский фильтр на основе LLM + правила на основе регулярных выражений. Два уровня защиты. По возможности маскируйте данные. Всегда сообщайте пользователю, когда содержимое заблокировано.
Часто задаваемые вопросы
Урок «Фильтрация вывода (Llama Guard, NeMo)» бесплатный?
Да — полный текст урока «Фильтрация вывода (Llama Guard, NeMo)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Фильтрация вывода (Llama Guard, NeMo)»?
Запускайте небольшую защитную модель для проверки вывода, чтобы до публикации обнаруживать токсичность, утечки PII и нарушения правил. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Фильтрация вывода (Llama Guard, NeMo)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Защита от внедрения промптов
- Фильтрация вывода (Llama Guard, NeMo)
- Изолированное выполнение кода для агентов
- Контроль доступа к инструментам