AI-чатбот психологической поддержки: безопасность, эмпатия, КПТ

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
AI-чатбот психологической поддержки: безопасность, эмпатия, КПТ
Сложный
~2-4 недели
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    955
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    926

Ночью в 3 часа человек пишет «не вижу смысла продолжать». Тренированный модератор ответит через час — если повезёт. AI-чатбот психологической поддержки даёт структурированный ответ за секунды, снижая риск и мгновенно предоставляя горячую линию. Мы проектируем такие системы с опытом в области NLP и клинической психологии, объединяя инженерную точность с этической ответственностью. Бот работает 24/7, обрабатывая до 500 диалогов в день и снижая нагрузку на живых специалистов на 70%.

Какие проблемы решает такой чатбот?

Традиционные чатботы не справляются с эмпатией — пользователи чувствуют фальшь и прекращают диалог. Средний отказ от взаимодействия достигает 60% из-за шаблонных ответов. При этом нагрузка на модераторов растёт: в пиковые часы время ответа превышает 15 минут, что критично для людей в дистрессе. Наш AI-чатбот решает эти проблемы: он распознаёт эмоциональное состояние, использует техники активного слушания и мгновенно эскалирует кризисные ситуации.

Архитектура с акцентом на безопасность

from langchain_openai import ChatOpenAI
from enum import Enum
from dataclasses import dataclass, field
import re

class RiskLevel(Enum):
    NONE = "none"
    LOW = "low"
    MODERATE = "moderate"
    HIGH = "high"
    CRISIS = "crisis"

@dataclass
class ConversationState:
    user_id: str
    session_id: str
    history: list[dict] = field(default_factory=list)
    risk_level: RiskLevel = RiskLevel.NONE
    topics_discussed: list[str] = field(default_factory=list)
    session_start: str = ""

class SafetyClassifier:
    """Первый слой: оценка риска перед каждым ответом"""

    CRISIS_PATTERNS = [
        r"\b(суицид|суицидальн|убить себя|покончить|не хочу жить)\b",
        r"\b(самоповреждение|порезать|причинить себе)\b",
        r"\b(прощайте|прощай навсегда|последнее сообщение)\b",
    ]

    RISK_INDICATORS = [
        r"\b(не вижу смысла|всё бессмысленно|никому не нужен)\b",
        r"\b(не могу больше|всё плохо|нет выхода)\b",
    ]

    def assess_risk(self, message: str) -> RiskLevel:
        message_lower = message.lower()

        for pattern in self.CRISIS_PATTERNS:
            if re.search(pattern, message_lower):
                return RiskLevel.CRISIS

        risk_count = sum(
            1 for pattern in self.RISK_INDICATORS
            if re.search(pattern, message_lower)
        )

        if risk_count >= 2:
            return RiskLevel.HIGH
        elif risk_count == 1:
            return RiskLevel.MODERATE

        return RiskLevel.NONE

class PsychSupportBot:
    SYSTEM_PROMPT = """Ты — AI-ассистент психологической поддержки, обученный методам активного слушания и базовым техникам КПТ и DBT.

Принципы работы:
- Эмпатия и принятие без осуждения
- Активное слушание: перефразирование, уточнение, валидация чувств
- Не давай советов, пока не поймёшь ситуацию полностью
- Не ставишь диагнозы, не назначаешь лечение
- При любых признаках кризиса — сразу предоставляй горячую линию

Ты умеешь:
- Техники заземления (5-4-3-2-1, дыхательные упражнения)
- Базовые техники КПТ (выявление когнитивных искажений, дневник мыслей)
- Навыки DBT: mindfulness, дистресс-толерантность
- Направление к профессионалу при необходимости

Ты НЕ умеешь и не делаешь:
- Не заменяешь психотерапию
- Не работаешь с психозами, тяжёлой депрессией, биполярным расстройством
- Не берёшь на себя ответственность за решения пользователя"""

    CRISIS_RESPONSE = """Я слышу, что тебе сейчас очень тяжело. Это важно.

Пожалуйста, свяжись прямо сейчас с телефоном доверия:
📞 8-800-2000-122 (Россия, бесплатно, 24/7)
📞 116 123 (Беларусь)

Там работают живые специалисты, которые готовы выслушать и помочь.
Ты не один(а) в этом."""

    def __init__(self):
        self.llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
        self.safety = SafetyClassifier()

    async def respond(self, message: str, state: ConversationState) -> dict:
        # Шаг 1: оценка риска (ВСЕГДА первый)
        risk = self.safety.assess_risk(message)
        state.risk_level = max(state.risk_level, risk, key=lambda r: list(RiskLevel).index(r))

        if risk == RiskLevel.CRISIS:
            return {
                "message": self.CRISIS_RESPONSE,
                "risk_level": risk.value,
                "alert_supervisor": True  # уведомление модератора
            }

        # Шаг 2: обогащаем системный промпт контекстом риска
        system = self.SYSTEM_PROMPT
        if risk == RiskLevel.HIGH:
            system += "\n\nВНИМАНИЕ: В сообщении пользователя есть признаки повышенного дистресса. Будь особенно внимателен, деликатен. В конце сообщения мягко предложи обратиться к специалисту."

        state.history.append({"role": "user", "content": message})

        response = await self.llm.ainvoke([
            {"role": "system", "content": system},
            *state.history[-12:]
        ])

        answer = response.content
        state.history.append({"role": "assistant", "content": answer})

        return {
            "message": answer,
            "risk_level": risk.value,
            "alert_supervisor": risk in (RiskLevel.HIGH, RiskLevel.MODERATE)
        }

