AI-система когнітивно-поведінкової терапії (КПТ)
КПТ хорошо піддається структуризації: її техніки — це повторювані протоколи з чіткою логікою. ABC-модель, дневник думок, експозиція, поведінкова активація — все це можна автоматизувати як інтерактивні вправи з AI-ведення. Не самостійна терапія, але розширення доступу до методів КПТ між сесіями з терапевтом.
Ключові КПТ-модулі в системі
Дневник автоматичних думок — структурований ABC (Активуюча подія → Переконання → Наслідок), виявлення когнітивних спотворень, формулювання альтернативних думок.
Поведінкова активація — трекінг активностей з оцінкою задоволення/мистецтва, планування діяльності, відстеження зв'язку активності та настрою.
Експозиційна ієрархія — побудова шкали тривоги, поступова експозиція з відстеженням 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 тижнів.







