AAYMA
RU
Войти

Сверка

Веб-сервис, который сравнивает документы оргструктуры до и после реорганизации.

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

О проекте

Команда: AI-first
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Доведённый продукт

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

Суть

Веб-сервис, который сравнивает документы оргструктуры до и после реорганизации. Он выдаёт изменения подразделений, реестр функций ДО→ПОСЛЕ, риски дублирования и конфликта интересов и заключение с проверенными цитатами.

Как устроено

Парсеры DOCX, текстовых PDF и XLSX передают текст в пакетный LLM-извлекатель функций. Дальше идут сопоставитель ДО↔ПОСЛЕ, аналитик изменений, кодовая проверка дословного вхождения цитат, LLM-контролёр и ограниченное самоисправление (0–2 ревизии; правка откатывается, если ухудшает проверяемость). Ответы модели валидируются схемами Pydantic, спорные соответствия остаются needs_review. Состояния и этапы хранятся в PostgreSQL JSONB. По словам авторов, это явный агентный workflow без RAG и без tool calling.

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

  • multi-stage agent workflow
  • LLM critic + bounded self-correction
  • verbatim quote verification
  • Pydantic structured outputs
  • batch function matching
  • PostgreSQL JSONB checkpoints

Метрики

Прогон по редакциям №8/№9: 472,1 с, 6 отклонений, 66 спорных сопоставлений, 14 неразрешённых фрагментов из 981, 1119 цитат перепроверены; 90 backend-тестов и 44 frontend-сценария

Особенности

Каждую цитату проверяет код на дословное вхождение, а LLM-контролёр может только принять или откатить правку. Авторы честно описывают ограничения: оценка контролёра 0,49 — «это не точность 49%». Есть ADR-документы решений и HTML-презентация в репозитории.

Стек

Python 3.12 · FastAPI · Vue 3 · Quasar · TypeScript · nginx · PostgreSQL · Docker Compose

Модели

OpenAI (OPENAI_MODEL, настраивается)


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

README

README.md

Сверка · AI First

Прототип ИИ-агента для кейса Казахтелекома «Анализ организационной структуры и функционала», hackalem.ai. Команда AI First, один участник.

Сотрудник загружает документы ДО и ПОСЛЕ реорганизации и получает изменения подразделений, сопоставление функций, потенциальные риски и заключение с цитатами. Результат помогает организовать проверку, но не заменяет решение специалиста.

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

  • Загрузка комплектов DOCX, текстовых PDF и XLSX, до 20 МБ на файл.
  • Извлечение подразделений и обязанностей; определение созданных, сохранённых и преобразованных подразделений по тексту документов.
  • Реестр функций ДО → ПОСЛЕ: сохранение, передача, изменение, потенциальная потеря, добавление и неопределённые соответствия. Кандидаты обратной сверки не скрываются.
  • Поиск дублирования и потенциальных конфликтов интересов внутри редакции с несколькими источниками. Исполнение и независимый контроль различаются.
  • Проверка документа, пункта/фрагмента и дословного вхождения каждой принятой цитаты.
  • Интерфейс: прогресс, журнал агентов, фильтры реестра, карточки доказательств, рекомендации и итоговое заключение.
  • Сохранение результатов и промежуточных этапов в PostgreSQL. Готовые анализы открываются по прежней ссылке после перезапуска.

Запуск через Docker Compose

Нужны Docker с Compose v2, интернет для сборки и OpenAI API, API-ключ с доступным балансом. В терминале из корня репозитория:

cp .env.example .env
cp .back_env.example .back_env

В .back_env заполните OPENAI_API_KEY и укажите в OPENAI_MODEL модель, доступную вашему API-проекту. В .env задайте POSTGRES_PASSWORD перед первым запуском. Секреты не коммитятся.

docker compose up --build -d --wait
docker compose ps

