AAYMA
RU
Войти

Quant

Чат-консультант по синтетическому каталогу ekt.kz: ищет товар по артикулу и тексту, показывает цену, остаток и сертификат, подбирает аналог при…

Рабочий MVP
Команда «2Qwants» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

HACKALEM 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

После запуска:

Автономное демо

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;
  • сертификаты и медиафайлы в демо являются тестовыми материалами;
  • неизвестные характеристики не должны выдумываться — в таком случае ассистент запрашивает уточнение.

Документация

Следующий этап

  1. Подключить реальный каталог, остатки и цены ekt.kz.
  2. Перенести сессии и корзины из памяти в БД или кэш.
  3. Добавить авторизацию, аудит действий и безопасное оформление заказа.
  4. Подключить RAG по каталогу, сертификатам и правилам покупки.
  5. Добавить казахский язык, эскалацию менеджеру и продуктовые метрики.
Звёзды
⭐ 0
Форки
0
Язык
JavaScript
Последний push
в прошлом месяце
Коммиты
12
Авторы
2
Файлы
44
Ветки
2

Авторы коммитов

unfouded_0808 6Абилхан Нурали 6

История коммитов

  • 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 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.