Найти нужный договор в архиве можно тремя способами, и выбирают их не по бюджету, а по классу запросов. Атрибутивный поиск по реестру отвечает на «покажи договор с ООО такое-то от марта 2024 года» — это фильтр по полям карточки. Полнотекстовый индекс отвечает на «где встречается слово «эксклюзив»» — это поиск по распознанному тексту. Векторный поиск отвечает на «в каких договорах мы отвечаем за просрочку контрагента» — это поиск по смыслу, а не по словам. Каждый следующий дороже предыдущего в разы и не отменяет его.

У всех трёх одно общее предусловие, которое обычно всплывает уже после подписания договора с подрядчиком: архив должен быть распознан. Пока договоры лежат сканами без текстового слоя, искать не по чему — ни словами, ни смыслом. Для архива на 5 000 документов подготовка стоит 137 000 ₽ и занимает 2–3 недели, для 50 000 — 750 000 ₽ и 6–10 недель. Это разовые деньги, но они предшествуют любому из трёх способов.

И третье, что стоит принять до начала проекта. Поиск не отвечает на вопрос «есть у нас риск или нет». Он находит места в документах и показывает их с цитатой и номером пункта; решение о том, что означает найденное, остаётся юристу. Ниже — устройство каждого из трёх способов, класс запросов, на котором каждый бесполезен, цена вопроса в рублях и требования, без которых поиск превращается в дорогую игрушку.

Сколько поиск стоит сейчас, до всякой автоматизации

Прежде чем выбирать способ, полезно замерить текущий. Методика простая: месяц записывать каждый запрос к архиву — кто искал, что искал, сколько минут потратил. Для модельной компании из 500 договоров в год и архива на 5 000 документов замер за месяц дал 40 обращений и вот такую разбивку по классам. Ставка юриста — 1 100 ₽/час; методику расчёта стоимости часа мы разбирали в материале о цене ручной работы.

Труд на поиск по архиву, замер за месяц
25 атрибутивных запросов («договор с контрагентом X от марта») × 9 минут225 минут
10 текстовых запросов («где встречается формулировка про эксклюзив») × 34 минуты340 минут
5 смысловых запросов («во всех ли договорах есть право отказа») × 200 минут1 000 минут
Итого 1 565 минут = 26,1 часа по ставке юриста 1 100 ₽/час28 700 ₽
Итого28 700 ₽ в месяц, 344 400 ₽ в год — и это только те запросы, которые вообще задали

Последняя оговорка важнее самой суммы. Пять смысловых запросов в месяц — это не потребность компании, а то, что она может себе позволить. Вопрос «во всех ли договорах поставки за два года у нас есть право на односторонний отказ» стоит трёх с половиной часов юриста, поэтому его задают раз в квартал, когда уже что-то случилось. Автоматизация поиска меняет не столько цену ответа, сколько список вопросов, которые в компании имеет смысл задавать.

Три способа: что находит каждый и что пропускает

  1. 1
    Атрибутивный поиск по реестру

    Фильтр по полям карточки: контрагент, ИНН, тип договора, дата, сумма, срок действия, ответственный. Отвечает точно и мгновенно на любой запрос вида «покажи все действующие договоры поставки с суммой свыше 3 000 000 ₽». Не находит ничего, чего нет в полях: если поля «право на односторонний отказ» в карточке нет, такого запроса не существует. Сам поиск стоит 90 000–160 000 ₽ и делается за 2–3 недели, но требует заполненного реестра — а это отдельный проект: либо извлечение условий из договоров за 380 000 ₽, либо ручное заполнение 5 000 карточек по 6 минут, то есть 500 часов помощника и 300 000 ₽.

  2. 2
    Полнотекстовый индекс по распознанному тексту

    Классический поиск по словам с морфологией: собирается на PostgreSQL или на поисковом движке поверх уже распознанного архива, стоит 90 000–180 000 ₽ и запускается за 1–2 недели. Отлично закрывает текстовые запросы: найти конкретную формулировку, номер, фамилию подписанта, редкий термин. Ломается там, где искомое понятие в договорах называется разными словами, и там, где нужно отсутствие условия, а не его наличие.

  3. 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 ₽/мес
