Найти нужный договор в архиве можно тремя способами, и выбирают их не по бюджету, а по классу запросов. Атрибутивный поиск по реестру отвечает на «покажи договор с ООО такое-то от марта 2024 года» — это фильтр по полям карточки. Полнотекстовый индекс отвечает на «где встречается слово «эксклюзив»» — это поиск по распознанному тексту. Векторный поиск отвечает на «в каких договорах мы отвечаем за просрочку контрагента» — это поиск по смыслу, а не по словам. Каждый следующий дороже предыдущего в разы и не отменяет его.
У всех трёх одно общее предусловие, которое обычно всплывает уже после подписания договора с подрядчиком: архив должен быть распознан. Пока договоры лежат сканами без текстового слоя, искать не по чему — ни словами, ни смыслом. Для архива на 5 000 документов подготовка стоит 137 000 ₽ и занимает 2–3 недели, для 50 000 — 750 000 ₽ и 6–10 недель. Это разовые деньги, но они предшествуют любому из трёх способов.
И третье, что стоит принять до начала проекта. Поиск не отвечает на вопрос «есть у нас риск или нет». Он находит места в документах и показывает их с цитатой и номером пункта; решение о том, что означает найденное, остаётся юристу. Ниже — устройство каждого из трёх способов, класс запросов, на котором каждый бесполезен, цена вопроса в рублях и требования, без которых поиск превращается в дорогую игрушку.
Сколько поиск стоит сейчас, до всякой автоматизации
Прежде чем выбирать способ, полезно замерить текущий. Методика простая: месяц записывать каждый запрос к архиву — кто искал, что искал, сколько минут потратил. Для модельной компании из 500 договоров в год и архива на 5 000 документов замер за месяц дал 40 обращений и вот такую разбивку по классам. Ставка юриста — 1 100 ₽/час; методику расчёта стоимости часа мы разбирали в материале о цене ручной работы.
Последняя оговорка важнее самой суммы. Пять смысловых запросов в месяц — это не потребность компании, а то, что она может себе позволить. Вопрос «во всех ли договорах поставки за два года у нас есть право на односторонний отказ» стоит трёх с половиной часов юриста, поэтому его задают раз в квартал, когда уже что-то случилось. Автоматизация поиска меняет не столько цену ответа, сколько список вопросов, которые в компании имеет смысл задавать.
Три способа: что находит каждый и что пропускает
- 1Атрибутивный поиск по реестру
Фильтр по полям карточки: контрагент, ИНН, тип договора, дата, сумма, срок действия, ответственный. Отвечает точно и мгновенно на любой запрос вида «покажи все действующие договоры поставки с суммой свыше 3 000 000 ₽». Не находит ничего, чего нет в полях: если поля «право на односторонний отказ» в карточке нет, такого запроса не существует. Сам поиск стоит 90 000–160 000 ₽ и делается за 2–3 недели, но требует заполненного реестра — а это отдельный проект: либо извлечение условий из договоров за 380 000 ₽, либо ручное заполнение 5 000 карточек по 6 минут, то есть 500 часов помощника и 300 000 ₽.
- 2Полнотекстовый индекс по распознанному тексту
Классический поиск по словам с морфологией: собирается на PostgreSQL или на поисковом движке поверх уже распознанного архива, стоит 90 000–180 000 ₽ и запускается за 1–2 недели. Отлично закрывает текстовые запросы: найти конкретную формулировку, номер, фамилию подписанта, редкий термин. Ломается там, где искомое понятие в договорах называется разными словами, и там, где нужно отсутствие условия, а не его наличие.
- 3Векторный поиск по смыслу с ответом и цитатой
Документы режутся на фрагменты, каждый фрагмент превращается в числовой вектор и кладётся в векторное хранилище — обычно pgvector на своём сервере. Запрос превращается в такой же вектор, и система возвращает фрагменты, близкие по смыслу, а языковая модель собирает из них короткий ответ со ссылками на пункты. Стоит 400 000–700 000 ₽ и занимает 5–8 недель. Механику мы разбирали отдельно в материале про эмбеддинги и векторный поиск.
| Способ | Цена самого поиска | Обязательное предусловие и его цена | Срок |
|---|---|---|---|
| Атрибутивный по реестру | 90 000–160 000 ₽ | Заполненный реестр: 380 000 ₽ на извлечение или 300 000 ₽ ручного ввода | 2–3 недели |
| Полнотекстовый индекс | 90 000–180 000 ₽ | Распознанный архив: 137 000 ₽ на 5 000 документов | 1–2 недели |
| Векторный поиск с цитатой | 400 000–700 000 ₽ | Распознанный архив плюс разметка пунктов и разбиение на фрагменты | 5–8 недель |
| Эксплуатация векторного контура | 8 000–15 000 ₽/мес сервер | Построение индекса на 5 000 договоров — 12 000–25 000 ₽ разово, далее 1 500–3 000 ₽/мес | — |
Сравнение в три колонки с заголовками «Атрибутивный — 90 000–160 000 ₽», «Полнотекстовый — 90 000–180 000 ₽», «Векторный — 400 000–700 000 ₽». В каждой колонке три строки: «Отвечает на», «Пропускает», «Требует до старта». В первой колонке в строке «Требует» подписано «реестр: 380 000 ₽», во второй и третьей — «распознанный архив: 137 000 ₽». Под колонками общая полоса-подпись: «Общее предусловие для всех трёх». Чертёжный стиль, подписи по-русски.
Способ искать по смыслу, а не по совпадению слов. Каждый фрагмент документа заранее переводится в набор чисел, отражающий его содержание; запрос переводится тем же способом, и система возвращает фрагменты, оказавшиеся в этом числовом пространстве рядом. Поэтому запрос «мы отвечаем за просрочку поставщика» находит пункт, где написано «Покупатель возмещает убытки, вызванные несвоевременной выборкой товара», — общих слов у них почти нет.
Запросы, на которых полнотекстовый поиск ломается
Разница между способами становится осязаемой на конкретных вопросах. Мы прогнали три типовых запроса юриста по архиву на 5 000 договоров — по полнотекстовому индексу и по векторному контуру. Результат ниже, и первый случай самый показательный.
- 1«Договоры, где мы отвечаем за просрочку поставщика». Полнотекстовый поиск по слову «просрочка» вернул 4 200 документов из 5 000 — слово встречается почти в каждом договоре, чаще всего в стандартном пункте про пени. Прочитать их юрист не может: 4 200 документов по 4 минуты — это 280 часов. Векторный поиск вернул 34 кандидата, юрист подтвердил 11 и отбросил 23, потратив 2,3 часа и 2 500 ₽. Это единственный класс запросов, ради которого вообще имеет смысл платить за векторный контур.
- 2«Все допсоглашения к рамочному договору от 2023 года». Здесь бесполезны оба. Это не поиск по тексту и не поиск по смыслу, а обход связей между документами: у допсоглашения должна быть ссылка на родительский договор. Если этой связи нет в реестре, задача не решается никаким поиском — только сплошным просмотром. Разметка связей делается один раз на этапе подготовки архива и стоит примерно 18 000 ₽ на 5 000 документов.
- 3«Договоры без права на односторонний отказ». Запрос на отсутствие условия. Векторный поиск ищет похожее и по построению не умеет отвечать «здесь этого нет»: он вернёт документы, где про отказ что-то написано, и промолчит про остальные 4 800. Такой запрос закрывается только полем «есть / нет» в реестре, то есть снова извлечением условий, а не поиском.
Две воронки рядом, обе начинаются с блока «Архив — 5 000 договоров». Левая подписана «Полнотекстовый поиск по слову «просрочка»»: 5 000 → 4 200 найдено → 11 релевантных, под ней красная подпись «280 часов чтения». Правая подписана «Векторный поиск по смыслу»: 5 000 → 34 кандидата → 11 подтверждено, под ней подпись «2,3 часа, 2 500 ₽». Внизу общая строка: «Оба нашли одни и те же 11 договоров. Разница — в объёме чтения». Чертёжный стиль, подписи по-русски.
Проверка выглядит так: юрист вручную размечает 200 случайных договоров, отмечая релевантные запросу. В нашем замере таких оказалось 20, система показала 18. Полнота — 90 %, то есть один релевантный документ из десяти в ответ не попадает. Для подборки материала это приемлемо, для вывода «таких договоров у нас нет» — нет. Отсюда правило формулировок в отчёте: система выдаёт «найдено 11 договоров», а не «в компании 11 таких договоров».
Предусловие: во что обходится подготовка архива
Эта строка сметы почти всегда занижена в коммерческих предложениях, потому что она скучная и её невозможно назвать искусственным интеллектом. Между тем именно она определяет, запустится проект через месяц или через квартал. Ниже — разовая подготовка архива на 5 000 договоров: средний договор считаем в 12 страниц, распознавание страницы — 0,60 ₽, помощник — 600 ₽/час.
| Статья подготовки | Архив 5 000 документов | Архив 50 000 документов |
|---|---|---|
| Выгрузка и снятие дублей | 24 000 ₽ (40 часов) | 96 000 ₽ (160 часов) |
| Распознавание | 36 000 ₽ (60 000 страниц) | 360 000 ₽ (600 000 страниц) |
| Пересъёмка нечитаемых, 8 % | 24 000 ₽ (400 шт., руками) | 84 000 ₽ (48 000 страниц потоком по 1,75 ₽) |
| Разметка связей документов | 18 000 ₽ (30 часов) | 120 000 ₽ (200 часов) |
| Загрузка в индекс и приёмка | 35 000 ₽ | 90 000 ₽ |
| Итого разово | 137 000 ₽ | 750 000 ₽ |
| Срок | 2–3 недели | 6–10 недель |
Доля нечитаемых документов в 8 % — оптимистичная оценка для архива, который вели аккуратно. Если часть договоров существует только на бумаге или в виде фотографий с телефона, эта строка растёт быстрее всех остальных: качество входа влияет на результат сильнее, чем выбор системы распознавания. Мы подробно разбирали эту зависимость в материале про реальную точность распознавания — там же приведены доли ручных правок по типам исходников.
Ссылка на источник: почему ответ без пункта не считается
Требование выглядит формальным, а на самом деле определяет экономику всего проекта. Юрист не может опереться на утверждение системы «в договоре с этим контрагентом установлена ответственность за просрочку». Он обязан посмотреть сам, потому что отвечает за вывод не система. Если ответ не содержит документа, номера пункта и точной цитаты, юрист откроет договор и прочитает его целиком — то есть сделает ровно то, ради избавления от чего покупался поиск.
Отсюда формат ответа, который стоит закладывать в техническое задание и в приёмку. Каждое утверждение сопровождается тройкой: имя документа, номер пункта, цитата в пределах двух-трёх предложений. Утверждений без источника в ответе быть не должно вообще — если система не нашла подтверждения, она пишет «не найдено», а не формулирует правдоподобное предложение. Это тот же принцип, на котором строится проверка договора с участием юриста: машина отдаёт места и формулировки, человек делает вывод.
Нарисованный абстрактный экран результата поиска. Сверху строка запроса «где мы отвечаем за просрочку поставщика». Ниже список из трёх карточек, каждая содержит четыре зоны: название документа, номер пункта («п. 5.3»), цитату в рамке и кнопку «Открыть документ». Справа от списка узкая колонка «Найдено 11 из 34 кандидатов» и приписка «полнота выборки 90 %». Внизу зачёркнутый пример карточки без цитаты с подписью «так — нельзя». Чертёжный стиль, подписи по-русски.
Права доступа: поиск не должен становиться каналом утечки
Архив договоров — не общая папка. Кадровые соглашения, договоры с ключевыми клиентами, условия с отдельными поставщиками видны не всем, и поисковая система обязана это уважать. Ошибка здесь стоит дороже любой другой в проекте, потому что обнаруживается не сразу: формально ничего не сломалось, просто менеджер по закупкам получил в ответе цитату из документа, к которому у него нет доступа.
- Права проверяются на этапе отбора, а не показа. Фильтр, наложенный на уже собранный ответ, не работает: языковая модель успела прочитать закрытые фрагменты и пересказать их своими словами. Отбор кандидатов должен идти сразу с условием доступа.
- У каждого фрагмента в векторном хранилище — метка доступа. Документ режется на части, и права надо переносить на каждую часть. Индекс без меток придётся перестраивать целиком, а это повторные деньги за эмбеддинги.
- Права берутся из одного источника. Если в учётной системе одни группы, в файловом хранилище другие, а в поиске третьи — расхождение появится в первый же месяц. Общий подход описан в материале про принцип минимальных прав доступа.
- Каждый запрос логируется. Кто искал, что искал, какие документы попали в ответ. Без журнала невозможно ни расследовать инцидент, ни доказать, что его не было.
- «Ничего не найдено» вместо «доступ запрещён». Сообщение о запрете само по себе раскрывает факт существования документа. Для чувствительных категорий это уже утечка.
Две горизонтальные схемы одна под другой. Верхняя подписана «Правильно»: блоки «Запрос» → «Отбор кандидатов с фильтром прав» → «Сборка ответа» → «Показ». Нижняя подписана «Ошибка»: блоки «Запрос» → «Отбор кандидатов» → «Сборка ответа» → «Фильтр прав» → «Показ», причём между «Сборкой ответа» и «Фильтром» стоит перечёркнутый значок с подписью «модель уже прочитала закрытое». Справа от обеих схем колонка «Журнал запросов: кто, что, что получил». Чертёжный стиль, подписи по-русски.
Как выбирают: четыре признака
Решение принимается по структуре запросов, а не по размеру компании. Признаки ниже проверяются тем же месячным замером, с которого начинается статья — других данных для выбора не требуется.
| Что видно в замере | Что строить | Порядок бюджета |
|---|---|---|
| Больше половины запросов — «найди документ с контрагентом X» | Реестр и атрибутивные фильтры, полнотекстовый индекс сверху | 180 000–340 000 ₽ плюс подготовка архива |
| Регулярно ищут конкретные формулировки и номера | Полнотекстовый индекс по распознанному архиву | 90 000–180 000 ₽ плюс подготовка архива |
| Есть класс «во всех ли договорах есть условие X» | Не поиск, а поля в реестре: извлечение условий | 380 000–650 000 ₽ |
| Есть класс «где мы отвечаем за…» и архив от 5 000 документов | Векторный поиск с цитатой поверх реестра | 400 000–700 000 ₽ плюс 8 000–15 000 ₽/мес |
На практике зрелый контур почти всегда гибридный: атрибутивный фильтр сужает выборку до сотен документов, векторный поиск работает уже внутри неё, а ответ собирается с цитатами. Такая связка и дешевле в эксплуатации, и точнее: чем меньше документов попадает в векторный отбор, тем выше доля релевантных в ответе. Состав и цену готового контура мы описали на странице решения «Поиск по архиву документов».
Когда поиск по архиву строить не надо
Четыре ситуации, в которых честный ответ — «не сейчас» или «вам нужно другое». Ни одна из них не про бюджет: во всех четырёх деньги были бы потрачены на инструмент, который не решает задачу.
- Архив меньше 1 000 документов и ищут два человека. Замер даст 10–15 обращений в месяц и 4–6 тысяч рублей труда. Аккуратные папки, единый принцип именования файлов и таблица с реквизитами закрывают вопрос на годы вперёд и стоят ноль.
- Все запросы атрибутивные. Если в замере нет ни одного смыслового вопроса, векторный контур покупать не за чем — он будет простаивать. Реестр с фильтрами обойдётся втрое дешевле и даст точный ответ вместо вероятного.
- Нужны договоры, в которых условия нет. Поиск в принципе не отвечает на вопрос об отсутствии. Это задача реестра с явными полями, и решать её надо извлечением условий, а параллельно — генерацией новых договоров из шаблона, чтобы поля были известны в момент создания документа.
- Архив на бумаге и в плохом состоянии. Сначала оцифровка как отдельный проект со своим бюджетом и сроком, потом поиск. Совмещённая смета обычно заканчивается тем, что обе задачи сделаны наполовину: индекс построен по документам, половина которых распозналась с ошибками.
И общее правило, ради которого стоит держать все три способа в одной картине. Механическая часть работы с архивом — найти документ, сузить выборку, показать нужный пункт и цитату — автоматизируется хорошо и стоит понятных денег. Профессиональное суждение о том, опасно ли найденное условие и что с ним делать, не автоматизируется вообще, и никакой поиск его не заменяет. Мы инженеры и строим первую часть; вторую делает ваш юрист, и любое предложение, которое обещает обратное, стоит читать внимательнее обычного.