Compose сам запускает БД и создаёт таблицу результатов. Фронтенд собирается внутри Docker: Node нужен только на стадии сборки, готовые файлы раздаёт nginx. По умолчанию /api проксируется в backend; вручную задавать адрес API не нужно.

Файл / параметрНазначение
.back_env: OPENAI_API_KEY, OPENAI_MODELОбязательные настройки модели; поддержан OpenAI
.back_env: AGENT_MAX_REVISIONSЧисло исправлений отчёта: 0–2, по умолчанию 1
.back_env: REGISTRY_*Размеры пакетов, параллельность и бюджет обработки; см. пример
.env: POSTGRES_*, BACKEND_PORT, FRONTEND_PORTБД и порты Compose
.env: API_BASEПустой — локальный proxy; внешний API требует CORS, пересборка не нужна

DATABASE_URL контейнер получает из настроек БД в Compose. .front_env.example оставлен как шаблон: Vite и Compose не читают .front_env автоматически.

Результаты и загрузки хранятся в именованных томах. docker compose down их сохраняет; docker compose down -v удаляет данные. Прерванный анализ получает статус ошибки; автоматического продолжения и повторного расходования API-кредитов нет.

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

  1. Загрузите документы в два комплекта и запустите реальный анализ.
  2. Дождитесь результата; откройте отклонение и сравните цитаты ДО/ПОСЛЕ.
  3. В реестре включите «Требует проверки», проверьте источники спорных соответствий.
  4. Откройте риски внутри редакции, журнал проверки/исправления и заключение.

Кнопка демо использует явно обозначенные тестовые данные, а не анализ файлов. Документы заказчика и API-ключи в репозиторий не включены.

Презентация

Презентация HTML: 6 слайдов для защиты примерно на 3 минуты. Текст выступления и ответы жюри.

Откройте docs/presentation/presentation.html в Chrome через «Открыть файл» (Ctrl+O) или из корня репозитория в Ubuntu:

xdg-open docs/presentation/presentation.html

Команда использует браузер по умолчанию. На GitHub HTML отображается как исходный код: скачайте файл кнопкой Download raw file и откройте его локально. Для слайдов не нужны интернет, Docker или установка зависимостей.

Управление: ← / → — слайды, F — полный экран, Esc — выход из полного экрана, H — скрыть/показать подсказки, P — печать.

Ссылка на последнем слайде открывает конкретный сохранённый анализ на localhost:3001. Для неё нужен запущенный проект и исходная локальная БД автора. В чистом клоне этого анализа нет: откройте http://localhost:3001 и загрузите свои документы либо используйте явно обозначенное тестовое демо.

Архитектура

Vue 3 + Quasar + TypeScript → nginx → FastAPI / Python 3.12 → PostgreSQL. Состояния и результаты хранятся в JSONB. Образ БД содержит pgvector, но векторный поиск не используется.

Парсеры → пакетный извлекатель функций → сопоставитель ДО ↔ ПОСЛЕ
        → аналитик изменений → кодовая проверка источников → LLM-контролёр
        → ограниченное исправление: принять или откатить → заключение

Оркестратор написан на Python; ответы модели проверяются схемами Pydantic. Извлечение и сопоставление пакетные, аналитик и контролёр получают полный текст. Пропуски и противоречия остаются needs_review. Контролёр оценивает результат по исходникам; правка не принимается, если ухудшает проверяемость источников. Заключение собирается из принятых выводов и предупреждений. Это явный агентный workflow, без RAG, embeddings и самостоятельного tool calling LLM.

Тесты и результаты

Проверено: 90 backend-тестов (включая 4 с PostgreSQL), Ruff, 44 frontend-сценария, TypeScript и production-сборка. Также проверен запуск из чистого клона с новой пустой БД: все три сервиса healthy, таблица создаётся автоматически, API доступен через nginx. Тесты используют заглушку модели; это не измерение её точности.

# Backend: Python 3.12, из backend/, в виртуальном окружении
pip install -e '.[dev]'
python -m pytest -q
ruff check app tests

