AI-агент «Пресейл-менеджер» для подготовки КП
Мультисервисный AI-ассистент для пресейл-команд: анализирует клиента, готовит коммерческие предложения и презентации на базе RAG и веб-исследования, с генерацией файлов DOCX/PDF.
О проекте
Клиент CorpSoft24 обратился с задачей автоматизировать работу пресейл-менеджеров: быстро анализировать клиента (бизнес, потребности, конкурентов) и готовить коммерческие предложения и презентации, опираясь на корпоративную базу прошлых КП и шаблонов, а не с нуля.
Монорепозиторий на Bun workspaces с асинхронной архитектурой: frontend обращается только к backend API на Hono, который не выполняет никакой AI-логики — он валидирует запрос и кладёт задачу в очередь Redis (BullMQ). Вся тяжёлая работа выполняется в отдельном горизонтально масштабируемом сервисе ai-agent-worker. Инфраструктура — 7 Docker-контейнеров: PostgreSQL, Redis, Qdrant, MinIO, backend API, воркер, frontend на Nginx.
Технологии
- TypeScript
- Bun
- Hono
- React
- PostgreSQL
- Redis
- BullMQ
- Qdrant
- MinIO
- OpenAI API
- Docker
Что разработано
- Асинхронный конвейер обработки сообщений: сохранение сообщения → создание AgentTask → постановка в очередь → мгновенный ответ 202 с task_id
- AI Agent Worker на BullMQ: маршрутизация по типу задачи (chat_message_processing, artifact_generation, rag_document_ingestion), concurrency 4, ретраи с exponential backoff
- RAG-пайплайн: извлечение текста из txt/md/docx/xlsx/pdf, чанкинг с overlap, батч-эмбеддинг, upsert в Qdrant
- Веб-ресёрч по клиенту и конкурентам для режима «Анализ клиента» через отдельного провайдера
- Генерация файлов: DOCX через библиотеку docx, PDF через pdfkit с явным поиском кириллического TTF-шрифта
- Общий markdown-парсер ответа LLM в промежуточные блоки, которые оба генератора файлов интерпретируют по-своему
- Автоматический детектор запроса на файл (regex по русским глаголам «сохрани», «выгрузи», «сформируй файл»)
- Модульная сборка system-промпта: база → режим → язык → уточняющие вопросы → RAG-контекст → веб-контекст → история
- Схема данных на Drizzle ORM: users, chats, messages, agent_tasks, artifacts, documents, document_chunks
- Presigned URL с TTL 7 дней и переписыванием внутреннего docker-хоста на публичный эндпоинт
- Полное тестовое покрытие: unit-тесты по всем модулям + e2e smoke-скрипт против поднятого docker-стека
Ключевые фичи
- Полностью асинхронная архитектура на очередях: отправка сообщения — мгновенный ответ, реальная LLM-обработка идёт в отдельном масштабируемом воркере
- Graceful degradation без API-ключа: LLM-задачи предсказуемо завершаются failed, RAG продолжает работать на детерминированных офлайн-эмбеддингах
- Pluggable-архитектура через интерфейсы SearchProvider и WebResearchProvider — переключение реализации одной переменной окружения
- Честный mock вместо галлюцинаций: провайдер веб-ресёрча по умолчанию возвращает пустой результат, а не выдуманные данные о клиенте
- Кириллица в PDF из коробки — иначе документ выходил бы «крякозябрами» на встроенном шрифте pdfkit
- Горизонтальное масштабирование воркера без изменений в коде (docker compose up --scale ai-agent-worker=N)
- Явная граница MVP зафиксирована в коде: неподдерживаемые провайдеры содержат явные заглушки с комментарием «вне MVP»
- Ограниченные ретраи с сохранением причины ошибки — полный жизненный цикл статусов задачи created → queued → processing → completed/failed
Решение задачи
Ключевая инженерная проблема — сделать LLM-ответ, который может занимать секунды и иногда падать, частью синхронного по ощущениям чат-интерфейса, не блокируя HTTP-запрос и не теряя данные при сбое. Решение — полностью асинхронная схема на Redis/BullMQ с поллингом статуса задачи на фронтенде.
Вторая часть задачи — сделать ответы агента полезными и не выдуманными. Решение — комбинация RAG по внутренним документам и опционального веб-ресёрча, спроектированных как заменяемые провайдеры за общим интерфейсом. Честные mock-провайдеры и graceful-деградация без API-ключа превращают демо-стенд в систему, проверяемую end-to-end даже без реальных LLM-затрат.
Метрики
Результаты
Готовое КП вместо ручной сборки
Автогенерация коммерческого предложения и презентации в DOCX/PDF из диалога с агентом
Асинхронная обработка без таймаутов
Очередь на BullMQ и горизонтально масштабируемый воркер для LLM- и RAG-запросов
Заказать похожий проект
Оставьте заявку — обсудим задачу и предложим решение под ваш бизнес.
Оставить заявку