AI-чат-бот психологической поддержки

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
AI-чат-бот психологической поддержки
Сложная
~2-4 недели
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

AI-чатбот психологической поддержки

AI-чатбот психологической поддержки — не замена психотерапевту. Это инструмент первичной поддержки для случаев, когда человеку нужно выговориться, получить структуру для анализа своего состояния или освоить базовые техники самопомощи — прямо сейчас, в 3 ночи, без ожидания записи.

Техническая и этическая ответственность здесь выше, чем в любом другом chatbot-проекте. Ошибка в поддержке выражений типа "мне лучше бы не быть" — не пользовательский неудобство, а потенциально опасная ситуация.

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

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)
        }

Техники поддержки: реализация КПТ-упражнений

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

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

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

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

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

Модерация и эскалация

class SupervisorAlert:
    async def notify(self, user_id: str, risk_level: str, last_messages: list):
        """Уведомляет живого модератора при высоком риске"""
        await self.notification_client.send({
            "channel": "crisis-alerts",
            "priority": "high",
            "user_id": user_id,
            "risk": risk_level,
            "context": last_messages[-3:],
            "action_required": "Проверь пользователя"
        })

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

Сроки: базовый бот с SafetyClassifier и горячими линиями: 2–3 недели; с КПТ-техниками, персонализацией и модерацией: 6–8 недель.