Multimodal AI Assistant

Ученик фотографирует задачу — система читает фото, распознает и выдаёт пошаговое решение с формулами. Также пишет сочинения, делает конспекты и отвечает на учебные общие вопросы. Пайплайн — от приёма файла до форматирования ответа под образовательный интерфейс заказчика.

Роль

Спроектирована архитектура API и 4 эндпоинта, выстроена обработка 7 типов файлов, построена оркестрация агентов, output ответ в KaTex-разметке

Режимы

— решение задач
— сочинения
— конспекты
— чат-помощник

Stack
FAISS Langchain OpenAI API Python FastAPI Redis pdfplumber python-docx openpyxl xlrd antiword

Какие сложности были у проекта

Четыре кнопки на сайте — четыре разных backend-сценария

Решение задачи, сочинение, конспект и чат — это не одно и то же. У каждого своя логика, свои модели и свой формат выхода. Я упаковал их в единый API-сервис с общим middleware и контрактами ответов — чтобы фронт работал с одним бэкендом, а не с четырьмя разными.

Пользователи присылают не только текст

Фото тетради, скан условия, Word-файл с заданием, таблица Excel — всё это реальные входы образовательного продукта. Я построил отдельную подсистему обработки файлов: определение типа, временное хранение, специализированный reader под каждый формат и очистка после обработки.

Архитектура: четыре режима — четыре разные логики

Загрузка схемы…
Колёсико — масштаб, зажатая мышь — перемещение, двойной клик — сброс
Как это читать
  • Четыре кнопки на фронте — четыре разных эндпоинта. Решение задачи, сочинение, конспект и чат работают по разной логике — не одним промптом на всё.
  • Сначала прочитать файл, потом решать задачу. Одна модель не должна одновременно разбирать шумное фото и рассуждать над условием. Extraction и reasoning разделены намеренно.
  • Семь форматов файлов — один pipeline. Фото, PDF, Word, Excel — каждый тип обрабатывается своим reader-модулем и очищается после использования.
  • Знания платформы — только для чата. FAISS-индекс используется только в chatbot-режиме. Для задач и сочинений это не нужно — и не смешивается.
  • Формат ответа — часть backend-системы. KaTeX-форматирование и очистка символов живут на сервере, а не на клиенте.

Векторная FAISS БД

Для chatbot-режима собрана md-база знаний: как работает сервис, какие есть режимы, как правильно отвечать на учебные вопросы. Langchain-фреймворк чанкирует маркдаун базу для последующей векторизации и семантического поиска

Решение задачи выглядит как учебный разбор, а не чат

Формулы, шаги решения и финальный ответ оформляются по KaTeX-правилам прямо на сервере. Это не украшение — без этого контракта математика на образовательном сайте просто не отображается корректно.

Фото задачи → пошаговое решение

Пользователь прикрепляет скриншот — система читает условие, разбивает на «Дано / Решение / Ответ» и выдаёт структурированный разбор с формулами. Это главный сценарий продукта: помочь с задачей без переписывания условия вручную.

Этапы разработки проекта

4 слоя, которые вместе делают образовательный ассистент рабочим: API, обработка файлов, chain of thought, RAG-поиск.

API с отдельными режимами

Четыре режима — четыре отдельных pipeline. Решение задач, сочинения, конспекты и чат работают по разной логике, но через один сервис с общим middleware и контрактами ответов.

Обработка мульти-формат

Фото, PDF, Word, Excel — каждый формат обрабатывается своим модулем. Файл декодируется, читается и удаляется после обработки. Семь форматов — один унифицированный вход.

Role-split логика

Сначала дешёвая модель читает файл или фото и извлекает текст. Потом Reasoning модель решает задачу по чистому условию. Два шага — два разных уровня качества на каждом из них.

Langchain чанкирование

Сотни сценариев использования платформы и тысячи материалов требовали дробления исходной базы на чанки для качественного RAG-поиска

Retrieval-поиск для чатбота

FAISS-индекс подключён только в chatbot-режиме — как база знаний платформы c конкретным score для релевантного ответа. Для задач и сочинений retrieval не нужен и не используется.

Эксплуатация

Активные сессии клиента через id-заголовок от фронта, Redis rate лимиты, retry при сбоях OpenAI, очистка временных файлов после обработки.

Два решения, которые определили качество результата

Сначала прочитать — потом думать

Если попросить одну модель одновременно разобрать шумное фото и решить задачу — качество падает на обоих шагах. Я разделил это на два вызова: дешёвая модель извлекает текст, сильная модель решает задачу по чистому условию. Результат точнее и предсказуемее.

Форматирование — не косметика, а инженерная задача

Образовательный интерфейс рендерит формулы через KaTeX. Если ответ придёт с неправильными символами — отображение сломается. Я вынес sanitization и KaTeX-правила на сервер, чтобы фронт получал готовый контракт, а не разбирался с форматом сам.