# Frontend: Node 22, из frontend/
npm ci
npm test
npm run build

Для четырёх интеграционных тестов БД задайте TEST_DATABASE_URL доступной PostgreSQL; без него они пропускаются. Тесты используют собственные временные схемы. Для разработки frontend: npm run dev (Vite проксирует /api на localhost:8010).

Полный прогон редакций №8/№9 заказчика занял 472,1 секунды: 6 отклонений, 5 записей структуры, 66 спорных сопоставлений и 14 неразрешённых фрагментов из 981. Все 1119 опубликованных цитат повторно проверены по загруженным файлам. Смысловая полнота не доказана; найденное изменение по 4.4 требует уточнения. Последняя поправка входа контролёра проверена тестами, без повторного полного прогона.

Подробности и границы проверок: VALIDATION.md. Контролируемые платные проверки на синтетических документах: backend/scripts/live_registry_smoke.py и backend/scripts/live_structural_risk_smoke.py. Они обращаются к работающему API и расходуют кредиты только при явном запуске.

Ограничения

  • Нет OCR и надёжного разбора графических оргсхем. Для DOCX автонумерация может адресоваться как «абзац N»; колонтитулы и вложенные объекты покрыты не полностью.
  • Цитата подтверждает источник, но не правильность интерпретации. Полнота извлечения и точность сопоставления не измерены. При кодовых замечаниях итоговая оценка контролёра ограничена 0,49 — это не точность 49%.
  • Проверка по законодательству/стандартам и сравнение с другими операторами не реализованы.
  • Нет авторизации, экрана истории, распределённой очереди и автоматического возобновления. Поддерживается один backend-процесс; не публикуйте прототип в открытый интернет.
  • Документы передаются OpenAI. Используйте обезличенные данные либо согласованный заказчиком режим обработки. Экономия времени на работе сотрудников пока не измерена.

Исходники: backend/, frontend/. Требования: REQUIREMENTS.md. Контракт: API_CONTRACT.md. Решения: docs/decisions. AGENTS.md и симлинк CLAUDE.md содержат общие инструкции для разработки.

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

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

fsrcodefsr 18

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

  • 2026-09-23 17:30docs: add hackathon presentation and opening instructionsfsrcodefsr
  • 2026-09-23 17:18docs: record clean-clone deployment verificationfsrcodefsr
  • 2026-09-23 17:16chore: finalize frontend and document verified prototypefsrcodefsr
  • 2026-09-23 17:08fix(backend): evaluate published registry states and record final validationfsrcodefsr
  • 2026-09-23 16:58fix(backend): retain reverse mapping candidates without masking uncertaintyfsrcodefsr
  • 2026-09-23 16:49fix(frontend): proxy API on same origin and handle invalid responsesfsrcodefsr
  • 2026-09-23 16:33feat(frontend): expose coverage and structural risks with verified sourcesfsrcodefsr
  • 2026-09-23 16:26feat(backend): stream audit checkpoints and verify same-version risksfsrcodefsr
Все коммиты (18)
  • 2026-09-23 16:11feat(backend): persist analyses and recover interrupted runsfsrcodefsr
  • 2026-09-23 15:57feat: add auditable function registry and batch matchingfsrcodefsr
  • 2026-09-23 15:28fix(backend): preserve document fragments and enforce grounded evidencefsrcodefsr
  • 2026-09-23 15:19feat(frontend): implement Sверка interface and analysis workflowfsrcodefsr
  • 2026-09-23 14:41feat: add orchestrator critic and bounded self-correctionfsrcodefsr
  • 2026-09-23 14:14fix: stabilize evidence verification and analysis statusesfsrcodefsr
  • 2026-09-23 13:57feat: add frontend and full Docker Compose stackfsrcodefsr
  • 2026-09-23 13:50feat: analyze organizational changes with verified evidencefsrcodefsr
  • 2026-09-23 13:38feat: add analysis API foundationfsrcodefsr
  • 2026-09-23 13:31chore: define hackathon case and project foundationfsrcodefsr
