惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
腾讯CDC
月光博客
月光博客
A
Arctic Wolf
T
Threatpost
Jina AI
Jina AI
博客园 - 聂微东
美团技术团队
V
V2EX
云风的 BLOG
云风的 BLOG
宝玉的分享
宝玉的分享
Recent Commits to openclaw:main
Recent Commits to openclaw:main
M
MIT News - Artificial intelligence
S
Secure Thoughts
Martin Fowler
Martin Fowler
Webroot Blog
Webroot Blog
V
Vulnerabilities – Threatpost
爱范儿
爱范儿
人人都是产品经理
人人都是产品经理
Help Net Security
Help Net Security
Google Online Security Blog
Google Online Security Blog
博客园 - Franky
The Last Watchdog
The Last Watchdog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
S
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Latest news
Latest news
有赞技术团队
有赞技术团队
AWS News Blog
AWS News Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Y
Y Combinator Blog
G
Google Developers Blog
NISL@THU
NISL@THU
H
Heimdal Security Blog
L
LangChain Blog
T
Troy Hunt's Blog
I
InfoQ
U
Unit 42
C
Check Point Blog
Engineering at Meta
Engineering at Meta

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
«Особое мнение» по каждому SKU: три AI-модели вместо BI-правил
Vsevolod Kobzar · 2026-05-20 · via Все публикации подряд на Хабре

Средний

11 мин

7K

Архитектура SaaS-аналитики прибыли для продавцов Ozon и Wildberries. Консилиум из трёх моделей, реверс-инжиниринг API, параллельные агенты Claude Code. Без приукрашивания — что сработало, а что нет.

Бизнес-контекст и ретроспектива первых недель — отдельной статьёй на VC.ru. Тут — техника.

Консилиум из трёх моделей-«провидцев» и арбитратор

Консилиум из трёх моделей-«провидцев» и арбитратор

С чего всё началось

Мой знакомый Николай держит на Ozon магазин постельного белья. Со стороны всё нормально: оборот есть, товар продаётся, кабинет не пустует. А денег в конце месяца — нет. Не «мало», а непонятно куда они делись.

Я стал разбираться — и понял, что это не его частная беда. Полный P&L по каждому товару никто не считает: на каталоге в 500–2000 позиций это часы в неделю. Товар крутится в топе по обороту — но оборот ничего не говорит о марже: после возвратов и рекламы он годами уходит в минус, в полной слепой зоне. Инструментов на рынке хватает, но почти все просто показывают ещё одну P&L-таблицу — много цифр, красиво, и ровно ноль ответа на вопрос «и что мне теперь с этим делать».

Так появился SKUmind — сервис, который сводит прибыль по каждому SKU и говорит, что с ней делать. Под катом — почему я выкинул привычную для BI логику на правилах, как собрал консилиум из трёх AI-моделей разных вендоров с арбитратором, как реверс-инжинирил Ozon API двумя параллельными сессиями Claude и почему ревью кода теперь съедает 60–70% времени.

Почему правила не работают

Когда строишь аналитику, первый инстинкт — написать правила. Быстро, и как будто логично:

if return_rate > 15%        then "флаг: высокие возвраты"
if ad_spend / revenue > 20% then "снизить рекламу"
if margin < 5%              then "снять с продажи"

И ровно настолько же бесполезно. Эти правила врут тем сильнее, чем разнообразнее рынок. 25% возвратов в одежде — обычное дело. Те же 25% в книгах — что-то сломалось. Высокая доля рекламы перед Новым годом оправдана, в феврале — нет. Комиссия 30% в БАДах никого не удивляет, в крупной бытовой технике она съедает экономику целиком.

Чтобы правила перестали врать, их надо делать категорийно-специфичными. А это десятки тысяч пограничных случаев. Если бы такой код писал человек, за пару месяцев он превратился бы в legacy, который потом страшно трогать.

Я пошёл иначе. SKUmind отдаёт финансовый контекст товара языковой модели и просит вердикт с объяснением — так, как ответил бы аналитик, который реально посмотрел на конкретный товар в конкретной категории. Не «риск 0.7», а «убыточен, потому что в этой категории 18% возвратов плюс реклама не отбивается».

От одной модели к консилиуму

Сначала было просто. Один Claude, один промпт, один вердикт на товар. Работало.

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

