Роботи / Агенти і ботиробота на відкритий бриф

Afterglow: AI-агент для магазину платівок і книг, який бачить, за чим покупці пішли ні з чим

Що було

Маленький магазин платівок чи книг бачить тільки те, що в нього купили. Він не бачить, чого хотіли люди, які пішли з порожніми руками. Qloo, компанія з базою смаків (хто любить X, той любить Y: музика, кіно, книги, ігри), відкрила бриф на AI-агентів поверх свого API. Ми хотіли зробити справжнього агента, а не чат за сценарієм, і чесно заміряти, чи кращий він за звичайний Claude.

Що зробили

За 4 дні від порожньої папки до поданої заявки, потім три тижні шліфування за замірами. Агент на Claude Haiku 4.5 з 6 інструментами, 4 з них ходять у Qloo, порядок викликів обирає сам. Сторінка покупця з трьома речами з полиці і фактом від Qloo під кожною, ранкова записка власнику «три платівки, які варто замовити», прогін каталогів двох справжніх магазинів в Остіні й Далласі. Усі заміри сліпі: запити писав окремий агент, який бачив лише каталог.

Що отримав клієнт

Живий сайт, відкритий код і двохвилинне відео. На 50 запитах, на яких не налаштовувалися, наш агент виграв у Claude без Qloo 25 разів і програв 9. На 70 запитах Claude без Qloo 15 разів поставив у топ-3 товар дорожчий за бюджет, наш агент жодного разу. Слабкі місця опублікували теж: з другим суддею відрив менший.

ЗамовникQloo, відкритий бриф на Devpost для AI-агентів поверх Qloo Taste AI
Моя рольІдея, продукт, код, дизайн, заміри, тексти, відео
СтатусПодано, живий агент відкритий для журі, підсумки ще не оголошені
Результат25 / 9 перемог і поразок проти Claude без Qloo на 50 запитах, на яких не налаштовувалися · Відкрити
Відхилено: той самий запит у Claude без Qloo. 2 формати, за підбірками немає даних, власнику нічого
Відхилено: той самий запит у Claude без Qloo. 2 формати, за підбірками немає даних, власнику нічого
Прийнято: агент з інструментами Qloo. 4 формати, під кожною річчю факт від Qloo, 7 відсутніх позицій пішли власнику
Прийнято: агент з інструментами Qloo. 4 формати, під кожною річчю факт від Qloo, 7 відсутніх позицій пішли власнику

Завдання

Власник незалежного магазину закуповує за своїми продажами. Але продажі показують лише те, що вже стоїть на полиці. Якщо людина прийшла по платівку, якої нема, вона мовчки йде, і в звітах цього не видно ніколи. Ми назвали це «попитом, якого не видно в касі». Покупцеві тим часом важко вибрати подарунок: він знає, що любить людина, але не знає, що з цього схоже на те, що є в магазині.

Qloo, компанія з базою смаків (хто любить X, той любить Y: музика, кіно, книги, ігри), відкрила бриф на AI-агентів поверх свого API. Відео і пітч не обовʼязкові, Україна допущена. Ми хотіли три речі: перевірити себе на справжньому агенті, де модель сама вирішує, який інструмент викликати і коли зупинитися; чесно заміряти, чи кращий він за звичайний Claude; і отримати в портфоліо роботу з живим сайтом і відкритим кодом.

Навіщо і яка ідея

Ідея: поставити в магазин агента, який читає запит покупця звичайними словами («подарунок брату, любить Joy Division, до $40»), іде в Qloo, оцінює весь каталог під цей смак, перевіряє бюджет і вік і бере три речі з полиці. Під кожною факт від Qloo, чому вона підходить. А все, чого на полиці не знайшлося, вранці йде власнику списком: які платівки дозамовити. Так магазин нарешті бачить, за чим від нього пішли.

Два рішення переглянули по ходу. Спочатку хотіли «AI для будь-якого інтернет-магазину», але Qloo впізнав лише близько 30% випадкових товарів з Amazon. Звузили нішу до магазину культури: платівки, книги, фільми, ігри, серіали. Друге: мій перший план дизайну (назва, три стилі вітрини, генерація картинок) консиліум з пʼяти AI-радників відхилив одноголосно. Головною відмінністю проєкту був екран власника, а його в плані не було. Зробили за вердиктом.

Хід роботи

