Обновить
32K+

Разработка под e-commerce *

Разработка систем электронной коммерции

29,83
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Reasoning Lock: ИИ-агент в проде тратит токены и молчит — живой разбор бага

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели2K

В прошлой статье (https://habr.com/ru/articles/1076084/) я рассказывал о скрытом баге: ИИ-агент в проде заказчика тратит токены, генерация закрывается со статусом "успех", а клиенту уезжает пустая строка. Тогда я обещал разобраться и починить. Обещание выполнено: причина найдена, правки встали в воркфлоу, счётчик пустых ответов уже 7 дней - чисто. Баг получил имя Reasoning Lock. Теперь подробно о нём: симптомы, "расследование по этажам", механика и "лечение" - в общём в стиле детектива))

Напомню, что строю ИИ-агентов на self-hosted n8n. Герой статьи - агент в проде заказчика: по ночам принимает заявки в Instagram Direct, ведёт диалог, собирает анкету и создаёт/обновляет сделку в amoCRM. Стек агента: n8n + Redis + LangChain, LLM основная - DeepSeek V4 Pro через OpenRouter, резервная - недавно поменял на Qwen3.8 Flash.

Предыстория: два периода, две природы отказов

История началась задолго до самого бага. С конца июня (установил в прод агента в первых числах июня если точнее быть) отказы случались двух периодов, и разница между ними = ключ к пониманию.

Период первый = тесты и запуск: инфраструктура. Первые "пропавшие ответы" пользователям имели вполне земную природу: ограничения Meta - потери вебхуков, окно ответов, двойные доставки. Как это чинилось (мгновенный 200 OK, буфер на Redis, дебаунс) - разобрано в первых двух частях. К продакшену этот класс закрыли.

Период второй - последние два месяца: промпт. Система стабилизировалась, и правки от заказчика посыпались в системный промпт... (( Под живую бизнес-логику: инструкция по пересылке оплаты пользователем, отдельные сценарии ответов для VIP-клиентов (абзаца два , которые под каждое "фи" постоянного клиента меняли по несколько раз), уточнения формулировок после каждого спорного диалога. Каждая правка по отдельности естетсвенно правильная и рабочая. Суммарно же промпт разросся до где то 6.4k токенов, и плотность запретов ("КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО", "Отправь СТРОГО этот текст") стала максимальной за всю жизнь системы.

Читать далее

Новости

Алло, это робот: почему голосовые системы телефонии могут быть лучше, чем кажется на первый взгляд

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели3.7K

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

Читать далее

Миллионы товаров и миллисекунды: как устроен специализированный движок каталога

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.7K

Что происходит, если строить каталог на миллионах товаров не вокруг PostgreSQL и Elasticsearch, а вокруг mmap, собственных индексов и zero-allocation JSON? Разбираю архитектуру, компромиссы и реальные результаты на работающем агрегаторе: около 50 000 RPS и миллисекундные ответы.

Читать далее

Excel, 3 маркетплейса и 170 часов рутины — как я автоматизировал работу e-commerce команды

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели5.2K

Что, если два небольших автоматизированных процесса возвращают компании больше 160 рабочих часов в месяц?

В одном из проектов я связал внутреннюю Excel-систему компании с маркетплейсами и добавил AI-черновики ответов на обращения покупателей — при этом финальное решение всегда остаётся за сотрудником.

Разобрал, где именно терялось время, что автоматизировал и почему эффект получился примерно на 100 тысяч рублей рабочего времени в месяц на 5 сотрудников.

В статье — цифры, архитектура и экономика внедрения.

Разобрать кейс

Песочница для кодинга на образовательной платформе: как безопасно запустить Python и ничего не сломать

Время на прочтение7 мин
Охват и читатели10K

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

Читать далее

GEO своими руками: собираем трекинг видимости бренда в ИИ‑ответах на n8n [+ воркфлоу]

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели9.3K

Можно быть хоть топ-1 в органической выдаче по всем коммерческим запросам, но ни разу не попасть в ИИ ответ от Google или Яндекс.

Я собрал собственный автоматический мониторинг видимости бренда на n8n (43 ноды): раз в месяц опрашиваем Яндекс, GPT, Gemini и Qwen, отделяем цитирование из выдачи от ответов модели по памяти и тратим меньше 100 рублей за полный прогон по всем категориям.

Внутри — разбор механики отслеживания, FNV-1a хэширование ответов, детект без второй LLM и ссылка на открытый GitHub с готовыми воркфлоу и шаблоном таблицы на 17 вкладок.

Читать далее

Как я скормил stealth/ox‑alpha 60 млн токенов, или история о том, как «навайбкодилось» 127 нод в n8n

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели11K

В финале прошлой статьи я обещал разбор контура генерации ответов с гибридным извлечением данных (LLM‑tools + regex). Но пока немного переиграем планы и переключимся в другую тему — причина практический инженерный эксперимент. Постараюсь вкратце и по существу.:‑)

Читать далее

Как виджет для интернет‑магазина чуть не спалил мой iPhone: Lottie vs видео‑спрайты на телефонах

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.8K

Казалось бы, что может пойти не так с легковесными векторными анимациями? Вектор в Lottie, JSON весит копейки. Но тестирование на реальном телефоне закончилось фиаско: через пару минут скролла чип раскалился до 42 °C, а интерфейс ушёл в троттлинг.

Оказалось, что покадровый пересчёт кривых Безье в JS на мобильных экранах быстро превращает телефон в печку.

В кейсе разбор того, как мы перешли на аппаратно декодируемые видео‑спрайты, почему IntersectionObserver втихую крутил видео под непрозрачными модалками и как в итоге удалось сбить температуру обратно до стабильных 30 °C.

Читать кейс

Один контракт данных, разные адаптеры: как перестать писать миграцию магазина заново

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.6K

Первый файл, который я получил при переезде своего магазина с InSales, парсер прочитал как одну длинную строку мусора. Выгрузка заказов оказалась в UTF-16 LE с BOM и табуляцией вместо запятой — ни один разумный дефолт не подошёл.

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

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

Сразу оговорюсь про доставленные миграции: полностью пройдена одна — та, о которой пойдёт речь. Про требования к адаптерам под 1С‑выгрузки и товароучётные API дальше я говорю как о проектных требованиях к каркасу; готовыми кейсами они не являются. Это важно, чтобы вы правильно оценили вес каждого утверждения.

Резонный вопрос до всего остального: почему не готовый инструмент. Airbyte, n8n, коннекторы к товароучётным системам делают ровно это — вытащить, преобразовать, положить. Для регулярной синхронизации они и есть правильный выбор. Разовая миграция магазина отличается тем, что сложность сидит не в перекладывании строк, а в доменных правилах: как собрать заказ из нескольких строк, что делать с позицией, товара которой больше нет в каталоге, как при повторном прогоне не затереть свежие данные старыми. Эти правила всё равно пишутся руками, а в визуальной цепочке трансформаций их неудобно тестировать и нельзя перезапустить кусочком. Поэтому середина своя, а тонкими остаются края.

Читать далее

Как определить CMS у 53 тысяч сайтов за один обход. И почему картина всё равно смещена

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.2K

Задача была прикладная: мы переносим интернет‑магазины на свой движок и хотели понять, сколько в зоне .ru магазинов на каждой платформе и как их находить. Готовые сервисы вроде BuiltWith продают выгрузки по подписке, но нам нужен был воспроизводимый обход, который можно гонять когда угодно и по своим правилам.

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

Читать далее

Из генерации — в переписку: доводим ответ ИИ‑агента до клиента и CRM на n8n

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели9.5K

Всем привет!) Напомню: в первой статье я показал дебаунс на Redis, который склеивает дробные сообщения клиента. Во второй — модуль привязки «чат = сделка» и то, почему вебхуки стоит держать в изолированных ключах. Обе части заканчиваются примерно одинаково: «...и текст уходит ИИ‑агенту». Это, пожалуй, тот финал, на котором обычно ставят точку и заливают демо на GitHub... Но не в данном случае!)