Дальше сошлись две вещи. Первая — название продукта. SKUmind, и зашитая в него отсылка к «Особому мнению»: три провидца предсказывают будущее, иногда один расходится с большинством, и это расхождение — minority report — бывает важнее консенсуса. Вторая — чисто инженерное наблюдение. Если взять модели от разных вендоров, обученные на разных корпусах разными методами, их ошибки не совпадают. Где они согласны — туда можно ступать. Где спорят — там стоит притормозить и посмотреть внимательно.

Так метафора превратилась в архитектуру. Функция называется «Особое мнение» и под капотом это консилиум:

            ┌──────────────────────────┐
            │  Финансовый контекст SKU │
            │  (предрассчитан, без     │
            │   обращений модели в БД) │
            └────────────┬─────────────┘
                         │  параллельные вызовы
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
   ┌────────────┐ ┌────────────┐ ┌────────────┐
   │  Precog 1  │ │  Precog 2  │ │  Precog 3  │
   │  вендор A  │ │  вендор B  │ │  вендор C  │
   └──────┬─────┘ └──────┬─────┘ └──────┬─────┘
          └──────────────┼──────────────┘
                         ▼
            ┌──────────────────────────┐
            │   Арбитратор (Opus 4.7)  │
            │  синтез + матрица        │
            │  согласия + уверенность  │
            └──────────────────────────┘

Три модели-«провидцы» получают одинаковый контекст и отвечают независимо, не зная про ответы друг друга. Четвёртая — арбитратор, у нас это Opus 4.7 — видит все три анализа плюс исходный вопрос. Она синтезирует общий вердикт и отдельно показывает, где провидцы сошлись, а где разошлись. Согласие 3/3 — высокая уверенность. 2/3 — арбитратор честно говорит, что вопрос спорный, и объясняет, в чём именно спор.

У «Особого мнения» два режима:

  • Точечный. Продавец жмёт 🔮 на конкретной кампании, товаре или ценовом решении —
    и получает консилиум прямо по нему, под конкретный вопрос.

  • Разбор всего кабинета. На вход уходит состояние кабинета целиком, на выходе — развёрнутый стратегический разбор: AI сам ищет проблемы и расставляет приоритеты. Результат сохраняется как артефакт — PDF, письмо на почту, отправка в Telegram, HTML-страница.

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

Архитектура: два контура и слой предупреждений

Сверху система делится на два контура с разной частотой.

┌──────────────────────┐
│   API маркетплейса   │  Ozon Seller + Performance API
│                      │  Wildberries Suppliers (в разработке)
└──────────┬───────────┘
           │ синхронизация по расписанию (1–24 раза/сутки)
           ▼
┌──────────────────────┐
│   Postgres warehouse │  сырые данные: транзакции, реклама,
│   (каждого селлера)  │  возвраты, метаданные SKU
└──────────┬───────────┘
           │ агрегация
           ▼
┌──────────────────────┐
│   Распределение      │  полный финансовый отчёт
│   расходов → SKU     │  по каждому артикулу
└──────────┬───────────┘
           ├──────────────┐
           ▼              ▼
┌──────────────────┐ ┌──────────────────┐
│  AI-анализ       │ │  Слой            │
│  (консилиум,     │ │  предупреждений  │
│   еженедельно)   │ │  (детекторы,     │
│                  │ │   ежечасно)      │
└────────┬─────────┘ └────────┬─────────┘
         └────────────┬───────┘
                      ▼
            ┌──────────────────┐
            │  Кабинет + отчёт │
            │  + Telegram      │
            └──────────────────┘

Сырые данные тянутся с API часто — где-то раз в час, где-то четыре раза в сутки. Продажи, карточки, заказы FBO и FBS — каждый час. Остатки по регионам — дважды в сутки. Возвраты — раз. Это нужно, чтобы реагировать на операционку без задержки.

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

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

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

Ценность этого слоя — в скорости. Продавец узнаёт об аномальном событии практически в реальном времени — уведомление в кабинет и в Telegram, не дожидаясь еженедельного разбора. Детекторы работают на голом SQL, без моделей. Модель подключается потом — когда аномалию надо не заметить, а объяснить.

Claude API в роли аналитика: форма запроса

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

Роль: независимый аналитик прибыли SKU на маркетплейсе

Контекст:
- метаданные товара (категория, ценовой сегмент, себестоимость)
- финансовая динамика за 6 недель (выручка, комиссии,
  возвраты, реклама, фулфилмент, налоги, чистый P&L)
