AAYMA
RU
Войти

Анализ организационной структуры и функционала

Агент сравнения документов оргструктуры до/после реорганизации: выделяет изменения подразделений, перемещения функций, потери, дублирование и…

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

О проекте

Команда: Senior-vibecoders
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Рабочий MVP

Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации

Суть

Агент сравнения документов оргструктуры до/после реорганизации: выделяет изменения подразделений, перемещения функций, потери, дублирование и конфликты интересов со ссылками на цитаты и выгрузкой DOCX.

Как устроено

Документы DOCX/PDF/XLSX парсятся (python-docx, PyMuPDF, openpyxl) и сегментируются на пункты; LLM извлекает и сопоставляет подразделения и функции (промпты units_extract/match, functions_extract/match), RapidFuzz выравнивает пункты и строит redline. Риски ищутся по каталогу функций и правилам разделения обязанностей (SoD), цитаты проверяются на наличие в тексте, агент-критик пытается опровергнуть выводы, затем формируется заключение и Sankey-диаграмма перетока функций. FastAPI хранит задания, историю и human review выводов.

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

  • clause segmentation
  • RapidFuzz alignment
  • redline diff
  • SoD rules
  • critic agent
  • проверка цитат (refcheck)
  • golden-set evals
  • embeddings
  • Sankey

Особенности

Агент-критик, опровергающий найденные риски, плюс проверка каждой цитаты и ссылок внутри заключения; офлайн-оценка по golden-фактам редакций 8→9 положения о внутреннем аудите; каталог SoD-правил в YAML.

Стек

Python · FastAPI · Pydantic · React · TypeScript · Vite · Tailwind CSS · Docker Compose · Render

Модели

gpt-5.4-mini · gpt-5.4 · text-embedding-3-small · NVIDIA API


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

README

README.md

ИИ-агент «Анализ организационной структуры и функционала»

Прототип для сотрудников, которые проверяют документы до и после реорганизации. Он помогает увидеть, какие подразделения изменились, куда перешли функции, где возможны потери, дублирование и конфликты интересов. Выводы сопровождаются ссылками на документы и требуют проверки ответственным сотрудником.

Что реализовано

  • Загрузка документов DOCX, PDF и XLSX для сторон «до» и «после», фоновый запуск анализа, просмотр прогресса и результата.
  • Сравнение извлечённого текста двух редакций с выделением добавлений и удалений; просмотр подразделений, функций, рисков и диаграммы перемещения функций (Sankey). По ссылке «Источник» открывается пункт документа с цитатой.
  • Python-пакет ai/: разбор документов, сопоставление пунктов, подразделений и функций, поиск возможных потерь, дублирования и конфликтов по правилам разделения обязанностей, проверка цитат, агент-критик и формирование заключения.
  • FastAPI: хранение заданий и результатов, история анализов, API для подтверждения или отклонения вывода сотрудником и выгрузка служебной записки DOCX. История и проверка выводов человеком реализованы в API, но пока не выведены в веб-интерфейс.

Как работает решение

  1. Пользователь загружает документы «до» и «после». Веб-интерфейс отправляет их в FastAPI.
  2. Backend сохраняет файлы, запускает задачу в фоне и отдаёт статус. Пакет ai разбирает документы, выделяет пункты, сопоставляет структуру и функции, формирует кандидатов на риски и проверяет подтверждающие цитаты. Агент-критик пытается опровергнуть найденные риски.
  3. Интерфейс показывает сравнение текста, изменения подразделений, таблицу функций, диаграмму переходов, выводы и источники. Backend может сформировать DOCX-отчёт. Решение сотрудника по выводу можно передать через API; заключение после этого пересобирается.
flowchart LR
    U[Пользователь] --> F[frontend: React + Vite]
    F -->|HTTP: файлы, статус, результат| B[backend: FastAPI]
    B -->|вызов Python-функции| A[ai: пайплайн анализа]
    B <--> S[Локальное хранилище заданий]
    A -->|генерация и эмбеддинги| P[OpenAI API / NVIDIA API]
    A --> B --> F

Папки: frontend/ — интерфейс; backend/ — HTTP API, задания и экспорт; ai/ — анализ; shared/api.md — общий контракт. Подробная схема и исходная постановка находятся в ARCHITECTURE.md; при расхождении описания с кодом ориентируйтесь на текущую реализацию и API-контракт.

Технологии и интеграции