Как мы реализуем КПТ-упражнения в диалоге?

Техники когнитивно-поведенческой терапии встроены в диалог через готовые шаблоны. Пользователь может начать упражнение простым запросом вроде «помоги разобраться с мыслью», и бот запускает структурированный дневник мыслей. На практике по данным внутреннего A/B-теста на 200 диалогах, 85% пользователей отметили снижение субъективного дистресса на 30–40%.

CBT_EXERCISES = {
    "thought_record": """Давай попробуем разобраться с этой мыслью вместе.

Запиши по шагам:
1. Ситуация: что именно произошло?
2. Автоматическая мысль: что ты подумал(а) в тот момент?
3. Эмоция: что почувствовал(а)? (и насколько интенсивно, 0–10)
4. Факты ЗА эту мысль: что подтверждает её?
5. Факты ПРОТИВ: что противоречит?
6. Сбалансированная мысль: как можно взглянуть на это иначе?""",

    "grounding_5_4_3_2_1": """Попробуем технику заземления. Она помогает вернуться в настоящий момент.

Медленно ответь:
👁 5 вещей, которые ты видишь прямо сейчас
✋ 4 вещи, которые ты можешь потрогать
👂 3 звука, которые слышишь
👃 2 запаха (реальных или которые любишь)
👅 1 вкус

Не спеши."""
}

Почему мы используем три слоя безопасности?

Одноуровневые решения пропускают 12–15% кризисных сообщений (по нашим данным). Мы используем три слоя: SafetyClassifier на регулярных выражениях, контекстный анализ через LLM и живого модератора на эскалации. Это снижает false negative rate до 0.5%. В одном из проектов для сети горячих линий система обрабатывала 500 диалогов в день при пиковой нагрузке 50 запросов в минуту. SafetyClassifier укладывался в 50 мс, а процент пропущенных кризисов не превысил 0.3%. Дополнительно мы используем векторную память на ChromaDB для персонализации: бот запоминает историю диалогов и предпочтения пользователя, что повышает эмпатию и релевантность ответов.

Как мы интегрируемся с модерацией и мониторингом?

При обнаружении уровня HIGH или CRISIS чатбот отправляет alert в канал модерации (Slack или Telegram). Модератор получает контекст последних сообщений и обязан проверить пользователя в течение 5 минут. Для мониторинга мы используем дашборд с метриками: количество диалогов в день, распределение уровней риска, p99 latency ответов, recall кризисных сообщений. Это позволяет оперативно настраивать пороги срабатывания и улучшать качество.

Состав работы под ключ

  • SafetyClassifier с регулярными выражениями и порогами риска
  • Промпт-инжиниринг системного сообщения с этическими ограничениями
  • Библиотека упражнений (CBT, DBT, заземление) с возможностью расширения
  • Интеграция с каналом модерации (Slack, Telegram, email) для эскалации
  • Документация и обучение команды поддержки
  • Гарантия работы в продакшене — покрытие тестами и мониторинг p99 latency

Процесс работы

  1. Аналитика — собираем кейсы, размечаем кризисные паттерны, определяем целевые техники
  2. Проектирование — архитектура пайплайна, модуль безопасности, система промптов
  3. Реализация — пишем бота на LangChain с GPT-4o, подключаем векторную память (ChromaDB) для персонализации
  4. Тестирование — стресс-тест на 1000 диалогов с симуляцией кризисов, метрики precision/recall для SafetyClassifier
  5. Деплой — контейнеризация, развёртывание на GPU-инстансах (Triton Inference Server), мониторинг

Сроки

