AI-чат-бот психологічної підтримки

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
AI-чат-бот психологічної підтримки
Складний
~2-4 тижні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

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 = """Я чую, що тобі зараз дуже тяжко. Це важливо.

Будь ласка, контактуй прямо зараз з телефоном довіри:
📞 **988** (US Suicide & Crisis Lifeline, 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УВАГА: У повідомленні користувача є ознаки підвищеного дистресу. Будь особливо уважним та деліkatним. В кінці повідомлення м'яко запропонуй звернутися до фахівця."

        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 тижнів.