КомпонентИспользуется
ИнтерфейсReact, TypeScript, Vite, Tailwind CSS и CSS
СерверPython, FastAPI, Pydantic, Uvicorn, python-multipart, python-docx
АнализPython, Pydantic, python-docx, PyMuPDF, openpyxl, RapidFuzz, NumPy, PyYAML
AI APIOpenAI SDK; генерация через OpenAI или NVIDIA API, эмбеддинги через OpenAI
ЗапускDocker Compose, Python 3.11 и Node.js 22 внутри контейнеров

В шаблоне ai/.env.example указаны модели по умолчанию: gpt-5.4-mini, gpt-5.4 и text-embedding-3-small. Доступ к ним зависит от ваших ключей и аккаунта. При использовании NVIDIA для генерации ключ OpenAI всё равно нужен для эмбеддингов. Анализ отправляет содержимое документов внешнему AI-провайдеру.

Установка и запуск

Запуск Приложения https://kazakhtelecom-scandoc.onrender.com/

Для демо и интеграционной проверки: из корня актуальной копии main одна команда поднимает frontend и backend без установки Python, Node.js, venv или npm-зависимостей на машине:

docker compose up --build

Нужны только Docker и Docker Compose. Интерфейс: http://localhost:5173, API: http://localhost:8000/docs. Команда собирает текущий checkout; перед запуском обновите main, если нужна последняя версия из Git. По умолчанию backend использует подготовленный ответ: загрузка файлов проверяет сквозной путь, но не запускает AI-анализ их содержимого. Остановить сервисы можно Ctrl+C; данные заданий хранятся в томе Docker. Порты 8000 и 5173 должны быть свободны.

Если один из портов занят, можно задать другие порты хоста, например:

BACKEND_PORT=18000 FRONTEND_PORT=15173 docker compose up --build

В этом случае интерфейс откроется на http://localhost:15173, API — на http://localhost:18000/docs.

Для анализа загруженных документов моделью создайте ai/.env по ai/.env.example, заполните ключи и доступные модели и запустите:

AI_MOCK=false docker compose up --build

Для OpenAI нужен OPENAI_API_KEY. При LLM_PROVIDER=nvidia дополнительно нужны NVIDIA_API_KEY и NVIDIA_MODEL; ключ OpenAI также нужен для эмбеддингов. Секреты храните только в локальном ai/.env. Вариант запуска без Docker описан в README backend/ и frontend/.

Как проверить решение

После запуска проверьте ответ {"status":"ok"} на http://localhost:8000/health. В интерфейсе запустите встроенный комплект, дождитесь статуса done, откройте сравнение, заключение и источники, затем выгрузите DOCX-отчёт. Для проверки реального анализа запустите стек с AI_MOCK=false и загрузите пару обезличенных документов из samples/before/ и samples/after/. Текущий веб-интерфейс ограничен одной парой, хотя backend принимает несколько файлов.

Историю и проверку вывода сотрудником можно проверить через http://localhost:8000/docs: GET /api/analyses, затем PATCH /api/analyses/{id}/findings/{finding_id} с телом {"status":"accepted"}. Автоматические проверки модулей описаны в README соответствующих папок.

Данные и интеграции

  • В репозитории есть обезличенные DOCX редакций 8 и 9 в samples/, которые можно использовать для проверки анализа.
  • При запуске через Compose backend сохраняет задания, исходные файлы, статусы и результаты в именованном томе Docker; при ручном запуске — в backend/storage/. AI-анализ обращается к OpenAI API или NVIDIA API для генерации и к OpenAI API для эмбеддингов. Другие внешние наборы данных или интеграции в текущем коде не подключены.

Ограничения

  • Для анализа загруженных файлов необходимы AI_MOCK=false, настроенные ключи и доступ к внешним AI API.
  • PDF без текстового слоя не распознаются: OCR не реализован. Сравнение текста не сохраняет исходное оформление Word, PDF или Excel.
  • История анализов и проверка выводов сотрудником доступны через API, но не через текущий интерфейс. Чат с документами указан в контракте как планируемый и не реализован.
  • Результаты носят рекомендательный характер. Проверка цитаты подтверждает её наличие в документе, но интерпретацию вывода должен проверить сотрудник.

Развёрнутая версия

Публичная ссылка на развёрнутое приложение в текущем репозитории не указана. Для проверки используйте локальный запуск выше.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
56
Авторы
4
Файлы
112
Ветки
4

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

