AAYMA
RU
Войти

BaqBaq

BaqBaq — агент сверки организационной структуры и функций между редакциями документов до и после реорганизации.

Доведённый продукт
Команда «Ai-solo» 15💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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.md

BaqBaq — анализ организационных изменений

BaqBaq

ИИ-агент сверки организационной структуры и функций. 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 минуты

  1. Загрузите положения и/или организационные структуры в «До изменений» и «После изменений».
  2. Нажмите «Запустить анализ». Дождитесь результата; длительность зависит от объёма документов и API.
  3. Выберите изменение в таблице. Сверьте исходные цитаты, редакции, пункты и ограничение вывода.
  4. Зафиксируйте решение с комментарием, скачайте 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 по каждому виду риска → измерение времени ручной проверки → пилот на нескольких подразделениях. Нельзя заменять эти результаты процентом прошедших разработческих тестов.

Материалы и авторство

Звёзды
⭐ 0
Форки
0
Язык
HTML
Последний push
в прошлом месяце
Коммиты
10
Авторы
1
Файлы
102
Ветки
1

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

AI Builder 10

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

  • 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 комментариев

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

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