AI-система когнитивно-поведенческой терапии (КПТ)
КПТ хорошо поддаётся структуризации: её техники — это повторяемые протоколы с чёткой логикой. ABC-модель, дневник мыслей, экспозиция, поведенческая активация — всё это можно автоматизировать как интерактивные упражнения с AI-ведением. Не самостоятельная терапия, но расширение доступа к методам КПТ между сессиями с терапевтом.
Ключевые КПТ-модули в системе
Дневник автоматических мыслей — структурированный ABC (Activating event → Belief → Consequence), выявление когнитивных искажений, формулировка альтернативных мыслей.
Поведенческая активация — трекинг активностей с оценкой удовольствия/мастерства, планирование деятельности, отслеживание связи активности и настроения.
Экспозиционная иерархия — построение шкалы тревоги, пошаговая экспозиция с отслеживанием SUDS (Subjective Units of Distress Scale).
Mindfulness-упражнения — медитации с голосовым ведением, журнал настоящего момента.
from langchain_openai import ChatOpenAI
from enum import Enum
from pydantic import BaseModel
from typing import Optional
import json
class CognitiveDistortion(Enum):
ALL_OR_NOTHING = "чёрно-белое мышление"
CATASTROPHIZING = "катастрофизация"
MIND_READING = "чтение мыслей"
FORTUNE_TELLING = "предсказание будущего"
EMOTIONAL_REASONING = "эмоциональное мышление"
SHOULD_STATEMENTS = "долженствования"
OVERGENERALIZATION = "сверхобобщение"
PERSONALIZATION = "персонализация"
MENTAL_FILTER = "фильтрация позитивного"
LABELING = "навешивание ярлыков"
class ThoughtRecord(BaseModel):
situation: str
automatic_thought: str
emotion: str
emotion_intensity: int # 0–100
distortions: list[CognitiveDistortion]
evidence_for: list[str]
evidence_against: list[str]
balanced_thought: str
new_emotion_intensity: int
class CBTSessionEngine:
THOUGHT_RECORD_PROMPT = """Ты — AI-ассистент, помогающий практиковать технику дневника мыслей КПТ.
Веди пользователя через шаги методично, один шаг за раз.
Не переходи к следующему шагу, пока пользователь не ответил на текущий.
Задавай открытые вопросы. Не интерпретируй за пользователя.
Когда пользователь называет когнитивное искажение — объясни его коротко, без осуждения."""
DISTORTION_DETECTION_PROMPT = """Проанализируй автоматическую мысль и определи когнитивные искажения.
Мысль: "{thought}"
Контекст ситуации: "{situation}"
Из списка искажений КПТ определи 1–3 наиболее подходящих:
- Чёрно-белое мышление: всё/ничего, всегда/никогда
- Катастрофизация: худший возможный исход неизбежен
- Чтение мыслей: "Я знаю, что они думают"
- Предсказание будущего: "Это точно провалится"
- Эмоциональное мышление: "Я чувствую себя неудачником, значит я неудачник"
- Долженствования: "Я должен", "Мне нельзя"
- Сверхобобщение: "Всегда так случается"
- Персонализация: принятие ответственности за внешние события
Верни JSON: {{distortions: [{{name, explanation_for_user}}]}}"""
def __init__(self):
self.llm = ChatOpenAI(model="gpt-4o", temperature=0.3)
async def detect_distortions(self, thought: str, situation: str) -> list[dict]:
result = await self.llm.ainvoke(
self.DISTORTION_DETECTION_PROMPT.format(
thought=thought,
situation=situation
)
)
return json.loads(result.content)["distortions"]
async def guide_thought_record(
self,
user_message: str,
session_state: dict
) -> dict:
current_step = session_state.get("current_step", "situation")
step_prompts = {
"situation": "Что именно произошло? Опиши конкретную ситуацию — когда, где, что случилось.",
"thought": "Какая мысль промелькнула в голове в этот момент? Постарайся поймать именно первую автоматическую реакцию.",
"emotion": "Что ты почувствовал(а)? Назови эмоцию и оцени её интенсивность от 0 до 100.",
"evidence_for": "Какие факты подтверждают эту мысль? Только реальные факты, не чувства.",
"evidence_against": "Какие факты противоречат этой мысли?",
"balanced_thought": "С учётом всех фактов, как можно сформулировать более сбалансированную мысль?"
}
# Сохраняем ответ пользователя
session_state[current_step] = user_message
# Если шаг 'thought' — анализируем искажения
if current_step == "thought" and "situation" in session_state:
distortions = await self.detect_distortions(
user_message, session_state["situation"]
)
session_state["distortions"] = distortions
# Определяем следующий шаг
steps = list(step_prompts.keys())
current_idx = steps.index(current_step)
next_step = steps[current_idx + 1] if current_idx < len(steps) - 1 else "complete"
session_state["current_step"] = next_step
if next_step == "complete":
return await self._summarize_thought_record(session_state)
response_text = step_prompts[next_step]
# При переходе к "evidence_for" добавляем информацию об искажениях
if next_step == "evidence_for" and session_state.get("distortions"):
distortion_names = ", ".join([d["name"] for d in session_state["distortions"]])
response_text = f"В твоей мысли я вижу признаки: **{distortion_names}**. Но давай не будем торопиться с выводами.\n\n{response_text}"
return {"response": response_text, "step": next_step, "state": session_state}
Поведенческая активация: трекинг активностей
class BehavioralActivationTracker:
async def log_activity(
self,
activity: str,
pleasure_score: int, # 0–10
mastery_score: int, # 0–10
mood_before: int, # 0–10
mood_after: int # 0–10
) -> dict:
mood_change = mood_after - mood_before
insight = await self._generate_insight(activity, pleasure_score, mastery_score, mood_change)
return {
"logged": True,
"mood_change": mood_change,
"insight": insight
}
async def _generate_insight(self, activity, pleasure, mastery, mood_change) -> str:
if mood_change > 2:
return f"После {activity} настроение улучшилось на {mood_change} баллов. Это важный сигнал — такие активности стоит планировать чаще."
elif mood_change < -1:
return f"Активность {activity} снизила настроение. Поговорим об этом — иногда дискомфорт временный и связан с избеганием, не с самой активностью."
return "Активность зафиксирована. Продолжаем отслеживать паттерны."
Кейс: корпоративная программа поддержки ментального здоровья, 1200 сотрудников. AI-модуль КПТ использовался как самопомощь между встречами с корпоративным психологом. За 3 месяца: 340 уникальных пользователей, в среднем 4.2 сессии на пользователя. По опросу: 67% отметили снижение интенсивности тревожных мыслей, 71% — полезность дневника мыслей как инструмента.
Этические ограничения: система не работает с тяжёлой депрессией, суицидальными мыслями, психозами. Все эти случаи автоматически перенаправляются к специалисту.
Сроки: базовые КПТ-модули (дневник мыслей + поведенческая активация): 4–6 недель; полная платформа с трекингом и аналитикой прогресса: 10–14 недель.







