AI Prompt Lab: как систематизировать промпты без лишних усложнений
Разработчик создал full-stack приложение для управления AI-промптами, намеренно выбрав простую архитектуру и классический стек технологий, чтобы продемонстрировать системный подход там, где большинство хранит заметки в блокнотах.
В эпоху повального увлечения генеративным AI настоящая проблема — не создание промпта, а его систематизация. AI Prompt Lab пытается решить именно её, и делает это с завидным архитектурным здравым смыслом.
Пока одни разработчики собирают стартапы вокруг очередных обёрток над ChatGPT, другие занимаются менее заметной, но не менее важной инженерной задачей — организацией рабочего процесса с моделями. Именно к таким относится проект AI Prompt Lab: полноценное приложение для хранения, редактирования и использования промптов, построенное на Java 21, Spring Boot, React 19 и PostgreSQL с интеграцией OpenRouter.
Проблема: промпты разлетаются по углам
Кто хоть немного работал с генеративными моделями, знает эту боль: удачный промпт для генерации кода лежит в заметках, инструкция для бота — в чате, а сложная цепочка рассуждений — в текстовом файле на рабочем столе. Через месяц найти нужный вариант практически невозможно, не говоря уже о версионировании и совместном использовании.
Разработчик проекта, скрывающийся под ником certosinolab, предложил простое решение: относиться к промптам как к любому другому структурированному ассету приложения — с CRUD-операциями, аутентификацией и нормальным хранилищем.
Архитектура: нарочитая простота как философия
Самое интересное в проекте — не сам функционал, а архитектурные решения. Автор сознательно отказался от типичного зоопарка технологий:
- Модульный монолит вместо микросервисов. Бэкенд — единое Spring Boot-приложение со слоистой архитектурой (controller → service → repository → model). Никакой избыточной декомпозиции.
- React Context вместо Redux или Zustand. Единственное глобальное состояние — данные аутентифицированного пользователя, для чего Context более чем достаточен.
- Классический стек — Java 21, Spring Boot, PostgreSQL, Vite, TypeScript. Никаких экспериментальных фреймворков или хайповых инструментов.
Такой подход вызывает уважение. В мире, где каждый стартап стремится обрасти Kubernetes-кластером и пятью базами данных ради CRUD-приложения, трезвая оценка реальных потребностей — редкость.
Стек технологий: проверенные решения
Бэкенд строится вокруг Spring Boot с JPA для работы с PostgreSQL. Миграции схемы управляются через Flyway — то есть изменения базы данных версионируются вместе с кодом, а не происходят «сами собой» при старте приложения.
Фронтенд — React 19 с TypeScript и сборщиком Vite. Компоненты разделены по ответственности: страницы, компоненты, контекст, сервисы для API-вызовов, типы. HTTP-запросы изолированы в отдельном сервисном слое, что позволяет менять API без переписывания всего UI.
Как работает промпт-менеджмент
Каждый пользователь получает личное пространство с промптами. Можно создавать, редактировать, удалять и просматривать свои инструкции для моделей. Сортировка выполняется на уровне репозитория — то есть на стороне сервера, а не в клиентском коде.
Кроме того, пользователь может настроить свой аккаунт OpenRouter для работы с различными языковыми моделями. Это ключевой момент: приложение не привязано к конкретному провайдеру, а работает через универсальный агрегатор.
Безопасность: шифрование API-ключей
Отдельного внимания заслуживает обработка сторонних учётных данные. API-ключи OpenRouter шифруются в базе данных с помощью AES в режиме GCM. Расшифровка происходит только при формировании запроса к внешнему сервису. Это правильный подход — ключи не хранятся в открытом виде и не передаются на фронтенд.
Сессии аутентификации реализованы через HTTP-only cookies с BCrypt-хешированием паролей. Ролевая модель разделяет обычных пользователей и администраторов, причём проверка прав доступа происходит на стороне сервера, а не доверяется клиенту.
Чат как точка сборки
Наиболее показательная часть приложения — чат. Здесь сходятся все слои: пользователь выбирает сохранённый промпт, добавляет контекст, React отправляет запрос на Spring Boot, бэкенд подгружает конфигурацию пользователя из PostgreSQL и перенаправляет запрос в OpenRouter, а ответ модели возвращается в интерфейс.
Этот поток наглядно демонстрирует архитектурные границы: каждый слой выполняет свою задачу, не залезая в компетенцию соседнего.
Что можно улучшить
Автор честно признаётся, что проект оставляет место для развития. Среди логичных следующих шагов:
- Категории и теги для промптов — незаменимы при большом количестве инструкций.
- Версионирование промптов — возможность отслеживать изменения и возвращаться к предыдущим вариантам.
- Стриминг ответов — вместо ожидания полного ответа модели progressive отображение через Server-Sent Events.
- Поддержка нескольких AI-провайдеров — абстракция над OpenRouter, OpenAI, Anthropic и локальными моделями.
- Сохранение истории чатов — сейчас сессии живут только в рамках открытой страницы.
- Метрики использования — количество токенов, задержки, стоимость запросов.
Критический взгляд
Проект интересен как пример здравой инженерии, но стоит понимать его ограничения. Это пет-проект с открытым исходным кодом, а не коммерческий продукт. Нет данных о нагрузочном тестировании, масштабируемости или реальном использовании.
Выбор OpenRouter как единого провайдера — практично, но создаёт зависимость от внешнего сервиса. Шифрование ключей реализовано, но без деталей о ротации ключей или управлении доступом.
Архитектурная простота — одновременно сильная сторона и ограничение. Для индивидуального использования или малой команды это идеально, но для масштабирования потребуется пересмотр некоторых решений.
Вывод
AI Prompt Lab — не революционный проект. Но это добротный пример того, как можно системно подойти к рутинной задаче, не увлекаясь модными стеками и сверхсложными архитектурами.
Разработчик напоминает важный принцип: вводить абстракцию стоит тогда, когда она убирает значимую сложность, а не просто потому, что она существует. В мире, где Junior-разработчики разворачивают Kubernetes для лендинга, такой подход заслуживает внимания.
Полный исходный код проекта доступен на GitHub: Java21_React19_AIPromptLab.