О проекте
Команда: hackers1337
Кейс HackAlem.ai: Спецтрек — Казахтелеком
Стадия: Рабочий MVP
Задача кейса: Агент, сравнивающий документы оргструктуры до и после реорганизации
Суть
Streamlit-приложение сравнивает комплекты положений и оргдокументов до и после реорганизации и выдаёт выводы с точными цитатами, документом и местом в источнике, плюс отчёт в Markdown/CSV.
Как устроено
reader.py извлекает текст из TXT, DOCX (абзацы и таблицы) и PDF с текстовым слоем. agent.py через OpenAI Responses API даёт модели только два инструмента: поиск фрагментов и чтение фрагмента по ID. Модель сначала извлекает функции, затем сопоставляет их и ищет спорные доказательства, число вызовов ограничено. validation.py проверяет JSON и существование ID доказательств, а цитаты подставляются из исходных фрагментов. report.py формирует Markdown и CSV с BOM.
Ключевые решения
- OpenAI Responses API
- function calling
- evidence ID validation
- защита от prompt injection
- DOCX/PDF text extraction
- pytest с mock-провайдером
Особенности
Анти-галлюцинационный дизайн: модель возвращает только ID фрагментов, а цитаты и координаты берутся из исходника. Модель получает минимальные инструменты без доступа к файлам и URL. В демо-данные нарочно вставлены строки с prompt injection. Есть явное согласие пользователя на отправку текста во внешний API и режим без ключа.
Стек
Python · Streamlit · python-docx · PDF parsing · pytest
Модели
OpenAI gpt-5.6
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-2a2d05f9-hackers1337.
README
README.mdИИ-агент для сравнения организационных документов
Streamlit-приложение помогает сравнить комплекты положений и организационных документов до и после реорганизации. Оно извлекает текст TXT, DOCX и PDF с текстовым слоем, передаёт подтверждённые фрагменты ИИ-модели для смыслового сравнения и формирует выводы с точными цитатами, документами и расположением источника.
Приложение не принимает кадровых или юридических решений. Формулировка «Не найдено в загруженных документах» не означает, что функция ликвидирована. Каждый вывод нужно сверить с владельцем процесса и полным комплектом действующих документов.
Как устроен агент
- Интерфейс и загрузка реализованы в app.py.
- org_audit/reader.py читает TXT, абзацы и таблицы DOCX, а также текстовые страницы PDF. Номера страниц сохраняются только для PDF. Для PDF без текстового слоя показывается необходимость OCR.
- org_audit/agent.py вызывает Responses API и выдаёт модели только два прикладных инструмента: поиск фрагментов в памяти процесса и чтение одного фрагмента по ID. Модель не получает доступ к терминалу, произвольным файлам, URL или редактированию источников.
- Сначала агент извлекает функции, затем сопоставляет их и ищет спорные доказательства. Число запросов и вызовов инструментов ограничено; обращения имеют тайм-аут и одну повторную попытку через SDK.
- org_audit/validation.py проверяет JSON, принадлежность ID комплекту, существование всех доказательств и минимальные требования к категориям. Цитаты, названия документов и расположение подставляются из исходных фрагментов.
- org_audit/report.py формирует заключение Markdown и CSV с BOM для корректного открытия кириллицы.
- Текст документов считается недоверенным. Фраза с инструкцией внутри документа не может добавить модели новые инструменты или доступ к внешним адресам.
Для отправки текста во внешний API интерфейс показывает предупреждение и требует подтверждения пользователя. Без ключа API можно загружать и просматривать документы, но реальный ИИ-анализ выключен. Приложение не сохраняет загруженные файлы на диск и не использует базу данных.
Установка на Windows
Первый запуск
- Установите Python 3.12 для Windows с python.org. В установщике оставьте включёнными Python Launcher и добавление Python в PATH.
- Откройте папку проекта в Проводнике и дважды нажмите
setup_windows.bat. Скрипт создаст чистое окружение.venv, установит нужные библиотеки и создаст.env, если его ещё нет. Если папка.venvуже существует, скрипт спросит разрешение пересоздать только её. - Откройте файл
.envв VS Code. Впишите свой ключ послеOPENAI_API_KEY=. Кавычки не нужны. СтрокуOPENAI_MODEL=можно оставить пустой — тогда используетсяgpt-5.6. - Запустите сайт двойным нажатием на
start_windows.bat. Откроется адрес локального приложения, обычно http://localhost:8501. Чтобы остановить сайт, нажмитеCtrl+Cв появившемся окне.
Ключ хранится только в локальном .env, который исключён из Git. Не вставляйте его в app.py, чат или GitHub.
Без API-ключа можно открыть приложение, загрузить документы и посмотреть демонстрационные примеры; сравнение с ИИ будет выключено. Для анализа нужен действующий ключ OpenAI API, доступ к выбранной модели и доступный бюджет API.
Если запуск не удался
- После установки Python закройте и снова откройте VS Code, чтобы он увидел команду
py. - Если появится сообщение о недостающем модуле или сломанной
.venv, снова запуститеsetup_windows.batи подтвердите пересоздание окружения. - Если сайт открылся, но анализ вернул ошибку API, проверьте в
.envключ и модель, а также доступный бюджет API в проекте OpenAI.
Тесты
Установите тестовые зависимости и запустите pytest:
python -m pip install -r requirements-dev.txt
python -m pytest -q
Тесты проверяют чтение форматов, расположение цитат, идентификаторы доказательств, повреждённые и пустые файлы, режим без API-ключа, отчёты и невалидный ответ модели. API заменён mock-провайдером; успешные mock-тесты не подтверждают качество реальной модели и не доказывают защиту от всех атак.
Демонстрация за 3 минуты
- Запустите приложение и включите «Добавить вымышленные демонстрационные данные».
- Покажите предпросмотр до/после: подразделения, пункты и строки с prompt injection.
- Если настроен API-ключ, подтвердите право передачи и нажмите «Сравнить документы».
- Покажите сводку категорий, отфильтруйте возможное дублирование и раскройте цитаты с документами и расположением.
- Скачайте Markdown-заключение и CSV. Напомните, что отсутствующее соответствие не доказывает ликвидацию функции.
Примеры в examples/ полностью вымышленные и не содержат реальных положений Казахтелекома. Без ключа API можно показать загрузку и предпросмотр, но ИИ-сравнение не выполняется и не подменяется подготовленными ответами.
Ограничения
- PDF поддерживается, если содержит извлекаемый текст. OCR сканов не реализован.
- DOCX сохраняет абзацы и расположение таблиц; номера Word-списков берутся из структуры файла, если она доступна. Номера страниц DOCX не указываются.
- Смысловое сопоставление зависит от модели и полноты загруженных документов. Итог требует проверки человеком.
- Приложение показывает только выводы с проверенными ссылками. При невалидном ответе, ошибках чтения или ограничении контекста анализ помечается как частичный.
- Перед внешней передачей документов пользователь должен подтвердить право на такую передачу.
Авторы коммитов
История коммитов
- 2026-09-23 17:21Add a one-click Windows app launchersplashcob
- 2026-09-23 17:21Add a guided Windows environment setupsplashcob
- 2026-09-23 17:21Ignore repaired Python environmentssplashcob
- 2026-09-23 17:21Document the Windows setup and launch flowsplashcob
- 2026-09-23 17:20Set the new Kontur visual themesplashcob
- 2026-09-23 17:20Refresh the audit app experiencesplashcob
- 2026-09-23 16:40Добавить светлую тему Streamlitsplashcob
- 2026-09-23 16:38Обновить минимальную версию Streamlitsplashcob
Все коммиты (14)
- 2026-09-23 16:38Обновить интерфейс приложения аудитаsplashcob
- 2026-09-23 15:53Добавить json в запросы после вызова инструментовsplashcob
- 2026-09-23 15:48Показывать подробность ошибки OpenAI APIsplashcob
- 2026-09-23 15:37Пояснить ошибку отсутствующей библиотекиsplashcob
- 2026-09-23 15:17Update README.mdsplashcob
- 2026-09-23 14:36Build organizational document comparison MVPsplashcob
Структура репозитория (22 файлов)
.env.example .gitignore .streamlit/config.toml README.md app.py examples/README.md examples/after.txt examples/before.txt org_audit/__init__.py org_audit/agent.py org_audit/models.py org_audit/reader.py org_audit/report.py org_audit/validation.py requirements-dev.txt requirements.txt setup_windows.bat start_windows.bat tests/test_agent.py tests/test_reader.py tests/test_report.py tests/test_validation.py
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.