Skip to content

sehyunnie/risk-aware-ai-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Risk-Aware AI Agent for Student Suicide Crisis Response (LangGraph)

A risk-aware conversational AI agent designed to detect suicide risk signals in student conversations and adapt its response strategy accordingly.

The system separates decision-making and response generation: a Python rule engine determines risk levels and conversation modes, while the LLM focuses on generating supportive responses.

학생의 정서적 대화 속에서 자살 위험 신호를 감지하고 대응 모드를 전환하는 AI Agent 시스템이다.
LangGraph 기반 상태 머신과 Python 룰 엔진을 결합해 위험도를 판단하고, LLM은 응답 생성 역할에 집중하도록 설계했다.

이 프로젝트의 핵심 목표는 LLM을 단순 대화 모델로 사용하는 것이 아니라, 정책 기반 의사결정 구조 안에서 안정적으로 동작하는 AI Agent를 구현하는 것이다.


Overview

This project explores how rule-based decision systems and LLM-based generation can be combined to build a safer AI agent for mental health conversations.

학생 상담 대화에서는 단순 질문-답변 방식의 챗봇으로는 충분하지 않다.
같은 문장이라도 이전 대화 맥락, 위험 신호의 누적, 사용자의 정서 상태에 따라 대응 방식이 달라져야 한다.

이 프로젝트는 이러한 문제를 해결하기 위해 다음과 같은 구조를 사용한다.

  • Python 기반 Rule Engine이 위험 신호를 1차 판단
  • 필요 시 **LLM 전처리(JSON 라벨링)**로 문맥 보조 분석
  • Python이 최종 위험도와 대응 모드 결정
  • 모드에 따라 LLM이 자연스러운 응답 생성
  • 필요 시 사용자 동의 기반 체크리스트 실행

LLM이 모든 판단을 담당하지 않도록 설계하여 예측 가능성과 안정성을 확보하는 것을 목표로 한다.


Core Features

1. Multi-Mode Response System

대화 상황에 따라 4개의 응답 모드를 사용한다.

Mode Description
FRIEND 저위험 상태에서 친구처럼 공감 중심 대화를 수행한다
COUNSELOR 중간 위험 상황에서 상담형 질문과 상황 탐색을 수행한다
CRISIS 고위험 상황에서 안정화와 안전 확보를 우선한다
BOUNDARY 욕설, 공격성, 정책 위반 상황에서 경계를 설정한다

2. Three-Level Risk Detection

위험도는 다음 3단계로 관리한다.

  • 낮음 (Low)
    일반적인 정서 스트레스

  • 중간 (Medium)
    반복 절망 표현, 완곡한 자살 언급

  • 높음 (High)
    직접적인 자살 의도, 계획, 수단 언급

위험도는 키워드 기반 탐지 + 상태 누적 + LLM 라벨링을 통해 판단한다.


3. Python Rule Engine

LLM의 판단 오류를 줄이기 위해 주요 의사결정은 Python이 수행한다.

예시 판단 요소

  • 자살 관련 키워드 탐지
  • 위험 신호 누적 횟수
  • 정서 고통 지속 여부
  • 최근 자살 사고 언급 유지
  • 질문 저항 패턴

이를 통해 LLM이 아닌 코드 기반 정책이 최종 위험도를 결정한다.


4. State-Based Conversation Control

대화 흐름을 안정적으로 관리하기 위해 다양한 상태 값을 유지한다.

주요 state 변수

  • mode
  • risk_level
  • distress_streak
  • risk_signal_count
  • recent_ideation_turns
  • checklist_status
  • question_resistance_turns

이 상태값을 기반으로 모드 전환과 대화 전략을 결정한다.


5. Checklist System

사용자가 충분히 상황을 공유했을 경우 동의 기반 체크리스트를 실행한다.

체크리스트는 다음 조건을 만족할 때 시작된다.

  • 사용자가 구체적인 상황을 공유했을 것
  • 위험 신호가 일정 수준 이상 누적될 것
  • 최소 1턴 이상의 대화 완충이 있을 것

이를 통해 갑작스러운 질문 공세를 방지하고 자연스러운 상담 흐름을 유지한다.