сравнениеpoisk-po-arhivu-dogovorov--01
Три колонки способов поиска: цена, предусловие и класс запросов, который каждый закрывает

Сравнение в три колонки с заголовками «Атрибутивный — 90 000–160 000 ₽», «Полнотекстовый — 90 000–180 000 ₽», «Векторный — 400 000–700 000 ₽». В каждой колонке три строки: «Отвечает на», «Пропускает», «Требует до старта». В первой колонке в строке «Требует» подписано «реестр: 380 000 ₽», во второй и третьей — «распознанный архив: 137 000 ₽». Под колонками общая полоса-подпись: «Общее предусловие для всех трёх». Чертёжный стиль, подписи по-русски.

Способы не заменяют друг друга — рабочий контур обычно состоит из двух или трёх
Что это значитВекторный поиск

Способ искать по смыслу, а не по совпадению слов. Каждый фрагмент документа заранее переводится в набор чисел, отражающий его содержание; запрос переводится тем же способом, и система возвращает фрагменты, оказавшиеся в этом числовом пространстве рядом. Поэтому запрос «мы отвечаем за просрочку поставщика» находит пункт, где написано «Покупатель возмещает убытки, вызванные несвоевременной выборкой товара», — общих слов у них почти нет.

Запросы, на которых полнотекстовый поиск ломается

Разница между способами становится осязаемой на конкретных вопросах. Мы прогнали три типовых запроса юриста по архиву на 5 000 договоров — по полнотекстовому индексу и по векторному контуру. Результат ниже, и первый случай самый показательный.

  1. 1«Договоры, где мы отвечаем за просрочку поставщика». Полнотекстовый поиск по слову «просрочка» вернул 4 200 документов из 5 000 — слово встречается почти в каждом договоре, чаще всего в стандартном пункте про пени. Прочитать их юрист не может: 4 200 документов по 4 минуты — это 280 часов. Векторный поиск вернул 34 кандидата, юрист подтвердил 11 и отбросил 23, потратив 2,3 часа и 2 500 ₽. Это единственный класс запросов, ради которого вообще имеет смысл платить за векторный контур.
  2. 2«Все допсоглашения к рамочному договору от 2023 года». Здесь бесполезны оба. Это не поиск по тексту и не поиск по смыслу, а обход связей между документами: у допсоглашения должна быть ссылка на родительский договор. Если этой связи нет в реестре, задача не решается никаким поиском — только сплошным просмотром. Разметка связей делается один раз на этапе подготовки архива и стоит примерно 18 000 ₽ на 5 000 документов.
  3. 3«Договоры без права на односторонний отказ». Запрос на отсутствие условия. Векторный поиск ищет похожее и по построению не умеет отвечать «здесь этого нет»: он вернёт документы, где про отказ что-то написано, и промолчит про остальные 4 800. Такой запрос закрывается только полем «есть / нет» в реестре, то есть снова извлечением условий, а не поиском.
графикpoisk-po-arhivu-dogovorov--02
Две воронки на запрос про ответственность за просрочку: 5000 → 4200 → 11 и 5000 → 34 → 11

Две воронки рядом, обе начинаются с блока «Архив — 5 000 договоров». Левая подписана «Полнотекстовый поиск по слову «просрочка»»: 5 000 → 4 200 найдено → 11 релевантных, под ней красная подпись «280 часов чтения». Правая подписана «Векторный поиск по смыслу»: 5 000 → 34 кандидата → 11 подтверждено, под ней подпись «2,3 часа, 2 500 ₽». Внизу общая строка: «Оба нашли одни и те же 11 договоров. Разница — в объёме чтения». Чертёжный стиль, подписи по-русски.

