О проекте
Команда: egin.ai
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Рабочий MVP
Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным
Суть
Система прогноза выработки ветропарка из двух турбин на 24 или 48 часов. По прогнозу она считает выручку, штраф за дисбаланс и уровень риска и выдаёт рекомендацию оператору, а AI-агент объясняет результат.
Как устроено
Исторические CSV турбин загружаются в SQLite и проходят проверку качества. По ним калибруется power curve с расчётом MAE/RMSE. Прогноз ветра берётся из Open-Meteo Single Runs API и переводится в мощность по калиброванной кривой, модель проверяется walk-forward симуляцией на архивной погоде. Модуль business impact считает выработку, выручку, потенциальный штраф, часы низкой уверенности и резкие изменения ветра. Агентный цикл на OpenAI Responses API с инструментами над датасетом даёт структурированное объяснение, есть детерминированный fallback.
Ключевые решения
- калибровка power curve
- walk-forward validation
- MAE/RMSE
- agent loop с инструментами
- расчёт штрафа за дисбаланс
Особенности
Прогноз мощности переводится в бизнес-показатели: выручку, штраф за дисбаланс и риск с рекомендацией оператору. Прогноз проверяется walk-forward на архивных прогнозах погоды. Интерфейс переведён на русский, английский и казахский.
Стек
TypeScript · React 19 · Vite · Tailwind CSS · i18next · Express 5 · Node.js SQLite · Open-Meteo API
Модели
OpenAI Responses API
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-8732ded2-egin-ai.
README
README.mdWindCast Agent
WindCast Agent — система прогнозирования генерации ветропарка, которая переводит прогноз ветра в бизнес-решение: ожидаемую выработку, выручку, риск дисбаланса и рекомендацию для оператора.
Подробный рассказ для жюри: docs/README.md.
Результат интерфейса

