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-ключа
Заказать похожий проект
Оставьте заявку, обсудим задачу и предложим решение под ваш бизнес.
Оставить заявку