AI-советник по развитию существующих клиентов
Чат-советник на базе LLM, который анализирует корпоративные данные о клиенте и даёт факты и рекомендации по upsell/удержанию с уровнем уверенности, либо честно признаёт нехватку контекста.
О проекте
Клиент CorpSoft24 обратился с задачей дать руководителям продаж единый инструмент, который сводит воедино разрозненные корпоративные данные о клиенте и подсказывает, как развивать отношения с уже существующими клиентами — где есть потенциал upsell/cross-sell, а где риск оттока требует немедленного внимания. Ключевое требование — советник не должен «галлюцинировать»: при нехватке данных он обязан не выдумывать рекомендации, а прямо спросить у пользователя недостающую информацию.
Full-stack MVP: React-фронтенд, Bun/Hono backend, PostgreSQL и MinIO, поднимаемые через Docker Compose. Backend написан без ORM — все SQL-запросы идут напрямую через postgres-js. Центральная часть системы — движок советника, который перед каждым ответом собирает 360°-контекст о клиенте и оценивает его полноту, прежде чем разрешить LLM дать рекомендацию.
Технологии
- TypeScript
- Bun
- Hono
- React
- Vite
- PostgreSQL
- MinIO
- OpenAI API
Что разработано
- Движок советника: сбор 360°-контекста клиента, оценка полноты данных, решение о режиме ответа (answer/clarify)
- Строгая структурированная схема ответа: LLM обязан отвечать валидным JSON по фиксированной схеме (mode, confidence, missing_data, clarifying_questions, facts, recommendations, sources)
- RAG-пайплайн: извлечение текста из txt/md/csv/pdf/docx/xlsx, чанкинг по абзацам, эмбеддинг и косинусный поиск с лексическим fallback
- Импорт продаж из Excel/CSV с авто-распознаванием колонок по regex на русском и английском
- Схема БД из 8 таблиц: clients, contracts, projects, sales_records, documents, doc_chunks, chats, messages со статусными полями
- Детерминированный mock-советник, воспроизводящий логику гейтинга без единого внешнего API-вызова
- Голосовой чат на Web Speech API без сторонних сервисов синтеза речи
- Собственные SVG-графики выручки и продуктов без chart-библиотек
- Генерация Markdown-отчёта по клиенту
- Presigned URL с разделением internal/public endpoint для доступа к MinIO из браузера
Ключевые фичи
- Гейтинг по полноте контекста: при скоре ниже 60% советник принудительно переходит в режим clarify вместо того, чтобы придумывать выводы на неполных данных
- Жёсткое разделение фактов и рекомендаций — заложено в промпте, схеме данных и UI
- Уровень уверенности (high/medium/low) — обязательное поле в каждом ответе
- RAG с graceful degradation: без API-ключа поиск по документам автоматически переключается на лексический скоринг по тому же коду
- Полностью рабочий mock-режим без LLM — продукт демонстрируем без единого внешнего вызова и затрат на токены
- Провайдеро-независимый LLM-клиент — переключение OpenAI ↔ OpenRouter одной переменной окружения
- «Спор» с пользователем при риске оттока — при негативном тренде выручки советник рекомендует сначала снять недовольство клиента
- Отсутствие ORM — параметризованные SQL-запросы напрямую, идемпотентная схема для воспроизводимых пересозданий БД в деморежиме
Решение задачи
Основная сложность задачи — не техническая интеграция LLM с данными, а доверие к выводам ИИ-советника в чувствительной для бизнеса области. Решение архитектурно вынесло проверку достаточности данных в отдельный, детерминированный, независимый от LLM слой: скор полноты считается эвристикой ещё до вызова модели и определяет, разрешено ли вообще давать рекомендацию.
Второе важное решение — полная функциональность без внешней LLM-зависимости через детерминированный mock-режим, зеркалящий всю бизнес-логику гейтинга на статичных правилах. Это решает практическую проблему демонстрации ИИ-продукта: заказчик может прогнать полный пользовательский сценарий без API-ключа и затрат на токены.
Метрики
Результаты
Защита от галлюцинаций
Рекомендации только при достаточности данных — иначе советник уточняет вопросы
Демонстрация без затрат на LLM
Полностью рабочий mock-режим воспроизводит логику советника без API-ключа
Заказать похожий проект
Оставьте заявку — обсудим задачу и предложим решение под ваш бизнес.
Оставить заявку