О проекте
Команда: Ai-solo
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Доведённый продукт
Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации
Суть
BaqBaq — агент сверки организационной структуры и функций между редакциями документов до и после реорганизации. Находит перенос, потерю и дублирование функций, каждую связь подкрепляет точными цитатами обеих редакций. Развёрнут на baqbaq.world.
Как устроено
DOCX/PDF/XLSX разбираются парсером; в SQLite сохраняются документы и точные SourceSpan (SHA-256, пункт, цитата). Затем строится реестр функций, подбираются кандидаты соответствий (FastEmbed multilingual MiniLM или лексический режим) и оцениваются риски: потери, дублирование, перенос, разделение и объединение. Live-агент на OpenAI Responses API (gpt-4.1-mini) использует инструменты поиска, чтения, сравнения и покрытия, максимум 6 шагов. Решение по каждому изменению фиксирует сотрудник, на выходе HTML/Markdown-заключение. Снимок запуска хранит версию алгоритма, хеш кода и режим поиска.
Ключевые решения
- document parsing DOCX/PDF/XLSX
- FastEmbed embeddings
- lexical search
- function registry matching
- Responses API tool agent
- provenance hashing
- human-in-the-loop review
Особенности
Цепочка «изменение → источник → граница вывода → решение сотрудника» опирается на доказательный слой с байтовыми хешами и точными цитатами. Публичный Live-стенд изолирует пользователей через HttpOnly cookie и ограничивает число вызовов API. Есть 24 синтетических документных сценария и честный раздел ограничений.
Стек
Python · Uvicorn · SQLite · FastEmbed · HTML/CSS/JS · Nginx · systemd · GitHub Actions
Модели
gpt-4.1-mini · FastEmbed multilingual MiniLM
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-22e532a4-ai-solo.
README
README.mdBaqBaq — анализ организационных изменений

