Нейросети для логистики: сверка документов заказа решает узкую задачу — свести поля одного заказа из нескольких первичных документов в таблицу, где рядом с каждым значением стоит ID документа и цитата. Ниже полный набор из четырёх учебных документов, копируемый промпт с правилом конфликта внутри одного поля одного заказа, заполненный ручной эталон и проверка изменения D2.
Четыре учебных документа D1–D4
Вход предъявляется целиком, без многоточий. Четыре документа равноприоритетны, время обновления и утверждение изменения не заданы, адреса условны, доставку по ним статья не предлагает.
D1 «Заказ A: мест 2; адрес Тверь, Лесная 7; окно 10:00–12:00».
D2 «Письмо по заказу A: мест 3; адрес Тверь, Лесная 7; окно 10:00–12:00».
D3 «Заказ Б: мест 1; адрес Тверь, Полевая 4; окно 12:00–14:00».
D4 «Заказ В: мест 3; адрес Тверь, Озёрная 9; окно уточним позже».
Заказ A описан дважды: D1 и D2 расходятся по числу мест. Заказ Б описан один раз. Заказ В описан один раз, и его окно задано словами «уточним позже». Эти четыре строки — весь вход. Условные адреса приведены в документах. Данных о маршруте, километраже и приоритетах объезда в наборе нет; промпт запрещает их придумывать.
Сверка документов заказа начинается с фиксации того, что каждый документ равноправен. D1 и D2 описывают один заказ A, поэтому расхождение по местам относится к одному полю одного заказа. D3 и D4 описывают разные заказы, поэтому их окна 12:00–14:00 и «уточним позже» лежат в разных строках таблицы и между собой не конфликтуют.
Полный копируемый промпт
Промпт ниже — наша формулировка под задачу сверки. Он требует цитату на каждое значение, запрещает выбирать правого в конфликте, запрещает додумывать неизвестное и запрещает считать окна разных заказов конфликтом.
Сверь четыре учебных документа ниже. Для каждого заказа верни число мест, адрес и окно доставки; рядом с каждым значением укажи ID документа и точную цитату исходной строки. Если значения одного поля одного заказа расходятся, перечисли оба и статус 'конфликт'; не выбирай, кто прав. Неизвестное окно пометь 'неизвестно'. Окна разных заказов не считай конфликтом: без общего ресурса и времени пути такой вывод невозможен. Не составляй маршрут, километраж, экономию и приоритеты. Верни таблицу заказ|места|адрес|окно|статус|что уточнить. Вход: D1 «Заказ A: мест 2; адрес Тверь, Лесная 7; окно 10:00–12:00». D2 «Письмо по заказу A: мест 3; адрес Тверь, Лесная 7; окно 10:00–12:00». D3 «Заказ Б: мест 1; адрес Тверь, Полевая 4; окно 12:00–14:00». D4 «Заказ В: мест 3; адрес Тверь, Озёрная 9; окно уточним позже».
Что менять под себя: строки D1–D4 заменяются на ваши документы, а список полей места|адрес|окно — на поля вашего заказа, например мест|адрес|окно|вес|тип кузова. Правило конфликта остаётся неизменным: расхождение признаётся только внутри одного поля одного заказа. Правило неизвестного тоже остаётся: незаполненное поле получает статус «неизвестно». Подстановка предполагаемого значения запрещена.
Ручной эталон с цитатой на каждое поле
Эталон заполняется вручную до обращения к модели. Он нужен, чтобы было с чем сравнить ответ. Каждое значение подкреплено названным документом и цитатой.
| Заказ | Места | Адрес | Окно | Статус | Что уточнить |
|---|---|---|---|---|---|
| A | 2 (D1 «мест 2») и 3 (D2 «мест 3») | Тверь, Лесная 7 (D1/D2) | 10:00–12:00 (D1/D2) | конфликт | «Подтвердите число мест по заказу A и действующий документ» |
| Б | 1 (D3) | Тверь, Полевая 4 (D3) | 12:00–14:00 (D3) | согласовано | — |
| В | 3 (D4) | Тверь, Озёрная 9 (D4) | неизвестно (D4 «окно уточним позже») | неизвестно | «Уточните окно доставки заказа В» |
В строке A оба значения мест сохранены с источниками. В строке Б все три поля подтверждены одним документом D3. В строке В окно помечено как неизвестное со ссылкой на формулировку D4. Столбец «что уточнить» превращает результат сверки в конкретное действие: у A это вопрос о действующем документе, у В — вопрос об окне. Поля приоритета и порядка объезда в эталоне отсутствуют, потому что во входе их нет.
Отрицательный случай: «A — 2 места, документ D2»
Ответ «A — 2 места, документ D2» отклоняется. В D2 написано «мест 3», поэтому ссылка на D2 при значении 2 не подтверждается источником. Ошибка здесь двойная: выбрано одно из двух расходящихся значений, и рядом поставлен документ, который это значение не содержит.
Разбор этого случая задаёт планку для всех остальных полей. Значение принимается, когда названный документ действительно содержит эту цитату. Если модель выдаёт число без документа или с документом, где стоит другое число, строка возвращается на доработку. Тот же тест применяется к адресу и окну: у A адрес «Тверь, Лесная 7» подтверждается и D1, и D2, поэтому здесь ссылка на любой из двух документов корректна.
Окна A и Б: почему это не конфликт
Окно A — 10:00–12:00, окно Б — 12:00–14:00. Значения различаются, и это различие не объявляется конфликтом. Конфликт в этой задаче определён узко: расхождение значений одного поля одного заказа. A и Б — разные заказы, поэтому их окна лежат в разных строках и сравниваются между собой только при наличии общего ресурса, времени переезда и маршрута.
Во входе нет ни маршрута, ни времени пути, ни сведений о том, обслуживает ли оба заказа одна машина. Без этих данных вывод о конфликте между окнами A и Б не установлен. Промпт прямо запрещает такой вывод, а эталон фиксирует оба окна как согласованные внутри своих заказов. Проверка ответа здесь простая: если модель пишет «конфликт окон A и Б», строка отклоняется как вышедшая за пределы входа.
Неизвестное окно В: проверка на додумывание
В D4 стоит «окно уточним позже». Эталон помечает окно В как «неизвестно» и ставит в столбец уточнения вопрос об окне доставки. Проверка состоит в том, что в ответе нет придуманного интервала: ни 10:00–12:00, ни 12:00–14:00, ни любого другого времени, которого нет в D4.
Додуманное окно опаснее пропуска, потому что выглядит как готовое значение и уходит в работу без вопроса. Статус «неизвестно» фиксирует отдельный результат сверки и запускает уточнение у заказчика. Число мест 3 и адрес «Тверь, Озёрная 9» у заказа В подтверждены D4 и остаются в таблице. Каждое заполненное поле подтверждено названным документом, а незаполненное честно названо неизвестным.
Проверка изменения D2 и её эффект
Проверка изменения выполняется на одном документе. В D2 значение «мест 3» заменяется на «мест 2», остальные три документа остаются без правок. После замены конфликт по заказу A исчезает: D1 и D2 дают одинаковое число мест 2, и статус строки A переходит из «конфликт» в «согласовано».
| Состояние | Заказ A | Заказ В |
|---|---|---|
| До замены D2 | места 2 (D1) и 3 (D2), статус «конфликт» | окно «неизвестно» |
| После замены D2 на «мест 2» | места 2 (D1/D2), статус «согласовано» | окно «неизвестно» |
Неизвестное окно В сохраняется: правка D2 его не касается. Эта проверка показывает, что сверка реагирует на изменение ровно в том поле, которое изменилось, и не переписывает соседние строки. Если после замены D2 модель продолжает показывать конфликт у A или подставляет окно В, ответ расходится с эталоном.
Место сверки в процессе: контроль входа
Сверка документов заказа — это контроль входа. Читатель получает таблицу полей с источником каждого значения, помечает конфликт и неизвестное и передаёт вопросы дальше. Это предложенный порядок контроля входа. Ответ сервиса в этом разборе не получали; нейросеть не пишет в TMS и не меняет записи о заказе.
Извлечение полей из документов — отдельный слой, и он описан у вендоров. В документации Microsoft Learn для модели инвойсов Document Intelligence описаны OCR, извлечение ключевых полей и товарных строк и структурированный ответ JSON; указана поддержка счетов на 27 языках. В таблице форматов строка Prebuilt отмечена для PDF и изображений JPEG, PNG, BMP, TIFF и HEIF; поддержка файлов Office в этой таблице указана для других моделей. Там же указаны требования к входу: до 2 000 страниц для PDF и TIFF, размер файла 500 МБ для платного уровня S0 и 4 МБ для бесплатного F0, размеры изображения от 50 × 50 до 10 000 × 10 000 пикселей, минимальная высота текста 12 пикселей для изображения 1024 × 768. Эти числа описывают названный продукт и его версии. У нашей учебной сверки таких измеренных показателей нет.
Обзорные материалы по логистике описывают распознавание документов и извлечение данных как отдельные шаги автоматизации. Наш вклад в этой статье — открытый минимальный документный набор D1–D4, ручной эталон с цитатой на каждое поле и проверка изменения D2. Точность и процент экономии здесь не обещаются: набор задаёт, что именно проверять в ответе модели.
Частые вопросы
Как нейросеть сверяет документы заказа?
Ей передают первичные документы и промпт, который требует по каждому полю вернуть значение, ID документа и цитату. Расхождение внутри одного поля одного заказа помечается статусом «конфликт», незаполненное поле — статусом «неизвестно». Результат сравнивают с ручным эталоном.
Что делать, если два документа дают разное число мест по одному заказу?
Оба значения сохраняются с указанием документов, строка получает статус «конфликт». Модель не выбирает, кто прав, а в столбец уточнения попадает вопрос о действующем документе. В нашем примере это заказ A: 2 места в D1 и 3 места в D2.
Считается ли конфликтом разное время доставки у двух заказов?
Нет. Конфликт определён как расхождение значений одного поля одного заказа. Окна A и Б принадлежат разным заказам, и без общего ресурса, времени переезда и маршрута вывод о конфликте между ними не установлен.
Что делать с окном, которое ещё не подтверждено?
Пометить его как «неизвестно» и поставить вопрос об уточнении. В примере так описан заказ В со строкой «окно уточним позже». Придуманный интервал в ответе означает, что строка не прошла проверку.
Заменяет ли такая сверка обновление данных в TMS?
Нет. Это контроль входа: таблица полей с источниками, конфликтами и вопросами. Записи в учётной системе нейросеть не меняет, автообновление TMS не выполняется.
