Команда Gless AI заняла 2-е место из 350 на Agentic Legal RAG Challenge 2026 и выиграла 8 000 $. Задача: система отвечает на 900 вопросов по корпусу из 300 юридических PDF — судебные решения, законы, регламенты DIFC — и для каждого ответа даёт цитату с точностью до страницы. Наш итог: 76.7 балла, медианная задержка 1.97 секунды, до первого места не хватило 1.2 балла — вот лидерборд.
Ниже — что сработало, а в конце список того, что мы попробовали и выкинули. Он, честно говоря, полезнее.
Почему скоринг решает архитектуру
Формула оценки перемножала три вещи: правильность ответа, качество grounding (та самая цитата до страницы) и задержку. Перемножала, а не складывала — слабый grounding убивает результат, какими бы хорошими ни были ответы. Множитель за скорость: 1.05× при ответе быстрее секунды и 0.85× — медленнее пяти. Поэтому всё, что добавляло сотни миллисекунд без прироста качества, шло под нож.
Индексация
- Парсинг PDF. Сравнили три парсера: OpenDataLoader обошёл и Docling, и PyMuPDF. Docling придумывал ложную иерархию и тратил токены на отступы таблиц, PyMuPDF терял структуру. Картинки прогоняли через OCR на Gemini 2.5 Flash.
- Метаданные — прямо в текст эмбеддинга. Из каждого документа извлекали структурированные метаданные (ID дела, название, номер закона) и приклеивали их в начало текста перед эмбеддингом, а не прятали в payload базы. Семантический поиск сам начинает находить нужное дело — без фильтров и логики маршрутизации.
- Эмбеддинги. Семейство Voyage-4 в асимметричном режиме: индексируем тяжёлой voyage-4-large (2048 измерений), запрашиваем лёгкой voyage-4. Хранили в Qdrant.
Обработка запроса
- Никакого query rewriting, HyDE и роутинга. Тесты показали: они добавляют 500–800 мс задержки и не улучшают retrieval на юридических вопросах.
- Регулярки вместо ИИ там, где можно. 63 % вопросов финала ссылались на конкретный ID дела. Если ID найден регуляркой, поиск шёл параллельно: отфильтрованный по каждому делу (топ-15) плюс широкий без фильтра (топ-30) — так оба дела гарантированно попадали в контекст.
- Реранкер — отдельно по каждому пулу до слияния.
Генерация
GPT-5.4 со structured output без reasoning-режима. Главный трюк — schema-guided reasoning: в схеме ответа первым идёт поле «рассуждение», потом сам ответ, потом цитаты. Модель вынуждена сначала проанализировать, а уже потом коммититься к ответу. Плюс экономия токенов: длинные ID документов заменяли короткими алиасами D1, D2 перед промптом.
Что попробовали и выкинули
- Гибрид с BM25 — без улучшений: Voyage-4 уже ловит лексические сигналы.
- Декомпозиция и переписывание запросов — не сдвинули счёт на прогревочных раундах.
- HyDE — пробел, который он закрывает, уже закрыла инъекция метаданных.
- voyage-context-3 — качество поиска упало: контекстное «размазывание» сделало страницы одного документа слишком похожими друг на друга.
- Gemini 3 Pro — медленнее и хуже GPT-5.4 на этой задаче.
- Golden-датасеты через Claude Code — на финале «золотые» ответы оказались хуже того, что выдавал наш собственный пайплайн.
Выводы
Хорошо настроенный RAG-пайплайн всё ещё бьёт агентов на чётко поставленных retrieval-задачах. И второе, важнее: хороший RAG — это не только правильный ответ, но и проверяемый ответ. Цитата до страницы — это то, что отличает систему, которой юрист может доверять, от красивой демки. Про то, почему проверяемость сейчас главное узкое место, я писал в «Кризисе верификации».
Полная версия разбора на английском — в статье на LinkedIn.
← Все статьи