43 lines
3.7 KiB
Plaintext
43 lines
3.7 KiB
Plaintext
Тестовое задание: Определить товар по сообщению покупателя
|
||
Нужно сделать простого AI-агента для продаж. Одна из его базовых задач - понять, о каком товаре из каталога магазина спрашивает покупатель, который пишет живым языком: с опечатками, сокращениями и лишними словами.
|
||
|
||
Ожидаемый объём: 4-6 часов чистой работы.
|
||
|
||
Дано
|
||
catalog_exel.csv - каталог магазина (~500 позиций): sku, name, unit, price.
|
||
messages.txt - ~40 реальных по духу сообщений покупателей «как есть».
|
||
|
||
Сделать
|
||
HTTP-сервис на Python 3.12 + FastAPI с одним эндпоинтом POST /match.
|
||
|
||
Запрос:
|
||
|
||
{"messages": ["саморезы по дереву 4.2 на 75, пачку", ...]}
|
||
|
||
Ответ:
|
||
|
||
{"results": [{"message": "...", "status": "matched", "candidates": [{"sku": "SKU-123", "confidence": 0.87}]}]}
|
||
Статусы: matched — уверен, candidates[0] и есть ответ; ambiguous — не уверен, 2-3 кандидата; not_found - товара нет в каталоге или запрос не про товар (candidates можно оставить пустым).
|
||
|
||
Формат запроса/ответа менять нельзя - мы проверяем сервис автоматически. Сервис должен подниматься одной командой - напиши её в README.
|
||
|
||
Важно: сервис должен работать полностью автономно - без интернета, без внешних API и без чьих-либо ключей (в том числе без вызовов LLM-API изнутри сервиса).
|
||
Ключевое требование
|
||
Ложных ответов должно быть по-минимому. Если система сомневается - ambiguous со списком кандидатов будет в разы лучше, чем уверенно выданный неправильный товар. Проверять будем в том числе на сообщениях, которых нет в messages.txt.
|
||
|
||
Обязательно
|
||
README.md, три части:
|
||
Как запустить (одной командой).
|
||
Какие решения принял и ПОЧЕМУ: компромиссы, что попробовал и отбросил; что осознанно не сделал и что доделывал бы до продакшена.
|
||
Раздел «Масштаб»: что изменится в твоём решении, если позиций в каталоге станет 2 миллиона (и жить он будет в PostgreSQL), а магазинов на одном сервисе - пятьдесят, у каждого свой каталог. Код под это писать не нужно - только инженерное рассуждение.
|
||
Тесты (pytest), включая негативные сценарии.
|
||
Git-репозиторий с осмысленной историей коммитов, а не одним коммитом «done».
|
||
|
||
Не нужно
|
||
База данных (каталог можно держать в памяти), Docker, авторизация, фронтенд.
|
||
|
||
Про нейронки
|
||
Для НАПИСАНИЯ кода пользоваться можно и нужно чем угодно (Claude, ChatGPT, Cursor, DeepSeek - что есть под рукой).
|
||
|
||
Сдача
|
||
Ссылка на git-репозиторий. |