Етап Що відбувалося
День 1 Реєстрація, заявка на ключ Qloo. Каркас на заглушках, поки ключа нема. Перший сюрприз: Qloo оцінює бренд, а не товар
День 3, ранок Прийшов ключ. Живі запити до Qloo, перший замір, відмова від «AI для будь-якого магазину». Обрано нішу: магазин культури
День 3 Два консиліуми по дизайну. Весь сайт переробили в стилі «нічний рекорд-шоп», обкладинки як головний матеріал. 72 коміти за день
День 4, 00:11 Заявку подано
День 4 Фінальний консиліум: пʼять незалежних AI-радників оцінили роботу як журі, виконано весь їхній план. Код-ревʼю знайшло 5 помилок агента, виправлені, все переміряно. Нове відео, нова галерея
Через три тижні Увімкнення живого агента, перевірка посилання для журі

Усього 94 коміти, 4 робочі дні до подачі.

Чим робили

Агент: Claude Haiku 4.5 з tool use. 6 інструментів, 4 з них ходять у Qloo: пошук сутностей, insights з фільтром по каталогу магазину і поясненням, який смак дав збіг, теги смаку, демографія для подарунків за віком, смак міста через signal.location. Модель сама вирішує порядок викликів, але не більше 6 ходів і 25 живих запитів до Qloo на один запит покупця.

Код: Next.js 16, TypeScript, Vercel, близько 2 500 рядків у ядрі агента і сторінках. Каталог: 384 товари, обкладинки і дані з iTunes Search API та Open Library, вікові рейтинги з офіційних джерел, арт обкладинки згенеровано в Higgsfield. Захист від витрат: поки живий агент закритий, публічний сайт показує записані прогони, у журі окремий пропуск. Стеля на Claude $3 на добу для всіх і $10 для журі, окремий запас квоти Qloo. Якщо ліміт вичерпано, сайт не падає, а показує найближчий записаний приклад. Один запит покупця коштує близько $0,015 на Claude.

Заміри робили сліпими. Окремий агент, який бачив тільки каталог, написав і розмітив 40 запитів покупців ще до налаштування. Налаштовували тільки на непарних, парні не чіпали. Після всього налаштування інший сліпий агент написав ще 30 нових. Порівнювали з тим самим Claude, якому дали весь каталог текстом, але без Qloo. Другий сліпий суддя оцінював усі спірні підбірки обох сторін, не знаючи, чия де. Статистика на Python: бутстреп і тест знаків.

Результат

Живий сайт з трьома сторінками. Покупець (/live): пишеш запит, справа видно, як агент працює по кроках, нижче для порівняння відповідь Claude без Qloo на той самий запит. Власник (/owner): ранкова записка «три платівки, які варто замовити» з обкладинкою, виконавцем і кількістю покупців, що їх хотіли, нижче прогалини на полиці. Справжні магазини (/real): публічні каталоги Waterloo Records (Остін) і Josey Records (Даллас), прогнані через Qloo: скільки з 50 улюблених артистів міста стоїть на полиці і чого шукають покупці, а в магазині нема.

Цифри на 50 запитах, на яких не налаштовувалися: влучань у топ-3 у нашого агента 0,43, у Claude без Qloo 0,32; перемог і поразок 25 проти 9. З другим суддею 0,57 проти 0,48 і 21 проти 12. Бюджет: на 70 запитах Claude без Qloo 15 разів поставив у топ-3 товар дорожчий за бюджет, наш агент жодного разу.

Слабкі місця опублікували теж: з другим суддею відрив менший і статистично не вирішальний, а один ранній тест взагалі показав зворотне. Публікуємо останній прогін, а не найкращий. Підсумки брифу ще не оголошені, допишемо, коли прийдуть.

Помилки і що винесли

Qloo не повертає сам сигнал.Магазин, зібраний з підказок Qloo для шанувальника Taylor Swift, виявився без самої Taylor Swift. Додали вихідні позиції назад.
Популярність забивала смак.LEGO виходив першим у будь-якому списку. Перейшли на процентилі всередині кожного формату.
Пошук плутав сутності.«Studio Ghibli» знаходився як застосунок для фото. Спочатку точний збіг імені, потім пошук за типом.
Модель упевнено вигадувала.«The Mule, сучасний вестерн» (це не вестерн). Тепер пояснення має збігатися з тегами самого товару з Qloo, а план власника показує факти з даних, а не переказ моделі.
Код-ревʼю після подачі знайшло 5 справжніх багів.Порожній список кандидатів зациклював агента, слово «series» хибно вмикало фільтр за форматом, «kid brother 25» хибно ставило дитячий вік. Усе виправлено й переміряно, підсумок став кращим: 25/9 проти 24/10.
Devpost не зберігав порядок картинок формою.Порядок задає окремий запит, який шле перетягування. Знайшли і викликали його.
Блок порівняння на телефоні був на 8 пікселів ширший за екран.Кожну сторінку перевіряємо з телефона.

Інструменти

Claude Haiku 4.5Qloo Taste AI APINext.js 16React 19TypeScriptVerceliTunes Search APIOpen LibraryHiggsfieldPythonClaude CodeGitHub