- категорийные бенчмарки (медиана возвратов, типичная
  доля рекламы, целевой ROAS)

Задача:
- классифицировать товар: убыточный / поднять цену /
  растить / стабильный
- объяснить вердикт одной фразой

Вывод: структурированный JSON

Это я заложил в логику сразу: модель не ходит в базу и не дёргает API сама. Весь контекст собирается заранее и приходит готовым блоком. Модель только рассуждает. Так быстрее, предсказуемее и дешевле — а ещё проще отлаживать, потому что вход воспроизводим.

Каждый SKU — отдельный запрос. На каталоге в 500 товаров это 500 запросов в неделю на одного продавца. Да, это дороже правил, где вычисление стоит копейки. Но качество несопоставимое: продавец получает не абстрактную оценку, а понятное «делай вот это вот поэтому». За это и платят.

Сколько это стоит

Подход на AI дороже rule-based по определению, и я не буду делать вид, что нашёл волшебную экономию. «Особое мнение» — это полноценный дорогой вызов: три топовые языковые модели как провидцы плюс Opus 4.7 арбитратором. Четыре прохода больших моделей на каждый разбор.

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

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

Реверс-инжиниринг Ozon API

До первой строчки production-кода надо было понять, что Ozon Seller API реально умеет. Документация официальная и подробная. Но методов много, версии разные (v1–v6), часть эндпоинтов устарела, часть только для Premium-тарифа, а часть просто упоминается и молчит в ответ.

Сверять каждый метод руками — недели. Я сделал по-другому: две параллельные сессии Claude, одна в браузере, вторая на компьютере.

Сессия в браузере. Я запустил Claude как расширение Chrome прямо в окне Ozon Seller-кабинета. Расширение смотрело за всеми API-запросами, которые интерфейс кабинета делает в фоне: вытаскивало эндпоинты, параметры, реальные ответы с настоящими именами полей, отмечало неочевидные переменные. По сути перехват трафика — но не MITM-прокси, а живой агент, который понимает, что видит, и умеет показать пальцем на интересное. Находки уходили во вторую сессию.

Сессия на компьютере. Тут работал Claude Code с официальной документацией Ozon, загруженной локально. Он принимал находки из браузера и сверял их с документацией: где совпадает, где «дока обещает X, а API возвращает Y», какие эндпоинты на самом деле мертвы или спрятаны за Premium. Получалась перекрёстная проверка — документация против того, что кабинет делает на самом деле.

За два дня собралась полная карта актуальных версий методов, список из десятков расхождений между докой и реальностью, и структурированная база ограничений по тарифам и rate-limits. Конкретные числа найденного я не публикую — это та самая разведка, которая дала фору. Но против ручного чтения документации это сэкономило недели три.

Почему здесь нужен 1M контекст

Документация Ozon Seller API целиком не влезает в обычное окно на 200k токенов — это несколько мегабайт текста. А даже если бы влезла впритык, не осталось бы контекста на саму работу с ней. Пришлось бы резать на куски — и модель потеряла бы перекрёстные ссылки между разделами. А они тут критичны.

Конкретный случай. Браузерная сессия прислала находку с полем accrual_type в реальном ответе. Чтобы понять, что это поле значит и какой эндпоинт обрабатывает его правильно, нужно одновременно держать перед глазами раздел про транзакции, справочник начислений, перечень их типов и примеры запросов. Это четыре разных места документации. В нарезке на чанки сверка не складывается — контекст рвётся ровно там, где нужен.

В режиме 1M (Opus 4.7 или Sonnet 4.6) вся дока лежит в одной беседе. Это меняет сам способ работы с большими API. Не «спросил — получил ответ», а «вывалил всё разом и поток входящих сигналов сверху — а теперь итерируй гипотезы».

Схема переносится на любой крупный API со сложной документацией — Wildberries, Amazon SP-API, Stripe, Telegram Bot API. Дока целиком в Claude Code с 1M контекстом, расширение Claude в живом интерфейсе продукта на перехвате трафика, перекрёстная сверка, структурированная база знаний на выходе.

Разработка: параллельные агенты Claude Code

Claude в SKUmind на двух уровнях. Первый — в продукте, как аналитик. Второй — на разработке, и это отдельный разговор.