Читать далее

Как технический эксперт COMETAL за два месяца передал нейросетям 20% своей работы

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели7.9K

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

Читать далее

Почему у клиента «зависли» деньги на карте: как работает холдирование средств

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели5.4K

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

Читать далее

Ближайшие события

Self‑hosted вместо подписок: асинхронная очередь для ИИ‑агента на n8n и Redis

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.5K

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

Читать далее

Архитектура AI‑консультанта для каталога на 200 000 товаров: Qwen, FastAPI и поиск

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели4.7K

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

В интернет‑магазинах уже есть поиск, фильтры и карточки товаров. Но этого часто недостаточно, когда человек приходит не с конкретным названием товара, а с задачей. Например: «Мне нужен инструмент для ремонта квартиры» или «Чем отличаются эти два товара и какой подойдет лучше?».

В офлайн‑магазине в такой ситуации можно обратиться к консультанту: объяснить задачу, уточнить детали и получить несколько вариантов. Мы хотели перенести похожий сценарий на сайт. Но довольно быстро стало понятно, что схема «пользователь → LLM → ответ» для этого не подходит.

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

Проект мы разрабатывали командой ASAP, и в этой статье разберем, как мы подошли к проектированию AI‑консультанта: устроили взаимодействие LLM с каталогом более чем из 200 тысяч товаров, какие задачи оставили коду, как работаем с актуальными ценами и остатками и почему вокруг языковой модели в итоге пришлось построить достаточно большой слой классической backend‑логики.

