AAYMA
RU
Войти

HACKALEM AI / ekt-ai-assistant

ИИ-ассистент для магазина ekt.kz: поиск электротехнических товаров, характеристики, остатки, аналоги с объяснением и добавление в корзину (по одному…

Прототип
Команда «Moriarty» 2💬 0 комментариевс 22 сентября 2026 г.

О проекте

Команда: Moriarty
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Прототип

Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина

Суть

ИИ-ассистент для магазина ekt.kz: поиск электротехнических товаров, характеристики, остатки, аналоги с объяснением и добавление в корзину (по одному или пачкой) после явного подтверждения. Работает на снимке каталога из 40 товаров.

Как устроено

Модуль packages/ai на TypeScript (intent, planner, reasoning, session, snapshot) определяет намерение и контекст, подбирает аналоги с объяснением, считает смету по файлу спецификации, защищает от prompt injection и отслеживает свежесть данных. Каталог импортируется из JSON-снимка страниц API ekt.kz. Отдельный Node-бэкенд нормализует каталог. UI на Next.js: чат, карточки товаров, модалка подтверждения корзины. Настоящий EKT API и LLM-провайдер подключаются через интерфейсы.

Ключевые решения

  • intent detection
  • планировщик действий
  • подбор аналогов по параметрам
  • подтверждение корзины
  • защита от prompt injection
  • freshness-индикатор данных

Особенности

README в основном на казахском, есть примеры запросов на KZ и RU. Ассистент явно показывает противоречие 160 А / 250 А и не выдумывает остатки, которых нет в снимке. История коммитов хаотичная: удаления, revert и восстановление веток, в README описан Frontend/, которого уже нет в дереве.

Стек

TypeScript · Node.js · Next.js · React · Playwright


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-bd6be362-moriarty.

README

README.md

AI/Agent модулі

AI/Agent тапсырмасы TypeScript түрінде packages/ai ішіне қосылды. Іске қосу: npm ci --ignore-scripts, npm run typecheck, npm test, npm run demo:ai (Node.js 24+).

11.txt қосылды: 2 беттегі 40 тауар және бір толық detail. npm run demo:ai осы файлдан импортталған каталогты қолданады. Бұл онлайн API емес; файлда жоқ қалдықтар белгісіз болып қалады, 160А/250 А қайшылығы көрсетіледі. Каталог деректері. Синтетикалық демо: npm run demo:synthetic.

Толық нұсқаулық, backend/frontend contract-тері және KZ/RU мысалдар: packages/ai/README.md. Модульде intent/context, аналог түсіндіру, бөлек растаумен single/bulk cart, файл спецификациясының есебі, injection қорғанысы, freshness және feedback бар. Нақты EKT API, LLM провайдері және binary файл extractor-ы интеграция интерфейстері арқылы қосылады.

Төмендегі бұрынғы архитектура мәтіні өзгертілмеді; онда аталған Frontend/ файлдары осы жұмыс ағашында жоқ. Қазіргі орындалатын AI модулінің нұсқаулығы жоғарыдағы сілтемеде.

Жоба архитектурасы

Жоба ekt.kz интернет-дүкеніне арналған ЖИ-ассистент ретінде құрылған. Жүйенің негізгі мақсаты — пайдаланушыға қажетті электротехникалық тауарды табуға, оның техникалық сипаттамаларын көруге, қоймадағы бар-жоғын тексеруге, аналогтарын таңдауға және тауарды себетке қосуға көмектесу.

Жүйе бірнеше негізгі компоненттен тұрады: ┌──────────────────────────────┐ │ Пайдаланушы │ │ ekt.kz сайтының клиенті │ └──────────────┬───────────────┘ │ │ Сұраныс ▼ ┌──────────────────────────────┐ │ Frontend │ │ │ │ Website + AI Chat UI │ │ • Чат интерфейсі │ │ • Тауарларды көрсету │ │ • Аналогтарды көрсету │ │ • Себет │ └──────────────┬───────────────┘ │ │ HTTP / API ▼ ┌──────────────────────────────┐ │ Backend API │ │ │ │ Сұраныстарды қабылдау │ │ және сервистерге бағыттау │ └──────────────┬───────────────┘ │ ┌───────┼─────────┐ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ AI │ │ Product │ │ Cart │ │Assistant │ │ Service │ │ Service │ │ │ │ │ │ │ │ Сұрақты │ │ Каталог │ │ Растау │ │ түсіну │ │ Іздеу │ │ Себет │ │ │ │ Қалдық │ │ Саны │ │ Жауап │ │ Аналог │ │ │ │ құру │ │ │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └────────────┼────────────┘ │ ▼ ┌───────────────────┐ │ Database │ │ │ │ • Products │ │ • Categories │ │ • Stock │ │ • Certificates │ │ • Cart │ └───────────────────┘

Frontend

Frontend — пайдаланушы көретін және қолданатын интерфейс.

Пайдаланушы сайттағы чат арқылы ЖИ-ассистентке сұрақ қоя алады.

Мысалы:

"ABB C16 автоматы бар ма?"

немесе:

"Осы тауарға аналог тауып бер."

Frontend пайдаланушының сұранысын Backend API-ге жібереді және алынған жауапты экранда көрсетеді.

Frontend негізгі мүмкіндіктері:

  • ЖИ-ассистентпен чат;
  • тауар туралы ақпаратты көрсету;
  • техникалық сипаттамаларды көрсету;
  • баға мен қоймадағы қалдықты көрсету;
  • аналогтарды көрсету;
  • тауарды себетке қосу;
  • себетке немесе тапсырысты рәсімдеу бетіне өту.

Backend API

Backend API — Frontend пен жүйенің ішкі сервистері арасындағы негізгі байланыс қабаты.

Backend келесі міндеттерді орындайды:

  • пайдаланушы сұранысын қабылдау;
  • сұранысты AI Assistant-ке жіберу;
  • каталогтан қажетті ақпаратты алу;
  • қоймадағы қалдықты тексеру;
  • аналогтарды іздеу;
  • себет операцияларын орындау;
  • нәтижені Frontend-ке қайтару.

Жалпы сұраныс ағыны:

Frontend │ ▼ Backend API │ ├── AI Assistant ├── Product Service └── Cart Service

AI Assistant

AI Assistant — жүйенің интеллектуалды бөлігі.

Ол пайдаланушының еркін түрде жазылған сұрағын түсініп, қандай әрекет қажет екенін анықтайды.

Мысалы:

Пайдаланушы: "Маған 16 амперлік автомат керек."

AI Assistant сұранысты талдап, Product Service арқылы сәйкес тауарларды іздейді.

AI Assistant келесі сұраныстарды өңдей алады:

  • тауар іздеу;
  • тауар сипаттамасын сұрау;
  • сертификатты сұрау;
  • қоймадағы қалдықты тексеру;
  • аналог іздеу;
  • сатып алу шарттарын сұрау;
  • тауарды себетке қосуға дайындық.

AI Assistant каталогтағы нақты деректерге сүйеніп жауап беруі тиіс. Product Service

Product Service — каталогтағы тауарлармен жұмыс істейтін компонент.

Ол келесі ақпаратты өңдейді:

Product ├── ID / Артикул ├── Атауы ├── Санаты ├── Бағасы ├── Техникалық сипаттамалары ├── Сертификат ├── Қоймадағы саны └── Қолжетімділік мәртебесі

Product Service келесі операцияларды орындайды:

  • артикул бойынша іздеу;
  • атауы бойынша іздеу;
  • санаты бойынша іздеу;
  • техникалық параметрлер бойынша іздеу;
  • қоймадағы қалдықты тексеру;
  • тауардың аналогтарын іздеу.

Егер пайдаланушы сұраған тауар қоймада болмаса, жүйе техникалық сипаттамалары ұқсас тауарларды тауып, аналог ретінде ұсынады.

Мысалы: Сұралған тауар: ABB S201 C16

Қалдық: 0 дана

Ұсынылған аналог: Schneider Electric C16

Себебі: Номиналды ток және негізгі техникалық параметрлері ұқсас.

Cart Service

Cart Service — пайдаланушы себетін басқаруға арналған компонент.

Жүйенің маңызды ережесі:

Тауар пайдаланушының нақты растауынсыз себетке қосылмайды.

Мысалы:

User: "Осы тауардан 2 дана керек."

AI Assistant: "2 данасын себетке қосайын ба?"

User: "Иә, қос."

AI Assistant: "Тауар себетке қосылды."

Растау алынғаннан кейін жүйе:

User Confirmation │ ▼ Stock Check │ ▼ Quantity Check │ ▼ Cart Service │ ▼ Add to Cart │ ▼ Checkout Link

Егер пайдаланушы 10 дана сұрап, қоймада тек 5 дана болса, жүйе 10 дананы себетке қоспайды және қолжетімді сан туралы хабарлайды.

Database

Database — жүйенің каталогы мен қажетті деректерін сақтау үшін қолданылады.

Негізгі деректер:

Database │ ├── Products │ ├── id │ ├── article │ ├── name │ ├── category │ ├── price │ └── specifications │ ├── Stock │ ├── product_id │ ├── warehouse │ └── quantity │ ├── Certificates │ ├── product_id │ └── certificate_url │ └── Cart ├── product_id └── quantity

Хакатон прототипінде тестілік немесе синтетикалық каталог деректерін пайдалануға болады.

Кейін жүйені нақты ekt.kz каталог API-іне қосуға болады.

Жүйенің жұмыс істеу логикасы

Қарапайым сұраныс:

User │ │ "ABB C16 бар ма?" ▼ Frontend │ ▼ Backend API │ ▼ AI Assistant │ ▼ Product Service │ ▼ Database │ ▼ Product Service │ ▼ AI Assistant │ ▼ Backend │ ▼ Frontend │ ▼ User

Тауар болмаған жағдайда

text User Request │ ▼ Product Search │ ▼ Stock = 0 │ ▼ Alternative Search │ ▼ Similar Products │ ▼ AI Explanation │ ▼ User

Себетке қосу кезінде

text User │ │ "2 дана себетке қос" ▼ AI Assistant │ │ "2 дана қосайын ба?" ▼ User Confirmation │ │ "Иә" ▼ Stock Check │ ▼ Cart Service │ ▼ Add to Cart │ ▼ Checkout Link

Ұсынылатын жоба құрылымы text project/ │ ├── frontend/ │ ├── index.html │ ├── css/ │ └── js/ │ ├── backend/ │ ├── app.py │ │ │ ├── routes/ │ │ ├── chat.py │ │ ├── products.py │ │ └── cart.py │ │ │ └── services/ │ ├── ai_service.py │ ├── product_service.py │ └── cart_service.py │ ├── data/ │ ├── products.json │ └── certificates/ │ ├── README.md ├── requirements.txt └── .gitignore


 Қауіпсіздік принциптері

Жүйеде келесі шектеулер сақталады:

пайдаланушы растауынсыз себетті өзгертуге болмайды;
қоймада жоқ тауарды бар деп көрсетуге болмайды;
жалған баға беруге болмайды;
себетке қосылатын тауар саны қоймадағы қалдықтан аспауы керек;
айдаланушының төлем деректерін чат арқылы сұрауға немесе сақтауға болмайды;
ұсынылған аналогтың не себепті таңдалғаны түсіндірілуі керек.

Осы архитектура жүйені жеке компоненттерге бөліп, әр компонентті бөлек дамытуға және тестілеуге мүмкіндік береді.

## Прототиптің қазіргі мүмкіндіктері

`Frontend/` ішіндегі прототип кейс талаптарының негізгі демонстрациялық сценарийін іске асырады:

* синтетикалық каталогтан артикул, атау, санат және техникалық сипаттама бойынша іздеу;
* қоймадағы нақты санды, қойманы және тауардың қолжетімділік мәртебесін көрсету;
* каталогта бар сертификаттың сілтемесін қайтару;
* қалдығы нөл позицияға санаты, ортақ техникалық параметрлері және бағасы бойынша аналог ұсыну, себебін түсіндіру;
* төлем, жеткізу және ең аз партия туралы жауап беру;
* Excel, Word, PDF және JPEG/PNG тіркемесін чатқа қабылдау интерфейсі;
* тауар саны қойма қалдығынан аспаса ғана және пайдаланушы растағаннан кейін ғана себетке қосу;
* қосқаннан кейін `#cart` тікелей сілтемесін беру;
* төлем деректерін чатта сұрамау және сақтамау;
* белгісіз немесе күрделі сұрақты менеджерге жіберу туралы хабарлау.

## Іске қосу

`Frontend/start.bat` файлын екі рет басыңыз. Ол Python тәуелділіктерін дайындап, FastAPI серверін іске қосады. Немесе терминалда:

```powershell
Set-Location Frontend
.\start.bat

Браузерде http://127.0.0.1:8000 мекенжайын ашыңыз. Толық нұсқаулық: Frontend/README.md.

SQLite дерекқоры: Frontend/data/app.sqlite3. Бөлек MySQL/PostgreSQL орнату қажет емес. Базаны дайындау/тексеру: Frontend/init-db.bat. SQL схемасы: Frontend/data/schema.sql. База тауарларды, сессияларды, себеттерді, растау ұсыныстарын және чат тарихын сақтайды.

Демонстрациялық тесттер

Чатта мына сұраныстарды тексеруге болады:

  • ABB-S201-C16 сертификаты бар ма? — баға, сипаттама, қалдық және сертификат сілтемесі;
  • IEK C25 жоқ болса, аналог бер — қалдығы нөл позиция және ұқсас аналогтың негіздемесі;
  • Төлем, жеткізу және ең аз партия қандай? — сатып алу шарттары;
  • ABB C16 автоматтан 2 дана керек — қойма тексеруі, растау модалы және растаудан кейін #cart сілтемесі.

Деректер және production келесі қадамдары

SQLite базасында 24 демо тауар (Frontend/data/products.json) және пайдаланушының JSON файлдарынан импортталған 20 EKT тауары (Frontend/data/ekt-products.json) бар. Негізгі каталог әдепкіде EKT деректерін көрсетеді. Қайта импорт: Frontend/import-ekt.bat. 3414970344526 штрихкодымен Legrand тауарын тексеруге болады: файлдағы бағасы 64 920 ₸, қалдығы 23 дана. Қалған 19 тауардың қалдығы берілмеген және белгісіз деп көрсетіледі. Деректер онлайн жаңартылмайды; себет пен жеткізу жергілікті прототип ретінде жұмыс істейді. API кілті серверде ғана сақталады.

Звёзды
⭐ 0
Форки
0
Язык
TypeScript
Последний push
в прошлом месяце
Коммиты
32
Авторы
5
Файлы
93
Ветки
5

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

Bekarys Noke 13Cerik222 7Nokeyev06 6Cerik222 4tiderk2-source 2

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

  • 2026-09-23 17:57Merge pull request #4 from BAITC-Hacks/frontend/restore-ektCerik222
  • 2026-09-23 17:56Restore ekt-ai-assistant frontendCerik222
  • 2026-09-23 17:53Add README for HACKALEM AI projectNokeyev06
  • 2026-09-23 17:49Merge pull request #3 from BAITC-Hacks/revert-1-frontend/hackalem-uiCerik222
  • 2026-09-23 17:48addCerik222
  • 2026-09-23 17:42Merge remote-tracking branch 'origin/main' into integration/all-work-20260923Bekarys Noke
  • 2026-09-23 17:40Merge AI agent, frontend and backend workBekarys Noke
  • 2026-09-23 17:39Merge pull request #2 from BAITC-Hacks/ai/restore-agent-20260923Nokeyev06
Все коммиты (32)
  • 2026-09-23 17:35Restore AI agent and imported EKT catalogBekarys Noke
  • 2026-09-23 17:32Merge remote changesBekarys Noke
  • 2026-09-23 17:28Update README filesBekarys Noke
  • 2026-09-23 17:26редактирование нового Backendtiderk2-source
  • 2026-09-23 17:26Revert "Frontend/hackalem UI"Cerik222
  • 2026-09-23 17:25Delete README.mdNokeyev06
  • 2026-09-23 17:25Delete packages directoryNokeyev06
  • 2026-09-23 17:24Merge pull request #1 from BAITC-Hacks/frontend/hackalem-uiCerik222
  • 2026-09-23 17:20Delete Frontend directoryNokeyev06
  • 2026-09-23 17:18Add HACKALEM AI frontendCerik222
  • 2026-09-23 17:11Remove hackalem-ai fileCerik222
  • 2026-09-23 17:10Create hackalem-aiCerik222
  • 2026-09-23 17:02Merge remote-tracking branch 'origin/main' into codex/sync-ai-catalogBekarys Noke
  • 2026-09-23 16:59Add AI agent and imported EKT catalogBekarys Noke
  • 2026-09-23 16:18Delete иви.pyNokeyev06
  • 2026-09-23 15:58Frontend өзгерістеріCerik222
  • 2026-09-23 15:52редактирование текущего кодаtiderk2-source
  • 2026-09-23 15:15Add project architecture to FrontendBekarys Noke
  • 2026-09-23 14:52Add project architecture to FrontendBekarys Noke
  • 2026-09-23 14:33Add project architecture to FrontendBekarys Noke
  • 2026-09-23 14:20Add project architecture to FrontendBekarys Noke
  • 2026-09-23 13:35Add project architecture to READMEBekarys Noke
  • 2026-09-23 10:09Delete dc.pyCerik222
  • 2026-09-22 20:59Initial commitBekarys Noke
Структура репозитория (93 файлов)
.gitignore
Backend/.env.example
Backend/.gitignore
Backend/README.md
Backend/data/detail-515291.json
Backend/data/page-1.json
Backend/data/page-2.json
Backend/package.json
Backend/src/catalog.js
Backend/src/client.js
Backend/src/normalize.js
Backend/src/server.js
Backend/test/backend.test.js
Frontend
README.md
ekt-ai-assistant/README.md
ekt-ai-assistant/apps/web/.env.example
ekt-ai-assistant/apps/web/.gitignore
ekt-ai-assistant/apps/web/AGENTS.md
ekt-ai-assistant/apps/web/CLAUDE.md
ekt-ai-assistant/apps/web/app/globals.css
ekt-ai-assistant/apps/web/app/layout.tsx
ekt-ai-assistant/apps/web/app/page.tsx
ekt-ai-assistant/apps/web/next-env.d.ts
ekt-ai-assistant/apps/web/next.config.ts
ekt-ai-assistant/apps/web/package.json
ekt-ai-assistant/apps/web/playwright.config.ts
ekt-ai-assistant/apps/web/pnpm-lock.yaml
ekt-ai-assistant/apps/web/postcss.config.mjs
ekt-ai-assistant/apps/web/src/components/cart/CartSuccess.tsx
ekt-ai-assistant/apps/web/src/components/cart/ConfirmationModal.tsx
ekt-ai-assistant/apps/web/src/components/chat/ChatHeader.tsx
ekt-ai-assistant/apps/web/src/components/chat/ChatLauncher.tsx
ekt-ai-assistant/apps/web/src/components/chat/ChatPanel.tsx
ekt-ai-assistant/apps/web/src/components/chat/MessageBubble.tsx
ekt-ai-assistant/apps/web/src/components/chat/MessageComposer.tsx
ekt-ai-assistant/apps/web/src/components/chat/MessageList.tsx
ekt-ai-assistant/apps/web/src/components/chat/QuickSuggestions.tsx
ekt-ai-assistant/apps/web/src/components/compare/ProductCompareView.tsx
ekt-ai-assistant/apps/web/src/components/estimate/SpecEstimateView.tsx
ekt-ai-assistant/apps/web/src/components/feedback/MessageFeedback.tsx
ekt-ai-assistant/apps/web/src/components/files/FileAttachmentPreview.tsx
ekt-ai-assistant/apps/web/src/components/files/FileUploader.tsx
ekt-ai-assistant/apps/web/src/components/product/AnalogCard.tsx
ekt-ai-assistant/apps/web/src/components/product/CertificateList.tsx
ekt-ai-assistant/apps/web/src/components/product/DataFreshnessBadge.tsx
ekt-ai-assistant/apps/web/src/components/product/DataWarning.tsx
ekt-ai-assistant/apps/web/src/components/product/ProductCard.tsx
ekt-ai-assistant/apps/web/src/components/product/ProductDetails.tsx
ekt-ai-assistant/apps/web/src/components/product/StockList.tsx
ekt-ai-assistant/apps/web/src/demo/demoResponses.ts
ekt-ai-assistant/apps/web/src/hooks/useChat.ts
ekt-ai-assistant/apps/web/src/hooks/useFileUpload.ts
ekt-ai-assistant/apps/web/src/lib/api.ts
ekt-ai-assistant/apps/web/src/lib/format.ts
ekt-ai-assistant/apps/web/src/lib/session.ts
ekt-ai-assistant/apps/web/src/lib/validation.ts
ekt-ai-assistant/apps/web/src/types/contract.ts
ekt-ai-assistant/apps/web/src/types/ui.ts
ekt-ai-assistant/apps/web/tests/integration.spec.ts
ekt-ai-assistant/apps/web/tsconfig.json
ekt-ai-assistant/docs/demo-script.md
ekt-ai-assistant/docs/files-created.md
ekt-ai-assistant/docs/frontend-integration.md
ekt-ai-assistant/docs/verification.md
ekt-ai-assistant/screenshots/desktop-chat.png
ekt-ai-assistant/screenshots/desktop-home.png
ekt-ai-assistant/screenshots/mobile-chat.png
ekt-ai-assistant/screenshots/mobile-confirmation.png
package-lock.json
package.json
packages/ai/README.md
packages/ai/data/README.md
packages/ai/data/ekt-snapshot.json
packages/ai/examples/demo-backend.ts
packages/ai/examples/demo.ts
packages/ai/examples/snapshot-demo.mjs
packages/ai/scripts/import-snapshot.mjs
packages/ai/src/contracts.ts
packages/ai/src/controller.ts
packages/ai/src/files.ts
packages/ai/src/index.ts
packages/ai/src/intent.ts
packages/ai/src/planner.ts
packages/ai/src/prompt.ts
packages/ai/src/reasoning.ts
packages/ai/src/schemas.ts
packages/ai/src/session.ts
packages/ai/src/snapshot.ts
packages/ai/test/agent.test.mjs
packages/ai/test/snapshot.test.mjs
packages/shared/types.ts
tsconfig.json
Ветки (5)

Обсуждение 0 комментариев

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

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