Память и Guard Rails в агентских системах
Ключевые тезисы:
- Память в агентских системах делится на краткосрочную, долгосрочную и контекстную.
- RAG (Retrieval-Augmented Generation) — ключевой инструмент для работы с долгосрочной памятью и актуальной информацией.
- Guard Rails — механизмы защиты от угроз: промт-инжекции, jailbreaking и галлюцинаций.
- Для реализации защиты используются инструменты разной сложности: от регулярок до LLM.
- Мониторинг и аудит критически важны после выхода системы в продакшен.
Типы памяти в агентских системах
Память необходима, чтобы агент мог накапливать знания, действия и персонализировать взаимодействие. Без неё каждый диалог начинался бы с нуля.
Краткосрочная (рабочая) память
Ограничена одной сессией (задачей) и исчезает после её завершения.
- Содержит: предыдущие реплики, результаты вызовов инструментов, рассуждения модели.
Долгосрочная память
Использует внешнее хранилище для сохранения информации между сессиями.
- Примеры использования:
- Сохранение информации о пользователе (предпочтения, факты).
- Суммаризация истории взаимодействия за продолжительное время.
- Память о сущностях (Entity Memory): запоминает конкретные сущности (люди, места, продукты), чтобы не переспрашивать пользователя.
Контекстная память
То, что непосредственно передаётся в контекстном окне LLM при запросе.
- Может включать: данные из краткосрочной памяти, информацию из долгосрочной памяти, результаты работы инструментов, последнее сообщение пользователя.
RAG (Retrieval-Augmented Generation)
RAG — это мост между долгосрочной памятью и контекстом, позволяющий находить и использовать релевантную информацию во время работы агента.
Зачем нужен RAG:
- Актуальность информации: LLM знает только то, что было актуально на момент её обучения.
- Ограничение контекста: Не вся необходимая информация помещается в контекстное окно LLM.
- Динамичные домены: Для работы с постоянно меняющейся информацией (например, новостями).
Как устроен RAG
- Офлайн-этап: Подготовка индекса/базы для поиска.
- Векторная база: Поиск по семантической близости (эмбеддинги).
- Full-text индекс (BM25): Поиск по совпадению слов/лексем.
- Специализированная база знаний (SQL/NoSQL): Выполнение специализированных запросов.
- Онлайн-этап: Использование во время работы агента.
- Получение запроса → поиск в индексе → обогащение контекста найденными документами → генерация ответа LLM на основе обогащённого контекста.
Техники улучшения качества RAG
Переписывание запроса: Делает запрос самодостаточным, убирая отсылки к предыдущему контексту (местоимения, специфичные термины).
Декомпозиция запроса: Разделение сложного запроса на несколько независимых подзапросов, поиск по каждому и объединение результатов.
HyDE (Hypothetical Document Embeddings): Генерация LLM «гипотетического» ответа на том же формальном языке, что и доменная область, и поиск по нему.
Двухстадийный поиск:- Стадия полноты: Грубый поиск, цель — не пропустить полезные документы.
- Стадия точности: Точная фильтрация среди найденного, оставляем только релевантное.
Обучение как инструмент запоминания
LLM обучаются в несколько этапов, и на каждом можно в разной степени «запоминать» информацию:
- Претренинг: Наибольший потенциал для запоминания информации о мире.
- SFT (Supervised Fine-Tuning): Учит поведению и решению задач, потенциал для запоминания меньше.
- LoRA: Эффективная с точки зрения ресурсов разновидность SFT.
RAG vs. Обучение: когда что выбирать?
Выбирайте RAG, если:
- Только начинаете разработку (быстро и дёшево).
- Информация меняется динамично.
- Нужен ответ, основанный на конкретных документах.
- Используете легковесную LLM с ограниченными возможностями.
Выбирайте обучение, если:
- Домен стабильный и не меняется динамично.
- Требуется глубокое понимание сложной предметной области.
- Есть достаточные ресурсы (вычислительные, данные, инженерные).
Практическое правило: Сначала пробуйте RAG. Если не решает задачу — рассматривайте обучение.
Стратегии управления контекстом
Когда контекст диалога становится слишком большим для LLM, применяют:
Sliding Window / Token Buffer: Выбрасываются самые старые части диалога, остаются последние (самые релевантные). Просто, но информация теряется.
Суммаризация: Отдельным запросом к LLM диалог суммируется в сжатый вид. Сохраняет смысл, но требует дополнительных вызовов и может терять детали.
Индексирование эмбеддингами: Индексация частей диалога и подтягивание в контекст только семантически близких к текущей задаче фрагментов.
Использование LLM с большим контекстом: Модели на миллионы токенов упрощают разработку (можно даже заменить RAG). Но дорого и медленно.
Guard Rails
Guard Rails — это механизмы защиты агентских систем от рисков при взаимодействии с внешним миром (пользователи, действия). Риски: правовые, репутационные, угрозы здоровью, финансовые потери.
Модель угроз и защита
1. Промт-инжекция (Prompt Injection)
Пользовательские данные маскируются под инструкции, заставляя LLM игнорировать исходные системные промты.
- Прямая инжекция: Атака содержится в прямом вводе пользователя.
- Непрямая инжекция: Атака содержится в данных, возвращаемых инструментами агента (веб-страницы, письма, API).
Защита:
- Анализ ввода пользователя и выходов инструментов на наличие инъекций.
- Чёткое разделение инструкций и данных в промте, явные указания игнорировать инструкции в данных.
- Ограничение набора доступных инструментов строго по необходимости.
2. Jailbreaking
Пользователь уговаривает или мотивирует LLM игнорировать политики безопасности под предлогом решения «благих» задач.
Защита:
- Классификаторы на входе для детекции подобных попыток.
- Фильтры на выходе, проверяющие соответствие ответа политике безопасности.
- Явное усиление безопасного поведения в промтах.
3. Галлюцинации
LLM выдаёт неправдивую или не соответствующую инструкциям информацию, что в агентских системах может привести к реальным последствиям.
Типы и защита:
Нефактуальность: Выдача ложной информации.- Защита: Явный трекинг ключевых моментов в стейте; повторная проверка (фактчекинг) сгенерированного ответа.
Неследование инструкциям: Игнорирование формата, языка и т.д.- Защита: Детерминированная валидация выхода (например, проверка JSON); повторный запрос к LLM на исправление.
Галлюцинация в действиях: Генерация вызовов инструментов с несуществующими или некорректными аргументами.- Защита: Строгая валидация аргументов; белые списки допустимых значений; изолированное окружение для выполнения; подтверждение критичных действий человеком-оператором.
Контентные фильтры и ограничители действий
Применяются к вводу, выводу агента и результатам работы инструментов.
Релевантность: Классификатор, отсекающий запросы не по теме.
Content Moderation: Фильтрация тем (наркотики, оружие, ненависть и т.д.).
PII (Personally Identifiable Information) фильтры: Обнаружение и маскирование персональных данных для соблюдения законодательства.
Output Constraint Check: Проверка соответствия вывода заданным правилам (язык, формат).
Фактчекинг и детекция галлюцинаций.
Инструменты реализации Guard Rails
От простых к сложным:
Регулярные выражения / простые правила: Быстро, надёжно, детерминированно.
Формальная валидация: Проверка соответствия формату (JSON, грамматика).
ML-классификаторы: Обученные модели для классификации.
DSP / BERT: Семантический анализ, баланс между скоростью и качеством.
LLM: Для самых сложных проверок, но медленно и не для защиты от самих LLM-атак (промт-инжекции).
На практике: Используйте комбинацию инструментов для