Читать далее

API Ozon + Power Query: как автоматизировать расчёт поставок без Python и разработчиков

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели3.8K

Я работаю аналитиком в e‑commerce крупной FMCG‑компании. В маркетплейсах это иногда ощущается как слон в посудной лавке: несколько юридических лиц на каждой площадке, большие объёмы поставок, ограничения по слотам на складах, сложная логистика, переупаковка и подготовка товаров под требования конкретного канала.

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

Нажать «Обновить»

Как я сделал mmap-базу для 4 миллионов товаров и 700 тысяч посадочных страниц

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели6.2K

Сделал mmap-базу для 4 млн товаров и получил ~35k RPS. Поиск оказался настолько быстрым, что bottleneck пришлось искать уже после базы. В итоге оптимизировал JSON, получил ~1.8× прироста HTTP workload — и упёрся в w.Write.

Читать далее

Аналитика без cookie: дневной HMAC вместо идентификатора посетителя

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели7.7K

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

Ниже — как устроен свой cookieless‑трекинг в двух проектах на Next.js: интернет‑магазин (Next.js 15.5, TypeScript, Prisma 6, PostgreSQL) и маркетплейс услуг (тот же Next.js, но pg без ORM). Код в статье — из работающих проектов, с теми решениями, которые оказались неочевидными, и с теми, которые пришлось переделать.

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

Читать далее

Через два месяца первого класса мы забрали сына на семейное обучение

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели94K

В МФТИ 53% бюджетных мест в этом году заняли олимпиадники. На биоинженерии МГУ — все 35 из 35, туда не прошли даже стобалльники. При этом вся инфраструктура олимпиадной подготовки живёт в Москве и нескольких матлицеях, а я живу в городе на сорок тысяч человек. Рассказываю, как мы с супругой — оба бывшие олимпиадники — посмотрели на первый класс сына, посчитали и ушли на семейное обучение.

Читать далее

AVM: как Aeza перешла на собственную систему управления виртуализацией

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели6.4K

До AVM виртуализацией управляла сторонняя платформа. Иногда она зависала и переставала принимать задачи. Нагрузку распределили между несколькими экземплярами платформы, но зависания продолжились. До вмешательства операции клиентов не шли.

Читать далее
1
23 ...