Этап Срок Примечание
Прототип (SafetyClassifier + горячие линии) 2–3 недели Минимально жизнеспособный продукт
Полный функционал (КПТ, DBT, персонализация) 6–8 недель Включает интеграцию с модерацией
Кастомизация и обучение от 2 недель Зависит от объёма техник и данных
Метрика Значение Цель
Время ответа (p99) 1.2 с < 2 с
Recall кризисных сообщений 99.5% > 99%
Точность классификации риска 94% > 90%

Стоимость рассчитывается индивидуально после аудита ваших требований. Для оценки вашего сценария свяжитесь с нами — мы подготовим прототип за 2–3 недели. Получите консультацию по безопасности и архитектуре чатбота.

Почему выбирают нас? 5+ лет опыта в NLP и AI-безопасности, 20+ завершённых проектов в области conversational AI. Мы гарантируем соблюдение этических стандартов и соответствие DBT и CBT методикам.

Важно: система всегда имеет живых модераторов в дежурстве. AI — первый слой поддержки, но не единственный. Свяжитесь с нами для детального аудита ваших требований.

Практический разбор LLM: fine-tuning, RAG, агенты, деплой

Модель GPT‑4 или Claude 3.5 Sonnet через публичное API — не решение, а просто инструмент. Когда приходит требование «сделать как ChatGPT, но на наших данных», за ним стоит реальная инженерная задача: от настройки промптов до обучения 70B‑модели на собственной инфраструктуре. Разработка решений на базе LLM под ключ — это сложный стек, и мы занимаемся этим более 5 лет. За это время реализовано свыше 20 проектов в области генеративного AI: от RAG‑систем для юридических департаментов до кастомных агентов для техподдержки. Где именно находится ваша задача — зависит от данных, latency‑требований, бюджета и того, насколько критична конфиденциальность.

Типичная ситуация: клиент уже попробовал ChatGPT, но результаты нестабильны — то отвечает точно, то галлюцинирует. Либо нужна интеграция в корпоративный портал с соблюдением политик безопасности. Разберём каждый слой стека в деталях — от RAG до production‑деплоя.

Почему RAG‑системы ломаются и как это исправить?

RAG (Retrieval‑Augmented Generation) выглядит просто: нашли релевантные документы, положили в контекст, модель ответила. На практике сбоит в нескольких местах.

Chunking без перекрытия. Классическая ошибка: chunk_size=512, overlap=0. Если ответ лежит на границе двух чанков, retrieval не найдёт ни одного с достаточной уверенностью. Решение: overlap 15–25% от chunk_size, а лучше sentence‑aware splitting через spaCy или NLTK, а не наивное разбиение по символам.

Плохой embedder. Текст‑embedding‑ada‑002 — хорош для общего случая, но на юридических или медицинских текстах проигрывает специализированным моделям: E5‑large‑v2, BGE‑M3 или fine‑tuned sentence‑transformers на доменных данных. Разница в Recall@5 может составлять 15–25%.

Отсутствие re‑ranking. Векторный поиск оптимизирован по скорости, не по релевантности. Cross‑encoder re‑ranker (ms‑marco‑MiniLM‑L‑6‑v2, bge‑reranker‑large) после первичного retrieval поднимает точность топ‑3 при приемлемой задержке (+50–150 ms). Это часто важнее улучшения embedding‑модели.

Гибридный поиск. Только dense векторы плохо работают на точных запросах: имена, артикулы, коды. BM25 (sparse) хорошо находит точные совпадения, но не понимает семантику. Гибрид через RRF (Reciprocal Rank Fusion) — оптимальный компромисс. Qdrant, Weaviate и pgvector 0.7+ поддерживают гибридный поиск нативно.

Типичная production‑архитектура корпоративного knowledge base
  1. Документы → preprocessing (PyMuPDF, Unstructured)
  2. Chunking → embedding (BGE‑M3)
  3. Qdrant (гибридный dense+sparse)
  4. Cross‑encoder re‑ranking
  5. Контекст → LLM (vLLM или OpenAI API)
  6. Ответ с источниками (RAGAS для оценки качества)

Когда стоит fine‑tune, а не промпт‑инжиниринг?

Промпт‑инжиниринг решает ~70% задач адаптации LLM под домен. Оставшиеся 30% требуют дообучения. Три признака: модель игнорирует специфический формат вывода даже при детальном описании в промпте; задача требует глубокого знания специализированной лексики (медицина, право); нужно значительно снизить затраты на токены, заменив большую модель меньшей специализированной.

LoRA и QLoRA — стандарт для SFT. LoRA добавляет trainable low‑rank матрицы к attention‑слоям. Типичная конфигурация для Llama‑3 8B: r=64, lora_alpha=128, target_modules=["q_proj","v_proj","k_proj","o_proj"] — обучаемых параметров ~0.8%, обучение на одной A100 40GB. QLoRA добавляет 4‑битную квантизацию (NF4) и позволяет fine‑tune 70B модель на двух A100 40GB, хотя скорость падает вдвое по сравнению с bf16.

