ИИ-агент в закупках: прайсы поставщиков, лимиты и сверка приёмки

Закупки — это процесс, в котором цена живёт не в системе, а в переписке. Один поставщик присылает прайс письмом, второй — файлом в мессенджере, третий — фотографией накладной, четвёртый говорит «цена та же, что в прошлый раз». Менеджер держит в голове, у кого дешевле, кто везёт быстрее и кому уже заплатили, а решение принимает между звонками. Пока объём небольшой, это работает. Потом появляется третий поставщик, вторая валюта, скидка «от десяти коробок» — и начинаются потери, которые не видно в отчёте: сравнивают несопоставимые цены, заказывают одну и ту же позицию дважды, принимают товар «на глаз», а через месяц не могут объяснить, откуда в счёте взялась сумма.

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

Почему в закупках ошибка стоит дороже, чем кажется

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

  • Валюта и номинал. Прайс в валюте — это не одно число, а число плюс курс плюс номинал. Официальные курсы ЦБ РФ отдаются XML-файлом, и в срезе на 27.10.2026 часть валют в нём котировалась за 100 единиц — например, японская иена, индийская рупия, казахстанский тенге. Прочитать такую цену как цену за одну единицу — ошибка в сто раз, и она не выглядит абсурдной в таблице.
  • Налог внутри или сверх цены. По формулировке ФНС НДС — косвенный налог, и продавец предъявляет его покупателю дополнительно к цене товара. Значит, в прайсе цена может быть с налогом и без, и два «одинаковых» числа из разных прайсов могут различаться на величину налога.
  • Единица и кратность. «Упаковка 12 шт», «коробка», «метр погонный», «лист 1250×2500» — сравнивать построчно можно только после приведения к одной единице. Это самая частая причина, по которой «дешёвый» поставщик оказывается дорогим.
  • Срок и минимальная партия. Цена без срока поставки и минимальной партии — это половина условия. Позиция за 100 единиц при партии от 500 не куплена, а обсуждена.
  • Тихий прайс. Файл пришёл и лежит. Никто не разобрал, цена в нём уже устарела, а менеджер уверен, что «мы это смотрели».

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

Что должно быть готово до первого запуска

Пять элементов. Их отсутствие — не повод откладывать запуск, а результат диагностики: если чего-то нет, начинать надо с него, а не с промптов.

  1. Справочник позиций. Список того, что компания реально покупает, с ключом сравнения: нормализованное наименование, бренд, единица, кратность, допустимые аналоги. Без справочника агент сравнивает строки прайсов, а не товары.
  2. Правило нормализации. Записанное правило, по которому любая цена превращается в «цену за сопоставимую единицу в одной валюте на дату прайса, с налогом или без — явно указано». Одно правило на все прайсы.
  3. Лимиты в правах. Сумма автоматического заказа, список тех, кто утверждает, и отдельное правило для новых поставщиков. Лимит живёт в конфигурации и в правах доступа, а не в тексте инструкции агенту.
  4. Точка приёмки. Место, где фиксируется факт: сколько привезли, по какой цене, что в накладной. Приёмка — это не «товар пришёл», а запись с количеством и расхождениями.
  5. Журнал. Что агент прочитал, что записал, какой ответ получил. Журнал нужен не для красивого отчёта, а чтобы на вопрос «почему так» был ответ через месяц.

Это тот же принцип, что и в остальной автоматизации: система должна уметь объяснить своё действие. Подробнее о нём я писал в материале про доказательства до записи.

Шаг 1. Один вход для прайсов, но не одна таблица

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

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

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

Шаг 2. Нормализация: валюта, номинал, единица, налог

Это техническое ядро закупочного агента, и здесь нельзя «примерно». Разберу на живом источнике — файле курсов ЦБ, который я открывал 27.10.2026.

Файл отдаётся как XML, внутри есть атрибут даты: в срезе за 27.10.2026 он содержал Date="27.10.2026". Кодировка — windows-1251, десятичный разделитель — запятая. Если парсер прочитает файл как UTF-8 и попробует превратить «56,5932» в число стандартным приведением типа, он получит либо мусор, либо молчаливое округление. В закупках это означает, что цена в рублях посчитается неверно, а агент при этом будет уверен, что всё в порядке.

