О проекте
Команда: 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, но пока не выведены в веб-интерфейс.
Как работает решение
- Пользователь загружает документы «до» и «после». Веб-интерфейс отправляет их в FastAPI.
- Backend сохраняет файлы, запускает задачу в фоне и отдаёт статус. Пакет
aiразбирает документы, выделяет пункты, сопоставляет структуру и функции, формирует кандидатов на риски и проверяет подтверждающие цитаты. Агент-критик пытается опровергнуть найденные риски. - Интерфейс показывает сравнение текста, изменения подразделений, таблицу функций, диаграмму переходов, выводы и источники. 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 API | OpenAI 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, но не через текущий интерфейс. Чат с документами указан в контракте как планируемый и не реализован.
- Результаты носят рекомендательный характер. Проверка цитаты подтверждает её наличие в документе, но интерпретацию вывода должен проверить сотрудник.
Развёрнутая версия
Публичная ссылка на развёрнутое приложение в текущем репозитории не указана. Для проверки используйте локальный запуск выше.
Авторы коммитов
История коммитов
- 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 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.