Полнотекстовый поиск не ошибается — он отвечает на другой вопрос
Полнота 90 % — это не «почти всё»

Проверка выглядит так: юрист вручную размечает 200 случайных договоров, отмечая релевантные запросу. В нашем замере таких оказалось 20, система показала 18. Полнота — 90 %, то есть один релевантный документ из десяти в ответ не попадает. Для подборки материала это приемлемо, для вывода «таких договоров у нас нет» — нет. Отсюда правило формулировок в отчёте: система выдаёт «найдено 11 договоров», а не «в компании 11 таких договоров».

Предусловие: во что обходится подготовка архива

Эта строка сметы почти всегда занижена в коммерческих предложениях, потому что она скучная и её невозможно назвать искусственным интеллектом. Между тем именно она определяет, запустится проект через месяц или через квартал. Ниже — разовая подготовка архива на 5 000 договоров: средний договор считаем в 12 страниц, распознавание страницы — 0,60 ₽, помощник — 600 ₽/час.

Подготовка архива на 5 000 договоров к поиску
Выгрузка из файловых папок, почты и ЭДО, снятие дублей: 40 часов × 600 ₽/час24 000 ₽
Распознавание 60 000 страниц × 0,60 ₽36 000 ₽
Пересъёмка 8 % нечитаемых документов: 400 шт. × 6 минут × 600 ₽/час24 000 ₽
Разметка связей «допсоглашение → основной договор»: 30 часов × 600 ₽/час18 000 ₽
Загрузка в индекс и приёмочная проверка на выборке из 100 документов35 000 ₽
Итого137 000 ₽ разово, 2–3 недели — до того, как заработает любой из трёх способов
Статья подготовкиАрхив 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 % — оптимистичная оценка для архива, который вели аккуратно. Если часть договоров существует только на бумаге или в виде фотографий с телефона, эта строка растёт быстрее всех остальных: качество входа влияет на результат сильнее, чем выбор системы распознавания. Мы подробно разбирали эту зависимость в материале про реальную точность распознавания — там же приведены доли ручных правок по типам исходников.

Ссылка на источник: почему ответ без пункта не считается

Требование выглядит формальным, а на самом деле определяет экономику всего проекта. Юрист не может опереться на утверждение системы «в договоре с этим контрагентом установлена ответственность за просрочку». Он обязан посмотреть сам, потому что отвечает за вывод не система. Если ответ не содержит документа, номера пункта и точной цитаты, юрист откроет договор и прочитает его целиком — то есть сделает ровно то, ради избавления от чего покупался поиск.

Отсюда формат ответа, который стоит закладывать в техническое задание и в приёмку. Каждое утверждение сопровождается тройкой: имя документа, номер пункта, цитата в пределах двух-трёх предложений. Утверждений без источника в ответе быть не должно вообще — если система не нашла подтверждения, она пишет «не найдено», а не формулирует правдоподобное предложение. Это тот же принцип, на котором строится проверка договора с участием юриста: машина отдаёт места и формулировки, человек делает вывод.

разбор экранаpoisk-po-arhivu-dogovorov--03
Карточка ответа поиска: краткая формулировка, номер пункта, цитата и кнопка открытия документа

Нарисованный абстрактный экран результата поиска. Сверху строка запроса «где мы отвечаем за просрочку поставщика». Ниже список из трёх карточек, каждая содержит четыре зоны: название документа, номер пункта («п. 5.3»), цитату в рамке и кнопку «Открыть документ». Справа от списка узкая колонка «Найдено 11 из 34 кандидатов» и приписка «полнота выборки 90 %». Внизу зачёркнутый пример карточки без цитаты с подписью «так — нельзя». Чертёжный стиль, подписи по-русски.

Ответ без номера пункта и цитаты юрист всё равно перепроверит — и экономия исчезнет

Права доступа: поиск не должен становиться каналом утечки

