AAYMA
RU
Войти

ОргАнализ

Streamlit-приложение и агент для сравнения документов оргструктуры до и после реорганизации: подразделения, функции (сохранены, переданы, потеряны…

Прототип
Команда «ITAI GANG #1» 1💬 0 комментариевс 22 сентября 2026 г.

О проекте

Команда: ITAI GANG #1
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Прототип

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

Суть

Streamlit-приложение и агент для сравнения документов оргструктуры до и после реорганизации: подразделения, функции (сохранены, переданы, потеряны, дублируются), конфликты интересов и рекомендации со ссылками на источники.

Как устроено

Загружаются два комплекта DOCX/PDF/XLSX. Парсеры (src/parsers.py) нарезают их на фрагменты с id, документом, версией before/after, пунктом и текстом. Агент (src/agent.py) через NVIDIA NIM с function calling строит отчёт по Pydantic-схемам, у каждого вывода обязателен непустой source_ids. UI проверяет JSON-контракт и существование ссылок, показывает пять вкладок и исходные фрагменты, умеет экспортировать JSON и текстовый отчёт. Есть демо-режим на вымышленных документах без ключа.

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

  • function calling
  • парсинг DOCX/PDF/XLSX
  • grounding через source_ids
  • Pydantic-схемы
  • JSON Schema контракт

Особенности

Жёсткий контракт между парсером, агентом и UI: источники берутся из парсера, а не генерируются моделью, и каждая ссылка проверяется на существование. В README честно оговорено, что отсутствие упоминания в одном фрагменте ещё не доказывает потерю функции.

Стек

Python 3.11 · Streamlit · Pydantic · unittest

Модели

NVIDIA NIM · OpenAI


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

README

README.md

ОргАнализ — интерфейс Person 3

Прототип Streamlit для сравнения организационной структуры и функций до и после реорганизации. Интерфейс показывает результаты агента, обоснования и конкретные фрагменты источников. Решения об изменениях принимает backend команды.

Запуск в VS Code (Windows, PowerShell)

Требуется Python 3.11 или новее. Выполняйте команды в папке проекта:

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -m streamlit run app.py

Если окружение уже создано и зависимости установлены, нужна только последняя команда. Откройте http://localhost:8501. Остановить приложение: Ctrl+C в терминале. В VS Code выберите интерпретатор .venv\Scripts\python.exe через Ctrl+Shift+P → Python: Select Interpreter.

Ключи NIM

Для режима «Документы» нужны NVIDIA_API_KEY и NIM_MODEL. Их можно задать перед запуском:

$env:NVIDIA_API_KEY = "<ваш ключ>"
$env:NIM_MODEL = "<модель NIM с function calling>"
$env:NIM_BASE_URL = "https://integrate.api.nvidia.com/v1"
.\.venv\Scripts\python.exe -m streamlit run app.py

Либо скопируйте .streamlit/secrets.example.toml в .streamlit/secrets.toml и заполните значения. Реальный secrets.toml игнорируется Git. Также ключ можно ввести в боковой панели Streamlit на время текущей сессии.

Что работает сейчас

  • Демонстрация: вымышленные документы, потенциальная потеря функции, дублирование и конфликт интересов. Не требует ключа NIM.
  • Документы: два комплекта DOCX/PDF/XLSX, по несколько файлов, до 30 МБ на файл. Кнопка анализа включается после подключения backend.py и загрузки обоих комплектов.
  • Готовый JSON: просмотр результата команды по предварительному контракту.
  • Пять вкладок: подразделения, функции, дублирование, конфликты, заключение и рекомендации.
  • Для выбранного вывода можно раскрыть источник: ID, документ, версия, пункт и текст.
  • Скачивание JSON и текстового отчёта с обоснованиями и источниками.
  • Проверка формата JSON, уникальности ID источников и существования каждой ссылки.
  • После изменения загруженных документов предыдущий результат скрывается.

Интерфейс не выполняет реальный анализ, пока команда не подключит backend. Он не сохраняет загруженные документы на диск. Их обработка и политика хранения после подключения backend зависят от реализации команды.

Подключение Person 1 и Person 2

Формат пока предварительный, так как общего JSON у команды ещё нет. Согласуйте ui_contract.py перед интеграцией; бизнес-валидация остаётся у Person 1.

  1. Person 2 возвращает фрагменты с полями id, document, version (before/after), location (пункт/страница/лист и строка), text. ID должны быть уникальны для обоих комплектов, даже если имена файлов совпадают.
  2. Person 1 создаёт backend.py рядом с app.py с функцией:
def analyze_documents(before, after) -> dict:
    # before и after: списки InputDocument(name: str, content: bytes).
    # Вызвать парсер, NIM и валидацию; вернуть отчёт по ui_contract.py.
    # sources брать из парсера, а не генерировать моделью.
    ...
  1. Функция возвращает обычный словарь. Если у команды другая схема/сигнатура, преобразуйте её в backend_adapter.py.

Поля результата:

ПолеСодержимое
departmentsВыводы со статусами created, preserved, reorganized, removed
functionsВыводы со статусами preserved, transferred, lost, duplicated, new; списки before_units, after_units
duplicates, conflicts, recommendationsСписки выводов
conclusionОдин итоговый вывод
sourcesФрагменты парсера

У каждого вывода обязательны title, explanation, непустой source_ids. Пустые списки разделов допустимы. Полный пример доступен в examples/demo.json: загрузите его в режиме «Готовый JSON». Машиночитаемая схема — examples/report.schema.json.

source_ids и Pydantic проверяют структуру и наличие ссылок, но не доказывают, что цитата подтверждает вывод. Это проверяют агент, backend и ответственный сотрудник. Для потенциальной потери функции нужно проверять полноту комплекта «после»: отсутствие упоминания в одном фрагменте не доказывает потерю функции.

Файлы

  • app.py — интерфейс и экспорт отчёта; начни редактирование здесь.
  • backend_adapter.py — подключение к функции команды.
  • ui_contract.py — предварительный контракт интерфейса.
  • demo_data.py — учебный пример.
  • tests/test_ui.py — проверка ссылок, интерфейса и передачи документов backend.

Проверка

.\.venv\Scripts\python.exe -m unittest discover -s tests -v

API интерфейса: Streamlit, проверка UI: AppTest.

Для демонстрации откройте вкладку «Функции», выберите потерю реестра договоров, раскройте пункты «до» и «после», затем покажите дублирование и потенциальный конфликт. Скачайте отчёт и загрузите его обратно через «Готовый JSON».

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

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

YungArti 6Мерей 5saper-avi 4

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

  • 2026-09-23 17:47Configure OpenAI example and add local launcherYungArti
  • 2026-09-23 16:52Merge pull request #3 from BAITC-Hacks/integration/backend-for-interfacesaper-avi
  • 2026-09-23 16:33Add NIM credential configurationsaper-avi
  • 2026-09-23 16:28Connect parser and NIM agent to UI backendsaper-avi
  • 2026-09-23 16:12Merge pull request #2 from BAITC-Hacks/interface-betaМерей
  • 2026-09-23 15:53Merge remote-tracking branch 'origin/M-beta-1' into interface-betaYungArti
  • 2026-09-23 15:49Merge pull request #1 from BAITC-Hacks/M-beta-1Мерей
  • 2026-09-23 15:44Add interface beta for organizational analysisYungArti
Все коммиты (15)
  • 2026-09-23 15:25feat(agent): add NIM function calling and grounded analysis schemasTR-UPI
  • 2026-09-23 15:07ArtiaiYungArti
  • 2026-09-23 11:56itaiYungArti
  • 2026-09-23 11:06Saper_commitsaper-avi
  • 2026-09-23 09:48itaiYungArti
  • 2026-09-22 21:30commitTR-UPI
  • 2026-09-22 21:29New commitTR-UPI
Структура репозитория (23 файлов)
.gitignore
.streamlit/config.toml
.streamlit/secrets.example.toml
M1 py
README.md
Saper-Avi
app.py
backend.py
backend_adapter.py
demo_data.py
docs/person1-agent.md
examples/demo.json
examples/report.schema.json
itaigang
requirements-agent.txt
requirements.txt
src/agent.py
src/parsers.py
src/schemas.py
start.ps1
tests/test_agent.py
tests/test_ui.py
ui_contract.py
Ветки (4)

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

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

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