DPO вместо RLHF. Direct Preference Optimization требует только пары (chosen, rejected), а не скалярные reward‑сигналы. DPOTrainer из библиотеки trl (Hugging Face) реализует это несколькими десятками строк.

Типичная ошибка. Датасет из 500 примеров, 5 эпох, validation loss 0.8 — кажется норм. Но на тесте модель деградировала на общих инструкциях. Причина: catastrophic forgetting. Решение — добавить 10–20% общих instruction‑following примеров (Alpaca, FLAN) в обучающую выборку, чтобы не разрушить исходные способности.

Как выбрать базовую модель: 8B или 70B?

Модель Параметры Сильные стороны Контекст
Llama‑3.1 8B 8B Баланс качество/скорость 128k
Llama‑3.1 70B 70B Сложные рассуждения 128k
Mistral 7B / Mixtral 8x7B 7B / 47B Эффективность на размер 32k
Qwen2.5 72B 72B Код, мультиязычность 128k
Gemma 2 27B 27B Открытая лицензия 8k

Для большинства задач fine‑tuning 8B модели достаточно. 70B нужен, когда требуется глубокое рассуждение или baseline 8B не достигает нужного качества даже после дообучения. Стоимость инференса Llama‑3 8B через vLLM на A100 — около $0.001/1K токенов, что в 15 раз дешевле GPT‑4.

Что даёт PagedAttention в production?

vLLM — первый выбор для serving open‑source моделей. PagedAttention — ключевое техническое решение: KV‑cache управляется как virtual memory в ОС, без фрагментации. Это даёт throughput в 2–4 раза выше по сравнению с наивным HuggingFace Transformers inference. Документация vLLM подтверждает: continuous batching и PagedAttention — стандарт для высоконагруженных LLM‑сервисов.

Типичные числа на A100 80GB для Llama‑3 8B (bf16): 400–600 req/s, P50 latency 200–400ms, P99 latency 600–900ms при concurrency 64. Для 70B на двух A100 с tensor parallelism: 80–120 req/s, P99 latency 1.5–2.5s. Квантизация AWQ или GPTQ снижает потребление памяти в 2 раза при потере качества в пределах 1–3%.

Мультиагентные системы

Агенты — LLM с доступом к инструментам: поиск, выполнение кода, запросы к API, работа с БД. Основные паттерны:

  • ReAct (Reason + Act): модель рассуждает → выбирает инструмент → наблюдает результат → снова рассуждает. LangChain и LlamaIndex реализуют из коробки.
  • Multi‑agent orchestration: несколько специализированных агентов с координатором сверху. Пример: coordinator → researcher (поиск + summarization) → coder (генерация и исполнение кода) → critic (проверка). Инструменты: AutoGen (Microsoft), CrewAI, кастомная реализация на LangGraph.

В продакшене агентные системы недетерминированы. Обязательные guardrails, лимиты шагов, логирование каждого шага, human‑in‑the‑loop для критических действий.

Как мы работаем: этапы, сроки, результат

Этап Длительность Что получаете
Аудит и сбор данных 1–2 нед. Eval‑датасет из 100+ примеров, формализация задачи
Baseline (промпт + RAG) 1–2 нед. Рабочий прототип, метрики качества
Fine‑tuning (если нужно) 2–4 нед. Обученная модель, LoRA‑веса, model card
Деплой и мониторинг 1–2 нед. vLLM сервер, Grafana + Prometheus
Документация и обучение 1 нед. API‑документация, обучение команды

Что входит в работу

Мы передаём:

  • Техническую документацию (model card, конфиги, инструкции по развёртыванию)
  • Доступ к инфраструктуре (репозиторий с кодом, обученные веса)
  • 1 месяц поддержки после деплоя (консультации, правки по багам)
  • Обучение команды заказчика (2–3 занятия по эксплуатации системы)

Сроки: базовый RAG‑прототип — 1–2 недели. Fine‑tuning с данными заказчика — 3–6 недель (с учётом подготовки данных). Production‑система с мониторингом и переобучением — 2–4 месяца. Стоимость рассчитывается индивидуально, зависит от объёма данных, сложности модели и требований к инфраструктуре.

Хотите оценить свой проект? Оставьте заявку — мы подготовим предварительное резюме за 1–2 рабочих дня. Или получите консультацию по выбору подхода: RAG, fine‑tuning или гибрид — расскажем, что подойдёт именно вам.