Выглядит так. Я открываю план в Claude Code, план режется на 3–5 параллельных задач, под каждую Claude Code заводит агента в своём git worktree. Агенты работают сами по себе: пишут код, тесты, открывают PR. Я ревьюю и мержу.

По темпу за три недели с момента старта вышло под 200 смерженных PR — в среднем около десяти в день. В вялый день, когда я подхожу к проекту на час, выходит 4–5; в обычный — заметно больше. Каждый PR на 200–500 строк с тестами. Тесты, кстати, влетели в копеечку по-своему: за эти недели мы сожгли больше 2000 минут CI и упёрлись в месячный лимит GitHub Actions.

Звучит как «AI пишет код за меня». Честная картина другая: ревью теперь съедает 60–70% моего рабочего времени. Узкое место просто переехало. Раньше скорость упиралась в то, как быстро пишется код. Теперь — в то, как быстро я решаю, что вообще строить.

Без пары оговорок картинка будет приукрашенной. Claude Code не пишет идеальный код — нужны типизация, тесты, линтер, иначе огрехи копятся тихо. Архитектуру всё равно держу я: агент силён в исполнении, но не в проектировании, дай ему расплывчатую задачу — получишь расплывчатый PR. И главный риск тут не плохой код. Главный риск — быстрый код не туда. Когда исполнение почти ничего не стоит, цена ошибки в выборе направления только растёт.

Финансовые расчёты Ozon: природа сложности

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

Выплата — это не прибыль. То, что приходит продавцу на счёт, складывается из нескольких финансовых документов с разными правилами. Напишешь в коде «выплаты → P&L» — попадёшь на 10–30%. Корректный расчёт требует разобрать несколько источников начислений, и пока сам не упрёшься, это совершенно неочевидно.

Дальше — полиморфизм идентификаторов. В разных типах операций одно и то же поле id значит разное: где-то номер заказа, где-то номер отправления, где-то ссылки нет вообще. Без явной логики разбора по типу операции атрибуция расходов едет молча.

Лимит НДС в 20 млн ₽. После 20 млн годовой выручки УСН 6% превращается в УСН плюс НДС, и эффективная ставка прыгает с 6% до примерно 12–14% — сразу на весь каталог. Не заложишь в модель — потеряешь около 8% маржи на половине товаров и будешь долго не понимать почему.

Часть данных живёт за Premium-тарифом. Конкурентная аналитика и ряд полей доступны только на верхних тарифах подписки самого продавца. API это не обходит, и закладываться надо сразу.

Rate-limits жёсткие. Синхронизация 500 SKU с многонедельной историей транзакций требует backoff и retry. Наивное for sku in skus: get_data(sku) упрётся в лимит на первых десятках товаров.

И последнее: документация отстаёт от API. Часть эндпоинтов исчезла, а в доке осталась. Production-код должен такое переживать, а не падать.

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

Что пока не решено

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

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

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

Бонус: AI как корректор

Неожиданный побочный эффект работы с Opus 4.7 на 1M контексте: модель замечает опечатки в текстовых полях документации и в названиях полей API раньше, чем человеческий глаз. Просто потому, что видит всё сразу и цепляется за несогласованность.

Так мы нашли несколько опечаток в API-полях Ozon. На production они не влияют, но факт забавный — инструмент для разбора структуры заодно работает корректором. На несколько сотен методов пять опечаток это около 0.01%, объективно мало. Просто новое применение инструментов с большим контекстом.

Если кто-то из коллег Ozon Tech читает — с радостью передам координаты по любому удобному каналу.

Вопросы к сообществу

Если вы строили похожее, мне правда интересно:

  1. Кто гоняет несколько LLM в production ансамблем? Как устроен арбитраж и как меряете согласованность?

  2. Embeddings для категоризации товаров — оправданно для маркетплейс-домена или избыточно?

  3. Опыт с rate-limits Ozon Performance API — как сделана retry-логика?

  4. Wildberries Suppliers API — кто интегрировался без боли, и был ли он вообще?

Что дальше

Из ближайшего: интеграция с Wildberries и переход с синхронизации по расписанию на webhook ради обновлений ближе к реальному времени.

Буду рад разбору в комментариях, особенно по открытым вопросам выше.

Ссылки

  • Открытый журнал разработки: Telegram, X

  • Ретроспектива первых недель, бизнес-сторона: статья на VC.ru