Структура репозитория (106 файлов)
.back_env.example
.env.example
.front_env.example
.gitignore
AGENTS.md
CLAUDE.md
README.md
backend/.dockerignore
backend/Dockerfile
backend/app/__init__.py
backend/app/analyzer.py
backend/app/config.py
backend/app/documents.py
backend/app/main.py
backend/app/pipeline.py
backend/app/registry.py
backend/app/schemas.py
backend/app/store.py
backend/pyproject.toml
backend/scripts/live_registry_smoke.py
backend/scripts/live_structural_risk_smoke.py
backend/scripts/rematch_registry.py
backend/tests/conftest.py
backend/tests/test_agent_loop.py
backend/tests/test_api.py
backend/tests/test_documents.py
backend/tests/test_pipeline.py
backend/tests/test_registry.py
backend/tests/test_store.py
backend/tests/test_structural_risks.py
docker-compose.yaml
docs/API_CONTRACT.md
docs/FRONTEND_RISKS_HANDOFF.md
docs/REQUIREMENTS.md
docs/VALIDATION.md
docs/decisions/0002-function-coverage.md
docs/decisions/0003-durable-analysis-state.md
docs/decisions/0004-same-version-risks.md
docs/presentation/presentation.html
docs/presentation/speaker-notes.md
frontend/.dockerignore
frontend/Dockerfile
frontend/README.md
frontend/docker/40-app-config.sh
frontend/docs/DESIGN.md
frontend/index.html
frontend/nginx.conf
frontend/package-lock.json
frontend/package.json
frontend/public/config.js
frontend/public/favicon.svg
frontend/src/App.vue
frontend/src/api/client.ts
frontend/src/api/fixtures/demo-analysis.json
frontend/src/api/mock.ts
frontend/src/api/types.ts
frontend/src/components/AgentTrace.vue
frontend/src/components/ConfidenceMeter.vue
frontend/src/components/CoverageSummary.vue
frontend/src/components/EvidenceCard.vue
frontend/src/components/FindingDrawer.vue
frontend/src/components/FindingsTable.vue
frontend/src/components/FunctionRegistry.vue
frontend/src/components/OrgMap.vue
frontend/src/components/RiskChip.vue
frontend/src/components/StructuralRisks.vue
frontend/src/components/SummaryStrip.vue
frontend/src/components/TypeLabel.vue
frontend/src/components/UploadZone.vue
frontend/src/composables/analysisContext.ts
frontend/src/composables/useAnalysis.ts
frontend/src/css/app.scss
frontend/src/css/quasar.variables.scss
frontend/src/css/tokens.scss
frontend/src/env.d.ts
frontend/src/main.ts
frontend/src/pages/AnalysisShell.vue
frontend/src/pages/ConclusionPage.vue
frontend/src/pages/NewAnalysisPage.vue
frontend/src/pages/OverviewPage.vue
frontend/src/pages/RunPage.vue
frontend/src/router.ts
frontend/src/stores/draft.ts
frontend/src/stores/reviewed.ts
frontend/src/stores/theme.ts
frontend/src/utils/conclusion.ts
frontend/src/utils/coverage.ts
frontend/src/utils/demo.ts
frontend/src/utils/evidence.ts
frontend/src/utils/findings.ts
frontend/src/utils/labels.ts
frontend/src/utils/registry.ts
frontend/src/utils/risks.ts
frontend/src/utils/trace.ts
frontend/tests/api-client.test.mjs
frontend/tests/conclusion.test.mjs
frontend/tests/coverage.test.mjs
frontend/tests/demo-separation.test.mjs
frontend/tests/helpers.mjs
frontend/tests/registry.test.mjs
frontend/tests/risks.test.mjs
frontend/tests/sources.test.mjs
frontend/tests/trace.test.mjs
frontend/tsconfig.json
frontend/vite.config.ts
scripts/start-hackathon-workspace.sh

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

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

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