Dimash 36baqdauletd 8R0onen 8Yernur Kazhyakpar 5

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

  • 2026-09-23 17:54infra: compose matches README (mock by default, port vars, storage volume, py3.11) + Render imageDimash
  • 2026-09-23 17:51final 22222baqdauletd
  • 2026-09-23 17:45Merge branch 'main' of https://github.com/BAITC-Hacks/hack-e7c9156f-senior-vibecodersbaqdauletd
  • 2026-09-23 17:45updated readmebaqdauletd
  • 2026-09-23 17:22infra: docker compose for full stack (frontend + backend + ai)Dimash
  • 2026-09-23 17:14Merge branch 'main' of https://github.com/BAITC-Hacks/hack-e7c9156f-senior-vibecodersbaqdauletd
  • 2026-09-23 17:14readme rusbaqdauletd
  • 2026-09-23 17:13Merge pull request #7 from BAITC-Hacks/front/api-connectionYernur Kazhyakpar
Все коммиты (56)
  • 2026-09-23 16:44front: connect analysis UI to backend APIR0onen
  • 2026-09-23 16:27ai: add requirements.txt (pinned, verified in a clean venv; ASCII-only for pip on Windows)Dimash
  • 2026-09-23 16:23Merge branch 'ai/pipeline'Dimash
  • 2026-09-23 16:22contract: frontend tasks - human review of findings (accept/reject), critic verdict, source panel, redline, sankey, progress, history, exportDimash
  • 2026-09-23 16:22Merge pull request #6 from BAITC-Hacks/frontBakdaulet
  • 2026-09-23 16:18Merge pull request #5 from BAITC-Hacks/back/ai-integrationYernur Kazhyakpar
  • 2026-09-23 16:17front commit 2 endbaqdauletd
  • 2026-09-23 16:13back: install and verify local AI pipelineR0onen
  • 2026-09-23 16:09ai: stability - per-unit function extraction, identical-clause rule, alignment-aware matching and criticDimash
  • 2026-09-23 16:03Merge remote-tracking branch 'origin/main' into ai/pipelineDimash
  • 2026-09-23 16:02ai: check references inside conclusion text (refcheck by Codex) in pipeline and rebuild_conclusionDimash
  • 2026-09-23 16:02Merge pull request #4 from BAITC-Hacks/back/contract-endpointsYernur Kazhyakpar
  • 2026-09-23 16:02Merge branch 'ai/codex-core' into ai/pipelineDimash
  • 2026-09-23 16:02Merge branch 'main' into back/contract-endpointsYernur Kazhyakpar
  • 2026-09-23 16:02ai: restore Word auto-numbering, table rows as clauses, paragraph-id fallback; dedupe units, document subjectDimash
  • 2026-09-23 16:01ai: validate conclusion references against verified evidenceDimash
  • 2026-09-23 15:59Merge pull request #3 from BAITC-Hacks/backendYernur Kazhyakpar
  • 2026-09-23 15:53ai: revert post-shop generalization (catalog, SoD rules, unit filter, critic/conflict prompts) to 6d05393 stateDimash
  • 2026-09-23 15:51back: cover API services and document workflowsR0onen
  • 2026-09-23 15:48Merge branch 'ai/pipeline'Dimash
  • 2026-09-23 15:47remove shop demo example from repo (kept locally, not for the team)Dimash
  • 2026-09-23 15:40Merge branch 'ai/pipeline'Dimash
  • 2026-09-23 15:40ai: generalize beyond internal audit + understandable shop demo setDimash
  • 2026-09-23 15:33back: implement review history and contract exportR0onen
  • 2026-09-23 15:20Merge branch 'ai/pipeline'Dimash
  • 2026-09-23 15:20contract: backend tasks (human review, history, docx export, upload validation, ask); ai: Finding.review + rebuild_conclusionDimash
  • 2026-09-23 15:15Merge branch 'ai/pipeline'Dimash
  • 2026-09-23 15:15ai: cite unit listing clauses in structure findings; README cost and quality numbersDimash
  • 2026-09-23 15:14Merge branch 'ai/codex-core' into ai/pipelineDimash
  • 2026-09-23 15:13ai: document pipeline setup and measured evaluation qualityDimash
  • 2026-09-23 15:13ai: ground function-to-unit attribution in clause text or parent headingDimash
  • 2026-09-23 15:12ai: evaluate saved results against golden facts offlineDimash
  • 2026-09-23 15:12ai: track token usage per model and print it in CLIDimash
  • 2026-09-23 15:08mocks: AnalysisResult example on audit regulation r8 -> r9 (all quotes verified)Dimash
  • 2026-09-23 15:08ai: functions, SoD conflicts, critic agent, report and end-to-end pipeline + CLIDimash
  • 2026-09-23 15:05ai: build verified offline demo and r8 r9 golden factsDimash
  • 2026-09-23 15:00ai: align clauses and generate lossless word redlinesDimash
  • 2026-09-23 15:00back: add sample upload documentsR0onen
  • 2026-09-23 14:58ai: verify quotes and correct evidence referencesDimash
  • 2026-09-23 14:56basic frontbaqdauletd
  • 2026-09-23 14:53ai: unit extraction and before/after matching with parser hints and completeness self-checkDimash
  • 2026-09-23 14:43ai: document parsing and clause segmentation (docx/pdf/xlsx) + sample docsDimash
  • 2026-09-23 14:41ai: package skeleton with schemas and LLM client (OpenAI/NVIDIA, disk cache)Dimash
  • 2026-09-23 14:41contract: add redline, sankey flows, function catalog, critic and SoD fieldsDimash
  • 2026-09-23 14:34back: add analysis API and demo workflowR0onen
  • 2026-09-23 13:57docs: add architecture, API contract and shared agent instructionsDimash
  • 2026-09-23 12:07init: added ai folderR0onen
  • 2026-09-23 12:04init: project structureR0onen
