Семантический поиск по 5 000+ статьям законодательства: embeddings, chunking и Qdrant
Ключевые слова находят то, что вы уже знаете. Семантический поиск находит то, что вам нужно. Мы разбили 12 украинских кодексов на 5 191 статью, векторизировали каждую через VoyageAI embeddings, и теперь запрос «ответственность за некачественный ремонт» находит статьи, которые не содержат ни одного из этих слов.
Семантический поиск по 5 000+ статьям законодательства
Ключевые слова находят то, что вы уже знаете. Семантический поиск находит то, что вам нужно.
Проблема с ключевыми словами
Юрист ищет «ответственность за некачественный ремонт квартиры». Классический поиск ищет эти слова. Но статья 858 ГК говорит о «недостатках работы» и «требованиях заказчика к подрядчику». Ни одного совпадения ключевых слов — но это именно та статья.
Семантический поиск понимает значение, а не слова.
Как мы это построили
Шаг 1: Секционирование законодательства
12 украинских кодексов — это не 12 документов. Это 5 191 статья, каждая из которых является самостоятельной единицей знания. Наш SemanticSectionizer разбивает кодексы на логические секции:
- Статья — основная единица (90% случаев)
- Часть статьи — когда статья слишком велика (>2000 токенов)
- Глава/Раздел — для контекста при поиске
Каждая секция сохраняется с метаданными: кодекс, номер статьи, название, иерархический путь (Книга → Раздел → Глава → Статья).
Шаг 2: Векторизация
Каждая секция проходит через VoyageAI voyage-3.5:
- Вход: текст статьи + название + контекстный путь
- Выход: вектор размером 1024
- Хранение: Qdrant с метаданными для фильтрации
Шаг 3: Поиск
Запрос пользователя → embedding → cosine similarity в Qdrant → топ-N результатов с порогом релевантности > 0.75.
Фильтрация по метаданным — юрист может сузить до конкретного кодекса, главы или типа нормы.
Реальные примеры
| Запрос | Ключевой поиск найдёт | Семантический поиск найдёт |
|---|---|---|
| «ответственность за некачественный ремонт» | Ничего | Ст. 858 ГК (недостатки работы подрядчика) |
| «когда можно не платить алименты» | Ничего | Ст. 188, 190, 196 СК (освобождение от уплаты) |
| «защита от незаконного увольнения» | Ст. со словом «увольнение» | + Ст. 235 КЗоТ (восстановление на работе), Ст. 237-1 (возмещение) |
Кеш и актуальность
- Тексты загружаются с официального API Верховной Рады
- TTL кеша: 30 дней
- При изменении статьи — автоматическое переиндексирование
- 5 191 статья × 1024 dimensions = ~21MB в Qdrant
Семантический поиск не заменяет точный — он дополняет. Вместе они дают полную картину.