Дальше — номинал. В том же срезе 54 валюты, и десять из них котировались за 100 единиц: DZD, AMD, HUF, INR, KZT, KGS, BDT, ETB, RSD, JPY. Правило простое и обязательное: цена за единицу = значение из файла ÷ номинал. Забыть про деление легко, потому что число выглядит правдоподобно.

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

Четвёртый — единица и кратность. Приведение к сопоставимой единице делается по справочнику, а не по названию в прайсе: «коробка 12 шт» и «шт» — это разные единицы, и агент должен получить из справочника коэффициент, а не догадаться.

Если хотя бы один из четырёх слоёв не формализован, сравнивать цены нельзя. Честный статус такой позиции — «неизвестно», а не «примерно равно».

Шаг 3. Сравнение по стоимости владения позицией

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

Агент считает стоимость владения позицией в рамках заданных ограничений: если нужна поставка к конкретной дате, вариант с ценой ниже и сроком на две недели длиннее просто не участвует. Если минимальная партия больше потребности — в расчёт идёт реально закупаемый объём и то, что останется на складе.

Хорошая привычка: агент не отдаёт «лучший вариант», он отдаёт два-три варианта с разницей в деньгах, сроке и риске. Решение остаётся за человеком, особенно когда разница в пределах погрешности данных. Модель, которая «уверенно рекомендует», в закупках опаснее модели, которая показывает сравнение.

Шаг 4. Лимиты и утверждение: где кончается автоматизация

У закупок есть естественная граница — деньги. Она описывается тремя параметрами:

  • Сумма. До определённого порога агент формирует заказ сам, выше — готовит заявку и ждёт утверждения.
  • Новый поставщик. Первый заказ новому контрагенту всегда проходит человека: реквизиты, договор, условия оплаты. Это не недоверие к агенту, а нормальная процедура.
  • Изменение условий. Смена поставщика по позиции, изменение цены выше порога, переход на предоплату — отдельное решение.

Лимиты должны жить в правах и конфигурации, а не в тексте промпта. Если единственное, что мешает агенту заказать на крупную сумму, — фраза «не заказывай больше N», то это не ограничение, а пожелание. Рабочий вариант: агент физически не имеет инструмента подтвердить заказ выше лимита, и запрос уходит человеку.

Про то, как такие границы выглядят в контуре, у меня есть отдельный разбор — стоп-краны в автоматизации бизнеса.

Шаг 5. Заказ и трёхсторонняя сверка приёмки

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

Проверяются четыре вещи: количество (заказано / привезено / в накладной), цена за единицу, сумма с налогом, срок. Если всё совпало — запись закрывается. Если нет — создаётся карточка расхождения с конкретикой: какая позиция, на сколько единиц, какая разница в деньгах, кто поставщик.

Главное правило: агент не «дописывает» недостачу и не закрывает расхождение сам. Он не может решить, что двух коробок «и так нормально», и не должен пытаться сгладить разницу, чтобы отчёт сошёлся. Расхождение — это сигнал человеку, а не задача для оптимизации.

Такой же подход к деньгам я разбирал в материале про платёжную автоматизацию со следом от источника: пока сумма не сверена с исходным документом, она не считается подтверждённой.

Шаг 6. Журнал, дубли и стоп-условия

Три вещи, без которых контур разваливается на первом же сбое.

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

Журнал. Для каждого шага: вход (что прочитали), решение (что выбрали и почему), действие (что отправили), результат (что ответила система). Журнал пишется до действия, а не после, иначе при сбое в середине не остаётся следа.

Стоп-условия. Агент останавливается и зовёт человека, если: поставщик не подтвердил заказ за отведённое время; цена изменилась больше заданного порога к моменту подтверждения; приёмка не сошлась; поставщик прислал другой артикул; в прайсе появилась позиция, которой нет в справочнике. Каждое стоп-условие — это не ошибка агента, а нормальная развилка процесса.

Где агент ошибается чаще всего