Структура репозитория (112 файлов)
.dockerignore
.gitignore
AGENTS.md
ARCHITECTURE.md
CLAUDE.md
README.md
ai/.env.example
ai/.gitignore
ai/AGENTS.md
ai/README.md
ai/ai/__init__.py
ai/ai/alignment.py
ai/ai/catalog/functions.yaml
ai/ai/catalog/sod_rules.yaml
ai/ai/cli.py
ai/ai/conflicts.py
ai/ai/context.py
ai/ai/critic.py
ai/ai/evidence.py
ai/ai/functions.py
ai/ai/llm.py
ai/ai/parsing.py
ai/ai/pipeline.py
ai/ai/prompts/conflicts_verify.md
ai/ai/prompts/critic.md
ai/ai/prompts/duplicates_verify.md
ai/ai/prompts/functions_extract.md
ai/ai/prompts/functions_match.md
ai/ai/prompts/report.md
ai/ai/prompts/units_extract.md
ai/ai/prompts/units_match.md
ai/ai/refcheck.py
ai/ai/report.py
ai/ai/schemas.py
ai/ai/units.py
ai/evals/golden_r8_r9.json
ai/evals/run_evals.py
ai/main.py
ai/pyproject.toml
ai/requirements.txt
ai/scripts/build_mock.py
ai/tests/test_alignment.py
ai/tests/test_evals.py
ai/tests/test_evidence.py
ai/tests/test_parsing.py
ai/tests/test_refcheck.py
ai/tests/test_report.py
backend/.env.example
backend/.gitignore
backend/AGENTS.md
backend/README.md
backend/app/__init__.py
backend/app/clients/__init__.py
backend/app/clients/ai.py
backend/app/config.py
backend/app/main.py
backend/app/routers/__init__.py
backend/app/routers/analyses.py
backend/app/schemas.py
backend/app/services/__init__.py
backend/app/services/analyses.py
backend/app/services/documents.py
backend/mocks/result.json
backend/requirements.txt
backend/samples/after_reorganization.docx
backend/samples/before_reorganization.docx
backend/tests/__init__.py
backend/tests/test_ai_client.py
backend/tests/test_ai_integration.py
backend/tests/test_api.py
backend/tests/test_config_schemas.py
backend/tests/test_documents.py
backend/tests/test_report.py
backend/tests/test_store.py
docker-compose.yml
docker/backend.Dockerfile
docker/frontend.Dockerfile
docker/render-nginx.conf.template
docker/render-start.sh
docker/render.Dockerfile
docker/render.Dockerfile.dockerignore
frontend/.env.example
frontend/.gitignore
frontend/AGENTS.md
frontend/README.md
frontend/eslint.config.js
frontend/index.html
frontend/package-lock.json
frontend/package.json
frontend/public/favicon.svg
frontend/public/icons.svg
frontend/src/App.css
frontend/src/App.tsx
frontend/src/api/client.ts
frontend/src/api/localPreview.ts
frontend/src/api/mocks.ts
frontend/src/api/types.ts
frontend/src/assets/hero.png
frontend/src/assets/react.svg
frontend/src/assets/vite.svg
frontend/src/components/DocumentComparison.tsx
frontend/src/components/FunctionFlows.tsx
frontend/src/index.css
frontend/src/main.tsx
frontend/tsconfig.app.json
frontend/tsconfig.json
frontend/tsconfig.node.json
frontend/vite.config.ts
mocks/result.json
samples/after/Положение_о_внутреннем_аудите_редакция_9_обезличено.docx
samples/before/Положение_о_внутреннем_аудите_редакция_8_обезличено.docx
shared/api.md
Ветки (4)

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

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

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