March 24

АВАРИЙНАЯ СХЕМА ОТЛАДКИ RAG-СИСТЕМ

Уровень 1: Видимые симптомы

  • Симптом: Галлюцинации или невнятные ответы
    • Первая проверка: Сравни ответы с разными температурами (0.1 vs 0.7)
    • Что ищем: Если при низкой температуре ответы всё равно бредовые — проблема не в LLM, а в поиске/индексации
  • Симптом: Неуместные источники в ответе
    • Тест: Запроси конкретную информацию, которая точно есть в базе знаний
    • Что ищем: Если система не находит даже явные факты — проблема в ранжировании или эмбеддингах

Уровень 2: Диагностика индексирования

  1. Тест синхронизации: Добавь уникальный временный документ, запроси инфу из него немедленно
    • Если система не видит — кэширование сломано или асинхронная индексация не завершается
  2. Тест на дубликаты: Выгрузи случайные 100 документов и проверь хэши
    • У меня было 23% дубликатов с разными версиями одних и тех же данных 🤦‍♂️
  3. Проверка эмбеддингов: Запусти t-SNE визуализацию на выборке векторов
    • Если семантически близкие документы разбросаны по всей плоскости — модель эмбеддингов сломана

Уровень 3: Диагностика поиска

  1. Проверка топ-К: Искусственно занизь К до 3-5 и посмотри, что система выбирает
    • Мой любимый трюк: Добавь явно похожий документ с уникальным идентификатором, проверь его ранг
  2. Проверка метрики сходства: Проведи A/B тест между косинусным расстоянием и евклидовым
    • На одних данных косинусное расстояние на 30% точнее, на других — наоборот
  3. Аудит времени отклика: Замерь время каждого этапа (чанкинг → эмбеддинг → поиск → ранжирование → LLM)
    • У меня проблема была в чанкинге, который занимал 60% времени и вызывал таймауты

Уровень 4: Проверка промптов

  1. Изоляция промпта: Запусти тот же запрос к LLM без RAG-контекста и сравни
    • Частая ошибка: Если промпт содержит инструкции "используй только предоставленную информацию", а информации нет — система будет галлюцинировать
  2. Тестирование окна контекста: Пробуй разные размеры контекста для извлеченных чанков
    • У меня работало лучше с 5-7 меньшими чанками, чем с 3 большими

Уровень красной тревоги: Аварийные фиксы

  1. Временное снижение температуры: Установи 0.1-0.2 для критических запросов
  2. Ручное задание релевантных источников: Временно захардкодь маппинг ключевых запросов к документам
  3. Регенерация всех эмбеддингов с нуля: Да, это долго и больно, но часто это единственный способ

Штука, которая реально спасла мне проект: я создал второй "теневой" индекс с другой моделью эмбеддингов и делал фоллбэк, если основной выдавал низкое confidence score. Да, это жрало в два раза больше ресурсов, но лучше так, чем объяснять клиенту, почему его финансовый помощник рассказывает про кроликов.

В этом дерьме важно понимать: технические проблемы фиксятся техническими решениями, но доверие клиента восстанавливать гораздо сложнее. Лучше потратить лишний день на диагностику, чем потерять проект из-за спешки.