6. Crisis Resource Guidance

고위험 상황에서는 다음과 같은 지원 기관 안내가 가능하다.

  • 자살 예방 상담전화: 109
  • 생명의 전화: 1588-9191
  • 긴급 상황: 119 / 112

단, 과도한 반복 안내를 방지하기 위해 cooldown 로직을 사용한다.


Architecture

시스템은 LangGraph 기반 상태 머신 구조로 설계되어 있다.

The system follows a state-based AI agent architecture where
risk detection and decision making are handled by a Python rule engine,
while the LLM is responsible for response generation.

User Input
↓
Python Analyze Node
↓
LLM Preprocess (JSON Labeling)
↓
Python Final Decision Node
↓
Checklist Node (optional)
↓
Mode-specific LLM Response
↓
JSON Logging

또한 전체 흐름은 다음과 같은 AI Agent 구조로 동작한다.

flowchart TD

A[User Input] --> B[Preprocess / Intent Check]

B --> C[Python Rule Engine]

C --> D{Risk Level Decision}

D -->|Low| E[FRIEND Mode Prompt]
D -->|Medium| F[COUNSELOR Mode Prompt]
D -->|High| G[CRISIS Mode Prompt]
D -->|Policy Violation| H[BOUNDARY Mode]

E --> I[LLM Response Generation]
F --> I
G --> I
H --> I

I --> J[State Update]

J --> K[JSON Logging]
Loading

구조적으로 시스템은 두 개의 계층으로 나뉜다.

Decision Layer

  • 위험 신호 탐지
  • 상태 기반 위험도 판단
  • 대화 모드 결정
  • 정책 기반 경계(Boundary) 처리

Generation Layer

  • 모드별 프롬프트 실행
  • LLM 응답 생성
  • 사용자 친화적인 자연어 대화 생성

이 구조를 통해 판단(Decision)과 표현(Generation)을 분리한 안정적인 AI Agent 설계를 구현했다.


Example Output

실행 시 다음과 같은 JSON 로그가 생성된다.

{
  "timestamp": "2026-02-26 14:50:53",
  "answer": "없어지는 걸 생각하고 있구나. 그런 생각이 드는 이유가 있을까?",
  "mode": "COUNSELOR",
  "risk_level": "중간",
  "distress_state": "중간",
  "suicide_signal": "중간",
  "topic_category": "기타",
  "distress_streak": 1,
  "recent_ideation_turns": 5,
  "question_resistance_turns": 0
}

How to Run

1. Install dependencies

pip install langgraph langchain-openai

2. Set OpenAI API Key

Linux / Mac

export OPENAI_API_KEY=your_api_key

Windows PowerShell

$env:OPENAI_API_KEY="your_api_key"

3. Run

python main.py

Conversation Exit

다음 명령어로 대화를 종료할 수 있다.

/quit
/exit
/q

또는 다음과 같은 자연어 종료 표현도 감지한다.

  • 그만
  • 대화 종료
  • 이제 됐어
  • bye

Future Improvements

향후 다음과 같은 개선을 고려할 수 있다.

  • 키워드 기반 탐지를 intent classification 모델로 확장
  • 텍스트 정규화 및 은어 탐지 개선
  • RAG 기반 상담 가이드라인 연결
  • 위험도 threshold 자동 튜닝
  • rule engine / prompt / state manager 모듈 분리

Tech Stack

  • Python
  • LangGraph
  • LangChain
  • OpenAI API
  • JSON logging

Design Philosophy

이 프로젝트는 다음 원칙을 기반으로 설계되었다.

  • LLM은 판단자가 아니라 표현자다
  • 위험 판단은 코드 기반 정책(Rule Engine)이 담당한다
  • 위기 대응 시스템에서는 창의성보다 안정성과 예측 가능성이 중요하다
  • AI Agent는 상태 기반 시스템(State-based system) 으로 설계해야 한다
  • 안전이 중요한 영역에서는 결정(Decision)과 표현(Generation)을 분리해야 한다

About

State-based AI Agent for suicide risk detection and response using LangGraph and Python rule engine.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages