AAYMA
RU
Войти

EventMatch AI

Streamlit-сервис подбора event-подрядчиков: LLM разбирает свободный запрос в форму, система фильтрует и ранжирует подрядчиков по формуле и…

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

О проекте

Команда: Rise
Кейс HackAlem.ai: Креативные индустрии — Firebird
Стадия: Рабочий MVP

Задача кейса: «#79-lite»: подобрать до 3 подрядчиков для мероприятия и объяснить выбор

Суть

Streamlit-сервис подбора event-подрядчиков: LLM разбирает свободный запрос в форму, система фильтрует и ранжирует подрядчиков по формуле и показывает до трёх карточек с объяснениями от LLM.

Как устроено

OpenAI извлекает из текста параметры (город, категория, дата, бюджет, часы, язык), пользователь проверяет форму. Жёсткие фильтры отсекают подрядчиков по городу, категории, календарю, бюджету, формату, часам и языку; оставшиеся ранжируются по фиксированной формуле баллов со стабильной сортировкой. Для выбранных карточек LLM параллельно пишет объяснения (таймаут 5 с); guardrail сверяет пропущенные и добавленные числа и при расхождении возвращается к шаблону, успешные ответы кэшируются.

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

  • LLM query parsing
  • жёсткие фильтры
  • детерминированное ранжирование
  • числовой guardrail для объяснений LLM
  • шаблонный fallback
  • кэш объяснений

Особенности

Объяснения LLM проверяются на добавленные и пропущенные числа, в интерфейсе видно, от ИИ объяснение или по шаблону и почему. Демо-сценарии покрывают плотную категорию, редкую категорию и пустой результат.

Стек

Python · Streamlit · OpenAI API

Модели

gpt-4o-mini


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

README

README.md

🎯 EventMatch AI (#79-lite)

Сервис подбора event-подрядчиков в Казахстане: строгие фильтры, детерминированные баллы и объяснения от OpenAI.

💡 Пайплайн

  1. LLM-парсер (ai/parse_query.py): OpenAI извлекает параметры из текста; пользователь проверяет форму перед поиском.
  2. Фильтры (pipeline/filters.py): Город, категория, календарь, бюджет, формат, часы и язык.
  3. Ранжирование (pipeline/ranking.py): Фиксированная формула баллов и стабильная сортировка. Эмбеддинги в основной подбор не включены.
  4. Объяснения (ai/polish.py): После recommend() интерфейс вызывает LLM для выбранных карточек. Фильтры, баллы и порядок не меняются.

Объяснения генерируются параллельно с таймаутом 5 секунд, без автоматических повторов. Проверяются пропущенные и добавленные числа; при ошибке используется исходный шаблон и показывается причина. Числовая проверка не гарантирует отсутствие любых смысловых ошибок: исходные факты доступны в раскрывающемся блоке карточки. Успешные объяснения кэшируются в памяти по фактам, запросу, модели и инструкции. Кэш очищается после перезапуска.

🚀 Быстрый запуск

Нужен Python 3.11 или новее. Команды выполняются из корня проекта:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Создайте .env рядом с README по образцу .env.example, указав свой OPENAI_API_KEY. По умолчанию используется gpt-4o-mini; модель можно задать через OPENAI_MODEL. Ключ автоматически читается сервером из .env, не отправляется браузеру и не должен попадать в Git. Запрос и факты показанных карточек отправляются в OpenAI; нужен доступный баланс API.

python -m streamlit run ui/app.py

Откройте http://localhost:8501. Введите запрос, нажмите «Разобрать запрос с ИИ», проверьте форму и запустите подбор. Бейдж «Объяснение от ИИ» означает успешный ответ LLM. «Объяснение по шаблону» сопровождается причиной возврата к шаблону. Без доступного API можно заполнить форму вручную; подбор продолжит работать с шаблонными объяснениями.

Пример: «Нужен ведущий на свадьбу в Алматы 7 октября 2026, бюджет 1,2 млн, на 5 часов, на русском». Календари датасета покрывают 23.09.2026–31.12.2026. В запросе без года используется 2026.

Проверки без вызова OpenAI:

python -m tests.test_scenarios
python test_pipeline.py

🧪 Демо-сценарии

  • Плотная категория: Ведущий в Алматы на 14 ноября
  • Редкая категория: Флорист в Астане
  • Нулевой результат: Банкетный зал в Алматы на 20 декабря (бюджет 100k ₸)
Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
8
Авторы
2
Файлы
28
Ветки
1

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

Алтынбекова Жаннур 5zmeyramkhanova-dotcom 3

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

  • 2026-09-23 17:22Final work pushАлтынбекова Жаннур
  • 2026-09-23 17:15Connect LLM parsing and explanationsАлтынбекова Жаннур
  • 2026-09-23 16:41docs: add READMEzmeyramkhanova-dotcom
  • 2026-09-23 16:14AI Serviceszmeyramkhanova-dotcom
  • 2026-09-23 16:05aiPipeline & GuardrailsАлтынбекова Жаннур
  • 2026-09-23 15:33Изминение архитектуры под дизайнАлтынбекова Жаннур
  • 2026-09-23 15:30Дизайнzmeyramkhanova-dotcom
  • 2026-09-23 14:36Черновик: воронка подбора (фильтры, ранжирование, 3 исхода, тесты)Алтынбекова Жаннур
Структура репозитория (28 файлов)
.env.example
.gitignore
.streamlit/config.toml
README.md
ai/llm_client.py
ai/parse_query.py
ai/polish.py
data/hackathon dataset anonymized .csv
final_work.zip
pipeline/agent_filters.py
pipeline/explain.py
pipeline/filters.py
pipeline/guardrails.py
pipeline/load.py
pipeline/ranking.py
pipeline/recommend.py
requirements.txt
scripts/generate_embeddings.py
test_pipeline.py
tests/test_scenarios.py
ui/DESIGN.md
ui/app.py
ui/design-reference/1-landing.html
ui/design-reference/2-quiz.html
ui/design-reference/3-results.html
ui/design-reference/4-empty.html
ui/mock_data.py
ui/style.css

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

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

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