Архив договоров — не общая папка. Кадровые соглашения, договоры с ключевыми клиентами, условия с отдельными поставщиками видны не всем, и поисковая система обязана это уважать. Ошибка здесь стоит дороже любой другой в проекте, потому что обнаруживается не сразу: формально ничего не сломалось, просто менеджер по закупкам получил в ответе цитату из документа, к которому у него нет доступа.

  • Права проверяются на этапе отбора, а не показа. Фильтр, наложенный на уже собранный ответ, не работает: языковая модель успела прочитать закрытые фрагменты и пересказать их своими словами. Отбор кандидатов должен идти сразу с условием доступа.
  • У каждого фрагмента в векторном хранилище — метка доступа. Документ режется на части, и права надо переносить на каждую часть. Индекс без меток придётся перестраивать целиком, а это повторные деньги за эмбеддинги.
  • Права берутся из одного источника. Если в учётной системе одни группы, в файловом хранилище другие, а в поиске третьи — расхождение появится в первый же месяц. Общий подход описан в материале про принцип минимальных прав доступа.
  • Каждый запрос логируется. Кто искал, что искал, какие документы попали в ответ. Без журнала невозможно ни расследовать инцидент, ни доказать, что его не было.
  • «Ничего не найдено» вместо «доступ запрещён». Сообщение о запрете само по себе раскрывает факт существования документа. Для чувствительных категорий это уже утечка.
схема процессаpoisk-po-arhivu-dogovorov--04
Две схемы фильтрации прав: фильтр до отбора кандидатов и ошибочный фильтр после сборки ответа

Две горизонтальные схемы одна под другой. Верхняя подписана «Правильно»: блоки «Запрос» → «Отбор кандидатов с фильтром прав» → «Сборка ответа» → «Показ». Нижняя подписана «Ошибка»: блоки «Запрос» → «Отбор кандидатов» → «Сборка ответа» → «Фильтр прав» → «Показ», причём между «Сборкой ответа» и «Фильтром» стоит перечёркнутый значок с подписью «модель уже прочитала закрытое». Справа от обеих схем колонка «Журнал запросов: кто, что, что получил». Чертёжный стиль, подписи по-русски.

Фильтр после сборки ответа не защищает: модель уже прочитала закрытые фрагменты

Как выбирают: четыре признака

Решение принимается по структуре запросов, а не по размеру компании. Признаки ниже проверяются тем же месячным замером, с которого начинается статья — других данных для выбора не требуется.

Что видно в замереЧто строитьПорядок бюджета
Больше половины запросов — «найди документ с контрагентом 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 тысяч рублей труда. Аккуратные папки, единый принцип именования файлов и таблица с реквизитами закрывают вопрос на годы вперёд и стоят ноль.
  • Все запросы атрибутивные. Если в замере нет ни одного смыслового вопроса, векторный контур покупать не за чем — он будет простаивать. Реестр с фильтрами обойдётся втрое дешевле и даст точный ответ вместо вероятного.
  • Нужны договоры, в которых условия нет. Поиск в принципе не отвечает на вопрос об отсутствии. Это задача реестра с явными полями, и решать её надо извлечением условий, а параллельно — генерацией новых договоров из шаблона, чтобы поля были известны в момент создания документа.
  • Архив на бумаге и в плохом состоянии. Сначала оцифровка как отдельный проект со своим бюджетом и сроком, потом поиск. Совмещённая смета обычно заканчивается тем, что обе задачи сделаны наполовину: индекс построен по документам, половина которых распозналась с ошибками.

И общее правило, ради которого стоит держать все три способа в одной картине. Механическая часть работы с архивом — найти документ, сузить выборку, показать нужный пункт и цитату — автоматизируется хорошо и стоит понятных денег. Профессиональное суждение о том, опасно ли найденное условие и что с ним делать, не автоматизируется вообще, и никакой поиск его не заменяет. Мы инженеры и строим первую часть; вторую делает ваш юрист, и любое предложение, которое обещает обратное, стоит читать внимательнее обычного.