ИИ-агент сверки организационной структуры и функций. HackAlem AI · спец-трек Казахтелеком.
Открыть Live · Запустить локально · Сценарий жюри · Архитектура · Что проверено · Ограничения
Презентация · 7 слайдов · Демо-обзор с автопоказом · Все материалы для жюри
Для жюри доступны два равноправных способа проверки: открыть работающий baqbaq.world без установки и пароля либо самостоятельно развернуть этот репозиторий по инструкции ниже. На домене используется серверный API-ключ; при локальном запуске нужен собственный ключ OpenAI.
Суть за 30 секунд
При реорганизации обязанность может сменить номер, название подразделения или владельца. Текстовый diff покажет удаление — но не объяснит, куда ушла функция.
BaqBaq предлагает соответствия между обязанностями, отмечает возможные потери и дублирование и открывает точные цитаты обеих редакций. Сотрудник принимает решение отдельно от алгоритма и получает проверяемое заключение.
Изменение → источник → граница вывода → решение сотрудника. Это отличие подхода от одного ответа чат-бота, а не заявление об отсутствии конкурентов.
Два способа проверки — один проект
| Домен | Локально из этого GitHub | |
|---|---|---|
| Начать | baqbaq.world | Команды ниже |
| Доступ | Без пароля, сразу рабочий Live | Тот же интерфейс и пайплайн |
| Документы | Собственные файлы двух редакций | Собственные файлы двух редакций |
| API | Серверный ключ и общие лимиты | Ваш ключ в локальном .env |
| Данные | Изолированы случайной HttpOnly cookie браузера | На вашем компьютере; Live передаёт текст в OpenAI |
В рабочем Live-интерфейсе нет предзаполненного демонстрационного результата и переключателя Offline. Каждый анализ запускается по загруженным файлам через OpenAI. Отдельный презентационный обзор показывает проверенный синтетический сценарий и не подменяет Live. Тестовые фикстуры в коде предназначены только для проверок. Прежние приватные сравнения не раскрываются при включении публичного режима.
Повторяемость проверяется при одинаковых документах, режиме модели, поиске и версии кода. На сервере для новых расчётов по умолчанию используется FastEmbed; результат может отличаться от lexical и от нового Live-запроса. Режимы явно указаны в интерфейсе и паспорте запуска.
Проверка для жюри за 3 минуты
- Загрузите положения и/или организационные структуры в «До изменений» и «После изменений».
- Нажмите «Запустить анализ». Дождитесь результата; длительность зависит от объёма документов и API.
- Выберите изменение в таблице. Сверьте исходные цитаты, редакции, пункты и ограничение вывода.
- Зафиксируйте решение с комментарием, скачайте HTML-отчёт. При необходимости задайте агенту вопрос по выбранному изменению.
Три минуты — маршрут объяснения результата, не гарантия времени расчёта или установки. Вход на сайт не требуется. Для приватного репозитория нужно приглашение организатора. Загружайте только документы, разрешённые к передаче в OpenAI.
Быстрый запуск
Python 3.12, Windows:
git clone https://github.com/BAITC-Hacks/hack-22e532a4-ai-solo.git
cd hack-22e532a4-ai-solo
Copy-Item .env.example .env
# Укажите OPENAI_API_KEY в .env
.\run.ps1
Linux / macOS:
git clone https://github.com/BAITC-Hacks/hack-22e532a4-ai-solo.git
cd hack-22e532a4-ai-solo
cp .env.example .env
# Укажите OPENAI_API_KEY в .env
bash run.sh
Откройте http://127.0.0.1:8000/ — рабочее пространство открывается сразу. API-ключ нужен для анализа; без ключа интерфейс объясняет, что необходимо настроить. Уже существующий .env не перезаписывайте.
По умолчанию поиск использует FastEmbed: при первом расчёте нужны интернет и загрузка весов multilingual MiniLM. Для быстрого расчёта без загрузки весов до запуска задайте:
$env:BAQBAQ_SEARCH_MODE='lexical' # Windows PowerShell
export BAQBAQ_SEARCH_MODE=lexical # Linux / macOS
Lexical — отдельный лексический режим, не embeddings. Интернет всё равно нужен для первоначальной установки зависимостей. Ручной эквивалент запуска: создать venv, pip install -r requirements.txt, python -m uvicorn app.main:app --host 127.0.0.1 --port 8000.
Live / OpenAI
Скопируйте .env.example в новый .env, только если файла ещё нет. Не перезаписывайте существующие ключи.
OPENAI_API_KEY=ваш_ключ_только_локально
OPENAI_MODEL=gpt-4.1-mini
BAQBAQ_MODEL_MODE=live
BAQBAQ_PUBLIC_LIVE=1
BAQBAQ_DAILY_API_REQUESTS=200
BAQBAQ_JOB_API_REQUESTS=80
Перезапустите приложение и создайте сравнение в Live. Ключ обрабатывает только backend; не вводите его в интерфейс и не коммитьте. 200 запросов/день UTC и 80/задание — сохраняемые лимиты числа вызовов, не долларов. Неудачные вызовы учитываются, автоматические повторы SDK отключены. Задание хранит фактические input/output tokens, если провайдер их вернул. Контроль списаний остаётся в кабинете провайдера.
Что реализовано
| Требование трека | Реализация | Граница |
|---|---|---|
| Организационная структура | Сохранение, добавление, отсутствие, явное преобразование | Не юридический факт создания/ликвидации |
| Судьба функций | Сохранение, изменение, перенос; кандидаты разделения/объединения | Интерпретацию проверяет специалист |
| Потери и дублирование | Покрытие, кандидаты, область и полномочия, отрицание и периодичность | Неполный комплект не доказывает потерю |
| Доказательства | SHA-256, редакция, пункт/локатор, исходная цитата, контекст перечня | Наличие цитаты не гарантирует истинность интерпретации |
| Решение и заключение | Отдельная история решений, HTML/Markdown, приоритет рисков | Анонимная сессия не удостоверяет личность сотрудника |
| Агент | Responses API, поиск/чтение/сравнение/покрытие, журнал инструментов | Максимум 6 шагов, 6 инструментов за шаг |
Архитектура и точные данные
DOCX / PDF / XLSX → парсер → SQLite: документы и точные SourceSpan
↓
реестр функций → кандидаты → риски
↓ ↑
FastEmbed / lexical OpenAI Live
↓
снимок запуска → проверка человеком → отчёт
Exact-слой хранит байтовые хеши, исходные фрагменты и снимок состава документов/функций каждого запуска. Исторический поиск фильтрует документы до выбора top-k; новые загрузки не вытесняют старые источники. Снимок фиксирует версию алгоритма, хеш Python-кода, зависимости, режим поиска/модели, входной хеш с разделением «до/после» и API usage.
Семантическое решение модели не называется детерминированным. Версия весов embeddings не закреплена commit-хешем. Экспорт конкретного запуска использует неизменный машинный результат и текущие решения сотрудника с датами — сохраните файл, если нужен неизменный экземпляр заключения.
Проверка кода
.\verify.ps1
node tests/frontend_jury.cjs
.venv/bin/python scripts/verify.py
node tests/frontend_jury.cjs
Тесты используют временные БД. Workflow настроен на проверку Offline/lexical без секретов. Запуск GitHub Actions для коммита 84d0024 не начал выполнение тестов из-за блокировки биллинга аккаунта владельца репозитория; успешный CI не заявляется. Фактически выполненные локальные и серверные проверки.
Есть unit/API-регрессии, 24 синтетических документных сценария и проверка трёх опорных связей реальных редакций. Это не независимая экспертная разметка и не доказательство промышленной точности. Исходники контрольного набора: app/fixtures.py.
Для реальной пары укажите локальные BAQBAQ_DEMO_BEFORE / BAQBAQ_DEMO_AFTER и выполните python scripts/verify_real_pair.py. Организаторские документы в Git не публикуются. Их можно загрузить вручную в локальном интерфейсе.
Безопасность и масштабирование
Домен: открытый Live. Случайная 256-битная HttpOnly Secure SameSite cookie отделяет документы и результаты одного браузера от другого; API проверяет владельца сравнения, включая источники, отчёты и решения. Cross-site запись запрещена. Это не учётная запись: после потери cookie доступ не восстанавливается через интерфейс. Скачайте отчёт. Не загружайте конфиденциальные документы на открытый хакатонный стенд.
Платный API открыт всем посетителям по решению владельца проекта. Общие лимиты числа запросов ограничивают расход, но не гарантируют доступность бюджета для жюри. Это не денежный лимит и не защита от целевого злоупотребления.
Отдельный systemd-сервис, пользователь, venv и данные; приложение слушает loopback. Развёртывание затрагивает только BaqBaq, проверяет хеши других Nginx-конфигов. Развёртывание.
SQLite, один worker, атомарный запрет параллельных анализов одного сравнения и маркировка прерванных запусков после рестарта подходят для MVP. Это не enterprise multi-tenant сервис. Для пилота нужны отдельные роли/организации, очередь worker-задач, квоты хранилища, политика удаления, резервные копии с проверкой восстановления и нагрузочное тестирование.
Честные ограничения и следующий этап
OCR и старые DOC/XLS не поддержаны; DOCX/PDF-экспорт, MCP, внешние нормативы и сложный граф подчинённости ещё не реализованы. Формулы XLSX не вычисляются; неполное извлечение видно как partial. Offline-эвристики могут пропускать обязанности и ошибаться в совпадениях. Подробности.
Для внедрения: независимая разметка реальной пары экспертом → precision/recall по каждому виду риска → измерение времени ручной проверки → пилот на нескольких подразделениях. Нельзя заменять эти результаты процентом прошедших разработческих тестов.
Материалы и авторство
- Сценарий демонстрации и текст короткого питча.
- Изменения после аудита.
- Редактируемая презентация PPTX · 7 слайдов, автономное HTML-демо, краткий Markdown-бриф и текст озвучки.
- Демо — обзор проверенного синтетического запуска, не запись экрана и не новый Live-анализ. Автопоказ — 91 секунда; видеоролик MP4 не подготовлен.
- Текст для формы подачи. Push в GitHub не заменяет отдельную отправку решения на платформе.
- BaqBaq — проект участника спец-трека, не официальный продукт Казахтелекома. Логотип компании обозначает трек, не партнёрство или одобрение.
- Происхождение визуальных материалов. Секреты и исходные документы организатора в репозиторий не включены.
Авторы коммитов
История коммитов
- 2026-09-23 17:53Link presentation logos to BaqBaq home [skip ci]AI Builder
- 2026-09-23 17:50Remove planning and narration links from jury page [skip ci]AI Builder
- 2026-09-23 17:49Clarify live domain and local jury paths in README [skip ci]AI Builder
- 2026-09-23 17:46Add seven-slide pitch, portable jury demo and submission materialsAI Builder
- 2026-09-23 17:28Ship open Live workspace, evidence safeguards and audit remediationAI Builder
- 2026-09-23 15:43Activate protected baqbaq.world HTTPS deploymentAI Builder
- 2026-09-23 15:39Prepare isolated server deployment and validate live OpenAI pipelineAI Builder
- 2026-09-23 15:15Add jury demo journey and evidence-first project READMEAI Builder
Все коммиты (10)
- 2026-09-23 15:04Address audit: scoped agent tools, embeddings and document-level verificationAI Builder
- 2026-09-23 14:13Build BaqBaq organizational audit agentAI Builder
Структура репозитория (102 файлов)
.env.example .github/workflows/verify.yml .gitignore README.md THIRD_PARTY_NOTICES.md app/__init__.py app/agent.py app/analysis.py app/auth.py app/budget.py app/config.py app/db.py app/domain.py app/fixtures.py app/gateway.py app/ingestion.py app/main.py app/model_adapter.py app/provenance.py app/registry.py app/reporting.py app/search.py app/semantic.py benchmarks/document_cases.json benchmarks/eval.json brand.md data/.gitkeep deploy/README.md deploy/activate_nginx.py deploy/baqbaq.service deploy/check_access.py deploy/configure_access.py deploy/nginx-http.conf deploy/nginx-https.conf deploy/prepare_env.py deploy/release.py deploy/renew-baqbaq.sh deploy/smoke_live.py deploy/verify_https.py deploy/verify_public_run.py docs/ARCHITECTURE.md docs/AUDIT_REMEDIATION.md docs/DEMO_SCRIPT.md docs/LIMITATIONS.md docs/PITCH.md docs/SUBMISSION.md pyproject.toml requirements-embeddings.txt requirements-windows.lock.txt requirements.txt results/BUILD_READINESS.md results/RELEASE_VERIFICATION.md results/document_evaluation.json results/document_evaluation.md results/document_evaluation_fastembed.json results/document_evaluation_fastembed.md results/evaluation.json results/evaluation.md results/real_pair_regression.json run.ps1 run.sh scripts/build_public_demo.py scripts/check_release.py scripts/evaluate.py scripts/evaluate_documents.py scripts/verify.py scripts/verify_real_pair.py static/app.js static/assets/baqbaq-transparent.png static/assets/baqbaq.png static/assets/kazakhtelecom.svg static/demo/after.docx static/demo/before.docx static/demo/report.html static/demo/result.json static/index.html static/landing.css static/landing.js static/login.html static/login.js static/styles.css static/workspace.css static/workspace.html submission/BaqBaq-HackAlem.pptx submission/BaqBaq-demo.html submission/DEMO-NARRATION.md submission/DEMO_BRIEF.md submission/SUBMISSION.md submission/build_demo.cjs submission/index.html submission/submission-form.html tests/conftest.py tests/frontend_jury.cjs tests/test_access_budget.py tests/test_api.py tests/test_audit_regressions.py tests/test_core.py tests/test_live_validation.py tests/test_public_live.py tests/test_release_regressions.py uploads/.gitkeep verify.ps1
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.