False Positive
Детерминированный агент для кейса Beeline: выбирает, каким абонентам предложить смену тарифа, какой тариф и через какой канал.
О проекте
Команда: Sib
Кейс HackAlem.ai: Телеком — Beeline
Стадия: Рабочий MVP
Задача кейса: Агент, который решает, каким абонентам какой тариф предложить (чистый прирост ARPU)
Суть
Детерминированный агент для кейса Beeline: выбирает, каким абонентам предложить смену тарифа, какой тариф и через какой канал. Проводит до трёх пилотов и возвращает 1–10 кампаний. Есть демо на FastAPI и фронтенд на React.
Как устроено
Агент делит абонентов на сегменты по текущему тарифу и потреблению, предлагает следующий по цене публичный тариф и самый дешёвый канал. Затем он проводит до трёх пилотов в mock-среде и по наблюдениям выбирает допустимый финальный план; если пилоты неудачны, срабатывает fallback. Для судейства есть интерфейс agent.py:Agent.act(env), для демо — FastAPI с четырьмя эндпоинтами /api/v1 и официальным evaluator. Советник на LLM (OpenAI) опционален и в принятии решений не нужен.
Ключевые решения
- сегментация по тарифу/потреблению
- адаптивные пилоты
- fallback-стратегия
- официальный scorer/local_eval
Метрики
Seed 42: 3 пилота, 1 кампания, 1 285 контактов, net≈4 042; прибыльны 6 из 10 seed; 82 теста PASS
Особенности
Разработка шла через цепочку промптов Codex: архитектура, фронтенд, бэкенд, интеграция. Решения зафиксированы в ADR (docs/decisions), передача работы между этапами — в handoff-документах, API описан JSON-контрактами и openapi.yaml.
Стек
Python · FastAPI · React · TypeScript · Vite · Vitest · pytest
Модели
OpenAI (опционально)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-9a732c09-sib.
README
README.mdFalse Positive — Beeline Tariff Marketing Campaigns
Агент решает, каким абонентам предложить смену тарифа, какой тариф и канал выбрать. В кейсе 23 441 абонент, бюджет 100 000 у.е., максимум 15 000 контактов и 20 пилотов. Пилоты и финальные кампании расходуют общие ресурсы. Итог — 1–10 кампаний; критерий — прирост ARPU за вычетом затрат на коммуникации.
Текущий агент — детерминированный baseline: строит сегменты по текущему
тарифу и потреблению, выбирает следующий по публичной цене тариф и самый
дешёвый канал, проводит до трёх пилотов и выбирает допустимый финальный план
по наблюдениям. При неудачных пилотах возвращает fallback. Это не чат-бот:
LLM, API-ключи и .env для принятия решений не нужны.
Работают два контура:
- Judge:
agent.py:Agent.act(env) -> list[dict], независимое ядроfalse_positive/. - Demo: FastAPI
backend.app.main:app, четыре endpoint/api/v1, отдельная mock-среда на запуск и официальный evaluator для KPI. Frontend ещё не создан.
Быстрый запуск backend
Команды из корня, PowerShell. В текущей рабочей копии .venv подготовлена.
В новом клоне сначала создайте её установленным Python: py -3 -m venv .venv
(или python -m venv .venv, если Python доступен в PATH).
py -3.14 -m venv .venv
$env:PYTHONUTF8 = '1'
.\.venv\Scripts\python.exe -m pip install -r backend/requirements-dev.txt
.\.venv\Scripts\python.exe -m uvicorn backend.app.main:app --reload
API: http://127.0.0.1:8000, интерактивная документация: /docs.
Во втором терминале:
.\.venv\Scripts\python.exe -m backend.smoke
Сценарий: POST /api/v1/runs с {"seed":42,"mode":"mock"} → 202 и run_id
→ GET /api/v1/runs/{run_id} до completed или failed.
Детали и PowerShell-пример: backend/README.md.
Как тестировать агента
Из корня проекта в PowerShell. Команды организаторов:
$env:PYTHONUTF8 = '1'
$env:FP_LLM_PROVIDER = 'off'
.\.venv\Scripts\python.exe local_eval.py
.\.venv\Scripts\python.exe local_eval.py --runs 10
.\.venv\Scripts\python.exe make_submission.py
Один прогон показывает пилоты, затраты и net; десять seed — устойчивость.
make_submission.py создаёт submission.csv. Mock использует судейский
скоринг, но эффекты искусственные: результат не прогнозирует балл финала.
Полная автоматическая проверка (нужны backend/requirements-dev.txt):
.\.venv\Scripts\python.exe scripts/verify_core.py
git diff --check
Один прогон показывает пилоты, затраты и net; десять seed — устойчивость.
make_submission.py создаёт submission.csv. Mock воспроизводит механику
судейства, но не скрытые эффекты финала. Seed 42: 3 пилота, 1 финальная
кампания, 1 285 контактов, net≈4 042; из seed 0–9 прибыльны 6.
Последняя проверка: 82 tests PASS, включая реальный HTTP smoke. Полный verifier — FAIL из-за существующих CRLF в 14 organizer-файлах рабочей копии; Git HEAD и manifest совпадают. Подробности — PROJECT_STATE.
Документация и работа команды
Архитектура, API v1, состояние, правила, backend handoff. Данные синтетические; источники — THIRD_PARTY_NOTICES. Codex оставляет рабочее дерево для review; commit/push выполняет человек.
Авторы коммитов
История коммитов
- 2026-09-23 17:59Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibFlayPr
- 2026-09-23 17:54BACK-FRONT END FIX: Fixing the issue with the backend and frontend integration, ensuring that the API keys are correctly set up and that the HTTP transport layer is functioning as expected. This commiFlayPr
- 2026-09-23 17:43prepareZhan Murz
- 2026-09-23 17:30evaculate strategy fixZhan Murz
- 2026-09-23 17:01Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibZhan Murz
- 2026-09-23 16:58backend: profitability review and adaptive strategy with optional reasoning.Zhan Murz
- 2026-09-23 16:43Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibDarkend-ii
- 2026-09-23 16:38frontend fixDarkend-ii
Все коммиты (19)
- 2026-09-23 15:44Backend: Add FastAPI endpoints, isolated strategy runs, KPI validation, CORS, and API tests. Update setup documentation and backend handoff.Zhan Murz
- 2026-09-23 15:04Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibFlayPr
- 2026-09-23 15:02Выполненный первый архитектурный промпт, который описывает архитектуру проекта и его компоненты.FlayPr
- 2026-09-23 14:47Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibZhan Murz
- 2026-09-23 14:46Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibDarkend-ii
- 2026-09-23 14:45conflict markers:Darkend-ii
- 2026-09-23 14:44public data fixZhan Murz
- 2026-09-23 14:43Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9a732c09-sibFlayPr
- 2026-09-23 14:42;FlayPr
- 2026-09-23 14:41test configZhan Murz
- 2026-09-23 13:42env setZhan Murz
Структура репозитория (168 файлов)
.codex/prompts/02-frontend.md .codex/prompts/03-backend.md .codex/prompts/04-integration.md .gitattributes .gitignore AGENTS.md False_Positive_Codex_Architecture_Prompt_Sequential.md PARTICIPANT_GUIDE.md PARTICIPANT_GUIDE.pdf README.md THIRD_PARTY_NOTICES.md agent.py agent_template.py backend/.env.example backend/README.md backend/__init__.py backend/app/__init__.py backend/app/main.py backend/app/runner.py backend/app/schemas.py backend/app/service.py backend/app/summary.py backend/requirements-dev.lock backend/requirements-dev.txt backend/requirements.txt backend/smoke.py contracts/README.md contracts/campaign.schema.json contracts/examples/case-summary.json contracts/examples/error.json contracts/examples/health.json contracts/examples/run-accepted.json contracts/examples/run-completed.json contracts/examples/run-failed.json contracts/examples/run-running.json contracts/openapi.yaml customer_profile.csv data/arpu_monthly.csv data/change_tariff.csv data/dict_tariff.csv data/traffic.csv docs/ARCHITECTURE.md docs/COLLABORATION.md docs/OWNERSHIP.md docs/PROGRESS.md docs/PROJECT_STATE.md docs/VERIFICATION_REPORT.md docs/benchmarks/README.md docs/benchmarks/adaptive-diagnostic.json docs/benchmarks/adaptive-holdout.json docs/benchmarks/adaptive-initial-diagnostic.json docs/benchmarks/nvidia-smoke.json docs/benchmarks/openai-diagnostic.json docs/benchmarks/openai-smoke.json docs/decisions/0001-sequential-modular-monorepo.md docs/decisions/0002-adaptive-pilots-and-optional-llm.md docs/decisions/0003-openai-only.md docs/decisions/0004-demo-evidence-and-advisor-validation.md docs/handoffs/01-architecture-to-frontend.md docs/handoffs/02-frontend-to-backend.md docs/handoffs/02-frontend-to-backend.md.template docs/handoffs/03-backend-to-integration.md docs/handoffs/03-backend-to-integration.md.template docs/handoffs/04-adaptive-agent-to-integration.md docs/handoffs/05-openai-only-to-integration.md docs/handoffs/06-verification-to-frontend.md docs/handoffs/07-integration-to-submission.md docs/handoffs/07-requirements-check-to-integration.md docs/handoffs/08-readme-technical-review.md docs/handoffs/README.md docs/organizer-manifest.json environment.py false_positive/__init__.py false_positive/advisors/__init__.py false_positive/advisors/base.py false_positive/agent.py false_positive/domain/__init__.py false_positive/domain/constraints.py false_positive/domain/models.py false_positive/domain/protocols.py false_positive/observability/__init__.py false_positive/observability/trace.py false_positive/strategy/__init__.py false_positive/strategy/baseline.py false_positive/strategy/candidates.py false_positive/strategy/engine.py false_positive/strategy/evidence.py false_positive/strategy/fallback.py false_positive/strategy/legacy.py feature_dictionary.csv frontend/.env.example frontend/README.md frontend/index.html frontend/package-lock.json frontend/package.json frontend/scripts/live-api-smoke.mjs frontend/src/App.test.tsx frontend/src/App.tsx frontend/src/api/client.test.ts frontend/src/api/client.ts frontend/src/api/errors.ts frontend/src/api/httpTransport.test.ts frontend/src/api/httpTransport.ts frontend/src/api/mockTransport.test.ts frontend/src/api/mockTransport.ts frontend/src/api/types.ts frontend/src/components/CaseOverview.tsx frontend/src/components/RunLauncher.tsx frontend/src/components/RunResults.tsx frontend/src/components/RunStatus.tsx frontend/src/components/SourceBadge.tsx frontend/src/components/states.test.tsx frontend/src/config.test.ts frontend/src/config.ts frontend/src/format.ts frontend/src/main.tsx frontend/src/runState.ts frontend/src/styles.css frontend/src/test/setup.ts frontend/src/vite-env.d.ts frontend/tsconfig.app.json frontend/tsconfig.json frontend/tsconfig.node.json frontend/vite.config.ts local_eval.py make_submission.py mock_environment.py public/HackAlem AI_ Beeline Tariff Marketing Campaigns Case (1).docx public/HackAlem AI_ Beeline Tariff Marketing Campaigns Case.docx public/beeline_case_participants/PARTICIPANT_GUIDE.md public/beeline_case_participants/PARTICIPANT_GUIDE.pdf public/beeline_case_participants/agent_template.py public/beeline_case_participants/customer_profile.csv public/beeline_case_participants/data/arpu_monthly.csv public/beeline_case_participants/data/change_tariff.csv public/beeline_case_participants/data/dict_tariff.csv public/beeline_case_participants/data/traffic.csv public/beeline_case_participants/environment.py public/beeline_case_participants/feature_dictionary.csv public/beeline_case_participants/local_eval.py public/beeline_case_participants/make_submission.py public/beeline_case_participants/mock_environment.py public/beeline_case_participants/scoring_core.py public/beeline_case_participants/tariff_dictionary.csv requirements-dev.lock requirements-dev.txt requirements.txt runtime/__init__.py runtime/configured.py runtime/llm.py scoring_core.py scripts/build_contract_examples.py scripts/evaluate_strategy.py scripts/verify_core.py submission.csv tariff_dictionary.csv tests/__init__.py tests/backend/__init__.py tests/backend/test_api.py tests/backend/test_live_http.py tests/backend/test_runner.py tests/support.py tests/test_adaptive_strategy.py tests/test_agent_contract.py tests/test_contract_fixtures.py tests/test_core_models.py tests/test_llm_integration.py tests/test_verification.py
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.