Честный список того, что я видел в закупочных контурах — и что не лечится «более умной моделью».

  • Прайс картинкой. Распознавание цены с фотографии даёт вероятность, а не факт. Если уверенность низкая, позиция уходит человеку со статусом «неизвестно», а не в сравнение.
  • Новый артикул. Позиции нет в справочнике — значит, нет ключа сравнения. Агент не должен угадывать аналог по названию: он показывает позицию человеку и просит привязать.
  • Скидки от объёма. «От 10 коробок — минус 8%» превращает сравнение в задачу с ограничением. Если правило не описано, агент считает по базовой цене и помечает это.
  • Устаревший прайс. Дата прайса — часть цены. Прайс месячной давности не «примерно актуален», он неизвестен до подтверждения.
  • Двойной заказ после сбоя. Лечится только идемпотентностью и чтением состояния до повтора; никакая аккуратность в промпте этого не заменяет.

Что считать результатом

Закупочный агент оценивается не «экономией в процентах» из презентации, а измеримыми вещами, которые видно в собственных данных за месяц:

  • доля позиций, у которых цена подтверждена с датой и источником;
  • число расхождений приёмки на сто заказов и сумма этих расхождений;
  • число дублей заказов — цель ноль;
  • время от появления прайса до готового сравнения;
  • число заказов выше лимита, прошедших без утверждения — тоже цель ноль.

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

С чего начать на этой неделе

Три шага, которые не требуют ни разработки, ни бюджета.

  1. Выпишите 20 позиций, которые закупаете чаще всего, с единицей и кратностью. Это заготовка справочника.
  2. Соберите в одну папку все прайсы, которые пришли за последний месяц. Посмотрите, в каких валютах они выставлены и есть ли в них налог — вы увидите, где именно у вас теряется сопоставимость.
  3. Запишите три лимита: сумма автоматического заказа, кто утверждает, что делать с новым поставщиком.

После этого можно обсуждать контур: какой источник прайсов подключаем первым, где живёт справочник, кто принимает товар и как выглядит карточка расхождения. Если хотите пройти этот путь на своём процессе — напишите в Telegram, разберём закупку как процесс, а не как набор инструментов.

Частые вопросы

Может ли ИИ-агент в закупках сам выбирать поставщика?
По действующей позиции — да, если цена и срок подтверждены, а сумма в пределах лимита. Новый поставщик и заказ выше лимита всегда проходят человека: реквизиты, договор и условия оплаты — это решение компании, а не оптимизация цены. Такое разделение защищает и компанию, и сам процесс: агенту не нужно «угадывать» доверие.
Что делать, если прайс пришёл фотографией или картинкой?
Распознавать, но с честным статусом. Если уверенность распознавания низкая, позиция не попадает в сравнение, а уходит человеку как «неизвестно» с приложенной картинкой. Ошибка в единице или разряде при чтении с фото стоит дороже скорости: такой прайс лучше подтвердить у поставщика текстом.
Нужна ли интеграция со складом и учётной системой?
Для старта — нет. Минимальный контур: справочник позиций, реестр заказов и точка приёмки в одном месте. Интеграция с учётной системой нужна, когда важно автоматически видеть остатки и закрывать документы; до этого она добавляет сложности больше, чем пользы.
По какому курсу считать цену, если прайс в валюте?
По официальному курсу ЦБ на дату прайса, с учётом номинала — часть валют котируется за 100 единиц. Курс и его дата сохраняются в записи вместе с ценой, иначе сравнение невозможно пересчитать. Курс «на сегодня» для прайса месячной давности даёт красивую, но неверную картину.
Сколько времени занимает запуск такого контура?
По моей практике — от двух до четырёх недель на один процесс, если справочник позиций и лимиты уже описаны. Если справочника нет, половина срока уходит на него, и это нормально: без ключа сравнения автоматизация закупок превращается в автоматизацию путаницы. Точный срок зависит от числа поставщиков и форматов прайсов — до диагностики его лучше считать неизвестным.

Источники

ЦБ РФ, официальные курсы валют (XML)
Проверено 27.10.2026: файл вернул HTTP 200, атрибут Date="27.10.2026", кодировка windows-1251, десятичный разделитель — запятая, 54 валюты, из них 10 с номиналом 100 единиц.

ФНС России, раздел «НДС»
Проверено 27.10.2026: HTTP 200; формулировка о том, что НДС — косвенный налог и предъявляется покупателю дополнительно к цене товара.

Читайте также

Подписаться на блог в Telegram

Читайте свежие кейсы об AI-автоматизации, системной архитектуре и масштабировании бизнеса.

Подписаться