Quant
Чат-консультант по синтетическому каталогу ekt.kz: ищет товар по артикулу и тексту, показывает цену, остаток и сертификат, подбирает аналог при…
О проекте
Команда: 2Qwants
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Рабочий MVP
Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина
Суть
Чат-консультант по синтетическому каталогу ekt.kz: ищет товар по артикулу и тексту, показывает цену, остаток и сертификат, подбирает аналог при нулевом остатке и добавляет в корзину только после подтверждения.
Как устроено
Frontend на vanilla JS (чат, карточки, сравнение, корзина, 3D-просмотр товара) обращается к FastAPI с маршрутами chat, catalog, cart и health. CatalogService ищет по products.json и подбирает аналоги, CartService хранит корзину в памяти по session_id. Эндпоинт /api/cart/confirm отклоняет добавление без подтверждения в чате или при превышении остатка. Внешняя LLM не используется, ответы формируются локальной логикой.
Ключевые решения
- поиск по артикулу, названию и категории
- подбор аналога при отсутствии
- серверная проверка остатка
- подтверждение перед изменением корзины
Особенности
Изменение корзины защищено на сервере: без явного подтверждения в диалоге эндпоинт не пропускает операцию. Есть автономное визуальное демо и интерактивный 3D-просмотр товаров.
Стек
Python · FastAPI · Uvicorn · Pydantic · HTML/CSS/JavaScript · pytest
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-6bd29a3e-2qwants.
README
README.mdHACKALEM AI — Quant
ИИ-помощник-консультант для интернет-магазина электротехнической продукции ТОО «Электрокомплект» (ekt.kz).
Quant понимает запросы обычным языком, ищет товары в каталоге, показывает характеристики и наличие, подбирает аналог при отсутствии позиции и добавляет товар в корзину только после явного подтверждения пользователя.
Проект — MVP-прототип conversational shopping assistant. Каталог, цены, остатки и документы в демо синтетические и не являются данными ekt.kz.
Возможности
- поиск по артикулу, названию, категории и свободному тексту;
- ответы по цене, остатку, характеристикам и сертификату;
- подбор и объяснение релевантного аналога, если товара нет;
- сравнение нескольких подходящих товаров;
- ответы по условиям покупки, оплате, доставке и минимальной партии;
- подтверждение количества перед изменением корзины;
- серверная проверка товара и остатка;
- адаптивное автономное UI-демо для desktop и mobile;
- русский и казахский режимы в визуальном демо.
Пользовательский сценарий
Запрос клиента
↓
Поиск по каталогу
↓
Ответ, карточки или аналог
↓
Подтверждение количества
↓
Проверка остатка на сервере
↓
Корзина и ссылка на оформление
Пример диалога:
Клиент: Есть ли автомат ВА47-29 2P C16?
Quant: Да, 42 шт. Цена — 1 850 ₸. Показать характеристики и сертификат?
Клиент: Добавь 2 штуки в корзину.
Quant: Добавить 2 шт.? Остаток — 42 шт.
Клиент: Да, добавь.
Quant: Товар добавлен. Открыть корзину?
Без отдельного подтверждения endpoint корзины отклоняет операцию.
Архитектура
┌─────────────────────────────────────────────┐
│ Frontend: чат, карточки, сравнение, корзина │
│ visual-demo.html + demo.js + styles.css │
└──────────────────────┬──────────────────────┘
│ HTTP JSON API
┌──────────────────────▼──────────────────────┐
│ FastAPI: chat, catalog, cart, health │
└───────────────┬──────────────────┬───────────┘
│ │
┌────────▼────────┐ ┌───────▼────────┐
│ CatalogService │ │ CartService │
│ товары, поиск, │ │ сессии, сумма, │
│ аналоги │ │ подтверждение │
└────────┬────────┘ └───────┬────────┘
└──────────┬───────┘
▼
backend/data/products.json
Технологии
- Backend: Python 3.11+, FastAPI, Uvicorn, Pydantic.
- Frontend: HTML, CSS и vanilla JavaScript без сборщика.
- Данные: JSON-каталог для MVP.
- Хранение корзины: память процесса, разделённая по
session_id. - LLM: в текущем MVP внешний LLM не требуется; ответы формируются локальной логикой.
API
Проверка состояния
GET /api/health
{"status":"ok","service":"ekt-assistant"}
Чат
POST /api/chat
Content-Type: application/json
{
"message": "Есть ли автомат ВА47-29 2P C16?",
"session_id": "demo-session-001"
}
Ответ содержит session_id, текстовое message, найденные products, а для операции добавления — requires_confirmation и action.
Каталог
GET /api/products
Возвращает элементы каталога из backend/data/products.json.
Корзина
GET /api/cart/{session_id}
POST /api/cart/confirm
Тело запроса подтверждения:
{
"session_id": "demo-session-001",
"sku": "EK-VA4729-C16",
"quantity": 2
}
POST /api/cart/confirm возвращает ошибку, если пользователь не подтвердил добавление в чате, товар не найден или количество превышает остаток.
Быстрый запуск
Требуется Python 3.11+.
git clone https://github.com/BAITC-Hacks/hack-6bd29a3e-2qwants.git
cd hack-6bd29a3e-2qwants
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r backend/requirements.txt
uvicorn app.main:app --app-dir backend --reload
После запуска:
- интерфейс: http://127.0.0.1:8000;
- Swagger UI: http://127.0.0.1:8000/docs;
- health check: http://127.0.0.1:8000/api/health.
Автономное демо
UI без backend можно открыть напрямую:
open frontend/visual-demo.html # macOS
Демо показывает сценарий работы Quant, карточки товаров, сравнение, подтверждение количества, историю чатов, корзину в рамках текущей вкладки и режимы desktop/mobile. Все данные в нём синтетические; оформление реального заказа не выполняется.
Тесты
pip install -r backend/requirements-dev.txt
pytest backend/tests
Проверяются поиск товара, выдача аналога при нулевом остатке, обязательное подтверждение корзины и режим сравнения.
Для быстрой проверки frontend-демо на macOS:
/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Helpers/jsc frontend/demo-smoke.js
Структура проекта
.
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI endpoints
│ │ ├── catalog.py # каталог, поиск и аналоги
│ │ ├── chat.py # диалоговая логика и подтверждение
│ │ └── cart.py # корзина MVP
│ ├── data/products.json # синтетический каталог
│ ├── requirements.txt
│ └── tests/test_smoke.py
├── frontend/
│ ├── index.html # входная страница
│ ├── visual-demo.html # автономное визуальное демо
│ ├── demo.js # логика демо без API
│ ├── demo-smoke.js # smoke-проверка frontend
│ ├── styles.css # адаптивные стили
│ └── quant-icon.png # иконка Quant
├── docs/ # концепция, архитектура и планы
└── .env.example # настройки окружения
Ограничения MVP
- каталог и остатки не подключены к реальному API ekt.kz;
- корзина хранится в памяти и очищается после перезапуска backend;
- авторизация, база данных и реальное оформление заказа не подключены;
- автономное визуальное демо не отправляет запросы в backend;
- сертификаты и медиафайлы в демо являются тестовыми материалами;
- неизвестные характеристики не должны выдумываться — в таком случае ассистент запрашивает уточнение.
Документация
- Концепция продукта
- Техническая архитектура
- План проекта
- План frontend и логики
- Передача frontend на интеграцию с backend
- Чек-лист демо
- Референсы Kasper и ekt.kz
Следующий этап
- Подключить реальный каталог, остатки и цены ekt.kz.
- Перенести сессии и корзины из памяти в БД или кэш.
- Добавить авторизацию, аудит действий и безопасное оформление заказа.
- Подключить RAG по каталогу, сертификатам и правилам покупки.
- Добавить казахский язык, эскалацию менеджеру и продуктовые метрики.
Авторы коммитов
История коммитов
- 2026-09-23 17:54docs: refresh project READMEunfouded_0808
- 2026-09-23 17:53Merge frontend media and 3D with Quant backend integrationАбилхан Нурали
- 2026-09-23 17:50feat: refine Quant replies and inline product controlsАбилхан Нурали
- 2026-09-23 17:48feat(frontend): add product photos, interactive 3D and API integrationunfouded_0808
- 2026-09-23 17:28feat: connect Quant frontend to backendАбилхан Нурали
- 2026-09-23 17:19Merge remote-tracking branch 'origin/main' into feature/problem-advisorАбилхан Нурали
- 2026-09-23 17:19feat: add problem-based product advisorАбилхан Нурали
- 2026-09-23 17:02feat(frontend): finalize Quant visual demo and handoffunfouded_0808
Все коммиты (12)
- 2026-09-23 16:57feat: implement Quant backend assistantАбилхан Нурали
- 2026-09-23 13:43Merge remote repository historyunfouded_0808
- 2026-09-23 13:41Document frontend logic planunfouded_0808
- 2026-09-23 13:32Initial project commitunfouded_0808
Структура репозитория (44 файлов)
.env.example .gitignore README.md backend/app/__init__.py backend/app/cart.py backend/app/catalog.py backend/app/chat.py backend/app/main.py backend/data/certificates/va4729.html backend/data/certificates/vvg.html backend/data/demo_specification.csv backend/data/products.json backend/requirements-dev.txt backend/requirements.txt backend/tests/test_smoke.py docs/ARCHITECTURE.md docs/CONCEPT.md docs/DEMO_CHECKLIST.md docs/FRONTEND_BACKEND_HANDOFF.md docs/FRONTEND_LOGIC_PLAN.md docs/INTEGRATION_RUN.md docs/PARTNER_AND_USER_WORKPLAN.md docs/PRODUCT_MEDIA.md docs/PROJECT_PLAN.md docs/REFERENCES.md frontend/api-bridge-smoke.js frontend/api-bridge.js frontend/assets/products/breaker-c16.png frontend/assets/products/breaker-c25.png frontend/assets/products/cable-vvg.jpg frontend/assets/products/light-ringo.jpg frontend/backend-catalog.json frontend/demo-certificates.html frontend/demo-smoke.js frontend/demo.js frontend/index.html frontend/product-3d.js frontend/product-media-smoke.js frontend/product-media.css frontend/product-media.js frontend/quant-icon.png frontend/styles.css frontend/visual-demo.html hackalem-ai.code-workspace
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.