LLM API и интеграция
Как подготовить данные для нейросети
Данные готовы, когда содержание лежит текстом, а не картинкой; один факт записан в одном месте, а не в трёх версиях; редакция актуальная, а не архивная; содержание отделено от оформления. Четыре требования — и примерно половина находок при их выполнении оказывается не про модель, а про бардак в учёте. Плохой ответ почти всегда объясняется входом, а не выбором позиции из каталога.
Дальше — разбор каждого из четырёх требований, отдельная таблица по сканам, таблицам и документам, свёрстанным в картинках, и раздел о том, почему эта работа окупается вне зависимости от судьбы проекта. В каталоге сейчас 45 текстовых позиций с рублёвой ставкой, и ни одна из них не читает мысли: разница между хорошим и плохим ответом чаще лежит на входе.
Почему дело обычно во входе, а не в модели
Первое, что стоит проверить при плохих ответах, — что именно ушло в запрос. Не что вы собирались отправить, а какая строка реально сформировалась и попала в тело запроса.
Типичная картина: в коде стоит извлечение текста из PDF, часть файлов — сканы, извлечение возвращает по ним пустую строку, и модель отвечает на пустой документ. Ответ получается уверенный и неправильный, потому что модель не сообщает «мне ничего не дали».
Вторая типичная картина: данных дали много, но среди них лежат три редакции одного документа. Модель процитирует ту, которая попалась, и формально будет права.
Смена позиции в такой ситуации меняет формулировки, но не результат. Прежде чем сравнивать модели, стоит убедиться, что они сравниваются на одинаковом и осмысленном входе.
Что значит «текст, а не скан»
Данные считаются текстовыми, если содержание можно выделить и скопировать, а не только увидеть. Это проверяется за пять секунд: откройте файл и попробуйте выделить абзац мышью.
Скан, фотография документа, схема с подписями и слайд, где текст лежит внутри картинки, — это пиксели. Модель без картиночного входа получит по ним пустоту, а с картиночным входом будет тратить токены на распознавание в каждом запросе.
Отдельный неприятный случай — PDF, который выглядит текстовым, но собран из двух колонок. Извлечение выдаёт строки вперемешку: первая строка левой колонки, первая строка правой, вторая левой. Читается это как поток сознания, и модель честно отвечает по нему. Механика извлечения подробно разобрана в статье как обработать PDF через API.
Что делать со сканами, таблицами и картинками
Ниже — разбор по типам входа. Таблица работает отдельно от статьи: по ней можно пройти со своей папкой документов.
| Что на входе | В чём проблема | Что делать |
|---|---|---|
| Скан или фото документа | в файле нет текста, только пиксели | распознать в текст отдельным шагом, результат вычитать на выборке |
| PDF в две колонки | извлечение перемешивает строки соседних колонок | извлекать по колонкам или пересобрать в один поток до отправки |
| Таблица с объединёнными ячейками | теряется, к какой строке относится значение | развернуть в плоский список, продублировав значение объединённой ячейки |
| Презентация с текстом внутри картинок | извлечение возвращает пустоту | вынести текст отдельно или распознать слайды как изображения |
| Сноски, колонтитулы, штампы | повторяющийся мусор попадает в каждый кусок | вырезать до отправки |
| Пять версий одного регламента в папке | модель цитирует ту, что нашла первой | оставить одну редакцию, остальные убрать из рабочей папки |
Распознавание картинки стоит держать отдельным шагом, а не смешивать с основной задачей. Тогда при ошибке видно, где она возникла: на чтении или на рассуждении. Какие позиции принимают картинку на вход и с каким статусом — в статье нейросеть распознаёт текст с фото.
Почему один факт должен лежать в одном месте
Если один и тот же факт записан в трёх местах по-разному, правильного ответа не существует — существует три ответа, и модель выберет один.
Это самое частое и самое неудобное открытие при подготовке данных. Срок поставки в договоре, в CRM и в письме менеджера отличается не потому, что кто-то соврал, а потому что обновляли не везде.
Правило простое: для каждой сущности назначается один источник истины, остальные копии либо удаляются из выборки, либо помечаются как справочные и в запрос не попадают. Договориться об этом должен предметный специалист, а не разработчик.
Как понять, какая редакция актуальная
Актуальной считается та редакция, у которой есть дата и подтверждение, что новее нет. Дата в имени файла таким подтверждением не является: файлы переименовывают, копируют и кладут в архив под старым именем.
Минимальный рабочий вариант: одна папка «действующее», одна «архив», правило, что в запрос уходит только первая. Это звучит примитивно, но закрывает больше ошибок, чем любая настройка промпта.
Если документы обновляются часто, вопрос переходит в область регулярной перезагрузки базы — это уже другая задача, разобранная в материале поиск по своей базе.
Зачем отделять содержание от оформления
Модель тратит внимание и токены на всё, что получила, включая разметку, номера страниц и подписи «конфиденциально» на каждом листе.
Отделить содержание — значит убрать из входа то, что не несёт смысла для задачи: повторяющиеся шапки, служебные пометки, HTML-обвязку, пустые ячейки, знаки форматирования. Полезный побочный эффект — счёт становится меньше, потому что токенов уходит меньше. Как считается объём входа, разобрано в статье как считать токены.
Обратное тоже верно: структуру, которая несёт смысл, убирать нельзя. Заголовок раздела, номер пункта договора и подпись к таблице — это содержание, а не оформление.
Сколько стоит проверить, что данные готовы
Проверить готовность данных можно за вечер и почти бесплатно: возьмите 30 реальных записей, прогоните их через дешёвую позицию и сравните с эталоном. В KeyDealer доступ к 45 текстовым позициям идёт по одному ключу с оплатой рублёвой картой, а пять текстовых позиций после первого пополнения не тарифицируются вовсе.
Для такой проверки подходит deepseek-v4-flash со ставкой 1 ₽ за миллион токенов или deepseek-v4-pro за 2 ₽ — одинаково на вход и на выход. Тридцать записей по паре тысяч токенов каждая обойдутся в копейки, а покажут ровно то, что нужно: где вход ломается.
Скидки за кэш повторяющегося префикса мы не обещаем — у текстовых позиций каталога статус кэша unsupported, и в расчёте его учитывать не стоит.
Почему эта работа полезна сама по себе
Примерно половина находок при подготовке данных оказывается не про модель. Выясняется, что два отдела ведут один справочник в разных таблицах, что часть договоров существует только в сканах, что поле «статус» заполняется свободным текстом и в нём восемь написаний одного значения.
Это не побочный эффект, а основная ценность первых двух недель. Даже если проект с моделью закроется, порядок в источнике истины останется, и его не придётся наводить заново.
Практический совет: ведите список находок отдельным файлом и раз в неделю показывайте его руководителю. Он читается как отчёт о состоянии учёта, и это единственный документ, который защищает пилот лучше любых метрик качества.
Чем это отличается от поиска по базе
Подготовка данных — это про то, что лежит в источнике. Поиск по базе — про то, как нужный кусок находится и подставляется в запрос. Второе без первого работает плохо: поиск честно найдёт все три редакции регламента, если все три лежат в базе.
Разбор самой цепочки поиска, разбиения на куски и переранжирования — в статьях поиск по своей базе и эмбеддинги и rerank для поиска. Здесь эта тема намеренно не раскрывается.
Третий соседний вопрос — дообучение весов. Он возникает почти всегда и почти всегда оказывается не нужен; три пути разобраны в материале обучить нейросеть на своих данных.
Как проверить, что данные готовы
Короткий прогон на выборке: 30–50 случайных записей, для каждой заранее известен правильный ответ, результат сравнивается вручную.
Выборка должна быть случайной. Если взять аккуратные документы, проверка покажет качество, которого в реальной работе не будет, и разочарование придёт на третьей неделе вместо первого дня.
Что смотреть в первую очередь: не долю правильных ответов, а причины неправильных. Если больше половины ошибок объясняется входом — возвращайтесь к четырём требованиям, менять позицию каталога рано. Как выбрать задачу, на которой такая проверка вообще имеет смысл, разобрано в статье какие задачи отдать нейросети первыми.
Что не отправлять вовсе
Персональные данные, коммерческую тайну и чужие документы стоит рассматривать отдельно от вопроса качества. Всё, что попало в запрос, ушло наружу, и это не отменяется настройками.
Практический минимум: убрать из выборки поля, которые не нужны для задачи. Фамилия, телефон и номер паспорта редко влияют на классификацию обращения, а их отсутствие снимает половину вопросов. Подробнее — в статье нейросети и персональные данные.
Чего мы не утверждаем
Мы не утверждаем, что чистые данные гарантируют хороший ответ. Они убирают главный источник ошибок, но не заменяют ни внятной инструкции, ни проверки на выборке.
Мы не утверждаем, что распознавание сканов даёт текст без потерь. На плохих сканах, рукописных пометках и печатях ошибки остаются, и вычитка на выборке обязательна.
Мы не даём рекомендаций по конкретным инструментам извлечения текста. Они меняются чаще, чем выходит статья, и проверять их поведение нужно на своих файлах, а не по описанию.
Что нужно, чтобы попробовать
Ключ заводится за минуту на keydealer.ru/login — почта и пароль, без документов и без зарубежной карты.
Первый прогон на выборке делается до любой интеграции, прямо из терминала; как выглядит самый первый запрос — в статье первый запрос к API нейросети.
Приветственный бонус даёт доступ к платным позициям сразу, а пять текстовых позиций после первого пополнения не тарифицируются. Проверка тридцати записей укладывается в один вечер и стоит меньше чашки кофе.
Что держать в голове
Вход важнее выбора позиции. Пока в запрос уходит скан, устаревшая редакция или перемешанные колонки, разница между дешёвой и дорогой моделью почти не видна.
Подготовка данных — не разовая операция. Документы обновляются, справочники расходятся, сканы появляются снова, поэтому правило «одна папка действующего» должно быть чьей-то постоянной обязанностью, а не героическим усилием перед запуском.
Находки про учёт ценнее находок про модель. Как мы проверяем факты и почему у каждой цифры стоит дата — на странице о проекте. Завести ключ и проверить свои данные: keydealer.ru/login.
Частые вопросы
Что значит «данные готовы для нейросети»?
Четыре условия: содержание лежит текстом, а не картинкой; один факт записан в одном месте, а не в трёх версиях; редакция актуальная, а не архивная; содержание отделено от оформления. Если хоть одно не выполнено, модель будет ошибаться независимо от того, какую позицию каталога вы взяли.
Почему модель отвечает плохо, если сама модель хорошая?
Чаще всего потому, что в запрос уходит не то, что вы думаете: скан вместо текста, устаревшая редакция документа, перемешанные колонки или таблица, потерявшая смысл при переводе в строку. Модель отвечает по тому, что получила, и не умеет догадаться, что вы имели в виду другой файл.
Что делать со сканами и фотографиями документов?
Распознавать в текст отдельным шагом до основной задачи и вычитывать результат глазами хотя бы на выборке. Пятнадцать позиций каталога принимают картинку на вход с проверенным статусом, но распознавание и рассуждение лучше разносить по разным запросам: так видно, на каком шаге появилась ошибка.
Как быть с таблицами, где объединены ячейки?
Разворачивать в плоский список строк, продублировав значение объединённой ячейки в каждую строку. При переводе такой таблицы в текст теряется, к чему относится число, и модель приписывает его соседней строке. Это не дефект модели, а потеря структуры на этапе извлечения.
Нужно ли чистить данные, если планируется поиск по базе?
Нужно, и в первую очередь. Поиск по базе находит куски документов, и если в базе лежат три редакции одного регламента, он честно найдёт все три. Разбор цепочки поиска — отдельная тема, но чистка идёт до неё, а не после.
Сколько данных нужно для первой проверки?
Тридцати-пятидесяти реальных записей с известным правильным ответом хватает, чтобы увидеть основные проблемы входа. Выборка должна быть случайной, а не удобной: если взять только аккуратные документы, проверка покажет качество, которого в бою не будет.