Почему это важно
Прогноз погоды не показывает, сколько энергии реально попадёт в сеть и сколько будет стоить ошибка. WindCast Agent объединяет исторические данные турбин, прогноз ветра и коммерческие параметры, чтобы заранее подготовить план поставки и резерв.
Что умеет продукт
- прогнозировать мощность по двум турбинам на 24 или 48 часов;
- проверять качество входных CSV-данных;
- калибровать power curve и показывать MAE/RMSE;
- рассчитывать выработку, выручку и потенциальный штраф;
- находить часы низкой уверенности и резкие изменения ветра;
- выдавать уровень риска и понятную операционную рекомендацию;
- объяснять прогноз через AI или надёжный детерминированный fallback;
- проверять модель на исторических данных через walk-forward simulation.
Технологии
Frontend
React 19.1.0, React DOM 19.1.0, TypeScript ~5.8.3, Vite ^6.3.5, React Router DOM ^7.18.4, Axios ^1.8.4, Tailwind CSS ^3.4.17, i18next ^26.4.2, react-i18next ^17.0.15, lucide-react ^0.511.0, @radix-ui/react-slot ^1.2.3, class-variance-authority ^0.7.1, clsx ^2.1.1, tailwind-merge ^3.3.0.
Инструменты: @vitejs/plugin-react ^4.5.2, ESLint ^9.29.0, @eslint/js ^9.29.0, typescript-eslint ^8.34.0, eslint-plugin-react-hooks ^5.2.0, eslint-plugin-react-refresh ^0.4.20, @types/node ^22.15.30, @types/react ^19.1.8, @types/react-dom ^19.1.6, PostCSS ^8.5.4, Autoprefixer ^10.4.21, globals ^15.15.0.
Backend
Express ^5.1.0, CORS ^2.8.5, dotenv ^16.5.0, Multer ^2.4.0, TypeScript ^5.8.3, встроенный Node.js SQLite, Open-Meteo Single Runs API и OpenAI Responses API.
Инструменты: tsx ^4.19.4, @types/cors ^2.8.17, @types/express ^5.0.1, @types/multer ^2.2.0, @types/node ^22.15.30.
Запуск проекта
Frontend и backend запускаются в отдельных терминалах:
cd frontend
npm install
npm run dev
cd backend
npm install
copy .env.example .env
npm run dev
Конфигурация берётся из примеров:
- backend/.env.example — порт, координаты турбин, OpenAI, Open-Meteo и коммерческие значения;
- frontend/.env.example — адрес backend через
VITE_API_URL.
Frontend: http://localhost:5173
API: http://localhost:3000/api/health
API
Основной бизнес-результат возвращает POST /api/wind-farm/business-impact. Остальные маршруты и формат ответа описаны в docs/README.md.
Не добавляйте .env, API-ключи и другие секреты в Git.
Авторы коммитов
История коммитов
- 2026-09-23 17:49test: add frontend localization test and dashboard screenshotjupiteror
- 2026-09-23 17:46feat: localize dataset upload controlsjupiteror
- 2026-09-23 17:42docs: add project overview and hackathon demo guidejupiteror
- 2026-09-23 17:40merge: make walk-forward demo-readyjupiteror
- 2026-09-23 17:40fix: keep walk-forward forecasts without actual test datajupiteror
- 2026-09-23 17:31merge: integrate dataset upload and archival weather fixjupiteror
- 2026-09-23 17:31feat: add sqlite dataset upload and archival run sourcejupiteror
- 2026-09-23 17:20merge: integrate frontend operations pagesjupiteror
Все коммиты (35)
- 2026-09-23 17:19feat: add frontend operations pages and app routerjupiteror
- 2026-09-23 17:12merge: integrate frontend localizationjupiteror
- 2026-09-23 17:11feat: add ru en kk frontend localizationjupiteror
- 2026-09-23 17:04fix: support calibration debugging and validate port envjupiteror
- 2026-09-23 17:00merge: integrate wind farm frontend dashboardjupiteror
- 2026-09-23 16:59feat: add wind farm forecast dashboardjupiteror
- 2026-09-23 16:48merge: align forecast window with issue datejupiteror
- 2026-09-23 16:48fix: start forecasts after issue datejupiteror
- 2026-09-23 16:43merge: enforce 24 to 48 hour forecast contractjupiteror
- 2026-09-23 16:43fix: enforce complete 24 to 48 hour forecastsjupiteror
- 2026-09-23 16:38fix: harden dataset and walk-forward routesjupiteror
- 2026-09-23 16:33merge: integrate wind farm business impact featurejupiteror
- 2026-09-23 16:32feat: add wind farm business impact APIjupiteror
- 2026-09-23 16:20chore: configure API endpoints through envjupiteror
- 2026-09-23 16:03fix: return structured OpenAI agent analysisjupiteror
- 2026-09-23 15:56merge: integrate agent explanation featurejupiteror
- 2026-09-23 15:54feat: add agentic forecast explanation loopjupiteror
- 2026-09-23 15:42merge: integrate archival weather simulation featurejupiteror
- 2026-09-23 15:42feat: add archival weather walk-forward simulationjupiteror
- 2026-09-23 15:26chore: record calibration runjupiteror
- 2026-09-23 15:25merge: integrate power curve calibration featurejupiteror
- 2026-09-23 15:20feat: add power curve calibration modeljupiteror
- 2026-09-23 15:11fix: resolve env and dataset path bugs #1jupiteror
- 2026-09-23 14:58merge: integrate dataset loading featurejupiteror
- 2026-09-23 14:55chore: add backend startup loggerjupiteror
- 2026-09-23 14:45feat: add historical dataset ingestion APIjupiteror
- 2026-09-23 14:10feat: scaffold frontend and backend applicationsjupiteror
Структура репозитория (85 файлов)
.codex/skills/auto-commit-push/SKILL.md .codex/skills/backend-setup/SKILL.md .codex/skills/branch-workflow/SKILL.md .codex/skills/scoped-context/SKILL.md .codex/skills/shared-client-instance/SKILL.md .codex/skills/strict-typescript/SKILL.md .gitignore AGENTS.md README.md backend/.env.example backend/AGENTS.md backend/package-lock.json backend/package.json backend/src/agent/llm.ts backend/src/agent/loop.ts backend/src/agent/prompts.ts backend/src/agent/tools/dataset.ts backend/src/agent/types.ts backend/src/business/impact.ts backend/src/business/types.ts backend/src/config/forecast.ts backend/src/config/turbines.ts backend/src/data/calibration-log.json backend/src/index.ts backend/src/logger.ts backend/src/models/metrics.ts backend/src/models/powerCurve.ts backend/src/models/types.ts backend/src/routes/agent.ts backend/src/routes/businessImpact.ts backend/src/routes/calibration.ts backend/src/routes/dataset.ts backend/src/routes/datasetUpload.ts backend/src/routes/walkForward.ts backend/src/services/calibration.ts backend/src/services/calibrationLog.ts backend/src/services/walkForward.ts backend/src/storage/datasetDb.ts backend/src/tests/agent.test.ts backend/src/weather/client.ts backend/src/weather/types.ts backend/tsconfig.json docs/README.md docs/dashboard-result.png frontend/.env.example frontend/AGENTS.md frontend/components.json frontend/index.html frontend/package-lock.json frontend/package.json frontend/postcss.config.js frontend/src/app/App.tsx frontend/src/app/providers/AppProvider.tsx frontend/src/app/router.tsx frontend/src/components/ui/button.tsx frontend/src/components/ui/card.tsx frontend/src/components/ui/input.tsx frontend/src/entities/operations/model/types.ts frontend/src/entities/wind-farm/model/types.ts frontend/src/features/dataset-upload/ui/DatasetDropzone.tsx frontend/src/features/forecast-run/model/types.ts frontend/src/features/forecast-run/ui/ForecastForm.tsx frontend/src/index.css frontend/src/lib/api.ts frontend/src/lib/utils.ts frontend/src/main.tsx frontend/src/pages/calibration/ui/CalibrationPage.tsx frontend/src/pages/dashboard/ui/DashboardPage.tsx frontend/src/pages/data-quality/ui/DataQualityPage.tsx frontend/src/shared/api/operations.ts frontend/src/shared/api/windFarm.ts frontend/src/shared/i18n/i18n.test.ts frontend/src/shared/i18n/index.ts frontend/src/shared/i18n/locales/en/translate.json frontend/src/shared/i18n/locales/kk/translate.json frontend/src/shared/i18n/locales/ru/translate.json frontend/src/vite-env.d.ts frontend/src/widgets/app-shell/ui/AppShell.tsx frontend/src/widgets/forecast-dashboard/ui/HourlyForecastChart.tsx frontend/src/widgets/forecast-dashboard/ui/WindFarmDashboard.tsx frontend/tailwind.config.ts frontend/tsconfig.app.json frontend/tsconfig.json frontend/tsconfig.node.json frontend/vite.config.ts
Ветки (13)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.