CBTΒ·νλνμ±ν κΈ°λ° κ°μ ν볡 μ§μ RAG μ±λ΄(API + μλΉμ€)
βλΉμ μ κ°μ μ μ΄ν΄νκ³ , λ€μ μ΄μκ° νμ μ£Όλ AI μΉκ΅¬β
π 2025 μμΉ ν΄μ»€ν€(SeSAC Hackathon) μΆνμ
π νλͺ : μΈκ³νμ₯
π ꡬμ±μ: μ μλ―Έ Β· μ΄μ¬ν Β· μ΄λνΈ Β· μ‘°μμ§ Β· κΉμ§μ΄
- *μΉκ΅¬μΌ(Chingoo-ya)**λ
μ°μΈκ°Β·κ³ 립κ°μ λλΌλ μ²λ λ€μ΄ μ€μ€λ‘ κ°μ μ μ΄ν΄νκ³ ν볡 νλμ μννλλ‘ λλ
CBT κΈ°λ° κ°μ ν볡 AI μ±λ΄μ΄λ€.
μλΉμ€λ λ€μ λ κ°μ§ ν΅μ¬ κ°μ (Evidence-Based Intervention)μ μ€μ¬μΌλ‘ ꡬμ±λλ€:
-
μ¬μ©μ κ³Όκ±° κ°μ Β·νλ κΈ°λ‘μ 벑ν°DB(pgvector)μμ κ²μ
-
βλΉμ·ν κ°μ μ λκΌλ μκ°βμ μ°Ύμ λΉκ΅
-
κ°μ ν¨ν΄μ μ¬ν΄μν μ μλλ‘ λμ
[μΈκ³νμ₯] μΉκ΅¬μΌ
-
μΉλ£ λ Όλ¬ΈΒ·μ¬λ¦¬ν λ§€λ΄μΌμ κΈ°λ°μΌλ‘
μ¬κ³ μ¬κ΅¬μ± / νλ νμ±ν / μκΈ°μλΉ νλ ¨ κ³Όμ λ₯Ό μΆμ²
[μΈκ³νμ₯] μΉκ΅¬μΌ
μ΄ λ κ°μ§ RAGλ₯Ό κΈ°λ°μΌλ‘
λ¨μ κ³΅κ° μ±λ΄μ λμ΄ μ€μ μ¬λ¦¬μΉλ£ μ리λ₯Ό μ μ©ν κ°μ ν μ±λ΄μ μ 곡νλ€.
-
κ³΅κ° (Emotional Reflection)
-
μ¬κ³ νμ (Cognitive Exploration)
-
κ°μ λͺ νν (Labeling)
-
νλ μ μ (Behavioral Suggestion)
-
μΈμ§ μ곑 μλ νμ§
(νλ°±λ Όλ¦¬, κ³ΌμΌλ°ν, κ°μΈν, νκ΅ν λ±)
[μΈκ³νμ₯] μΉκ΅¬μΌ
- μ±λ΄ λ΄μ CBT λ©λ΄μΌ κΈ°λ° λν μ λ
- λͺ¨λΈμ ν΅ν΄ λμ¨ κ°μ κΈ°λ°μΌλ‘ λ©λ΄μΌμ λ°λΌ κ³Όμ μΆμ²
- μ¬μ©μ κ°μΈ κ°μ κΈ°λ‘μμ μ μ¬ν κ²½ν κ²μ
- βκ·Έλ 무μμ νλμ§β λΉκ΅ β ν볡 μ λ΅ μλ΄
- κ°μ ν¨ν΄ μΈμ & μκ° μ¦μ§
- μΌ/μ£Ό/μ λ¨μ κ°μ κ·Έλν
- κ°μ λΉμ¨ νμ΄μ°¨νΈ
μ¬μ©μ μ
λ ₯(λν μ 체)
β
κ°μ λΆμ λͺ¨λΈ (BERT/RoBERTa)
β
μΈμ§ μ곑 νμ§
β
[RAG] κ³Όκ±° μΌκΈ° κ²μ (pgvector)
[RAG] CBT λ
Όλ¬Έ κΈ°λ° κ²μ
β
GPT-4.1μ΄ CBT λν μμ±
β
[RAG] νλ νμ±ν κ³Όμ μΆμ²
β
κ°μ μΌκΈ° μλ μ μ₯ β κ·Έλν μμ±
- FastAPI
- PostgreSQL + pgvector
- LangChain RAG Pipeline
- OpenAI GPT-4o-mini
- text-embedding-3-small
- κ°μ λΌλ²¨λ§ BERT λͺ¨λΈ
python -m venv venv
source venv/bin/activate # mac/Linux
# venv\Scripts\activate # Windows
pip install -r requirements.txt
cp .env.example .env
# OPENAI_API_KEY=your_api_key_here μ
λ ₯
data/ ν΄λμ PDF νμΌλ€μ λ£μΌλ©΄,
μ΄κΈ°ν μ μλ νμ΅(RAG λ²‘ν° μ€ν μ΄ μμ±)λλ€.
mkdir -p data
cp ~/Downloads/*.pdf data/
python run.py
λλ:
uvicorn app.main:app --reload
curl -X POST http://localhost:8000/api/chatbot/initialize
μμ μλ΅:
{
"success": true,
"message": "μ±λ΄ μ΄κΈ°ν μλ£! 2κ°μ PDF νμΌμ λ‘λνμ΅λλ€.",
"data": {
"document_count": 245,
"vector_db_path": "./chroma_db",
"loaded_files": ["support_guide.pdf", "program_info.pdf"]
}
}
curl http://localhost:8000/api/chatbot/status
curl -X POST http://localhost:8000/api/chatbot/chat \
-H "Content-Type: application/json" \
-d '{"question": "μ°μΈκ°μ ν΄μνκΈ° μν μ§μ νλ‘κ·Έλ¨μλ μ΄λ€ κ²λ€μ΄ μλμ?"}'
| κΈ°λ₯ | λ©μλ/URL | μ€λͺ |
|---|---|---|
| Health | GET /api/health |
μλ² μν νμΈ |
| μ΄κΈ°ν | POST /api/chatbot/initialize |
PDF λΆλ¬μ RAG DB μμ± |
| μνμ‘°ν | GET /api/chatbot/status |
벑ν°DB/λͺ¨λΈ μ΄κΈ°ν μ¬λΆ νμΈ |
| μ§λ¬Έ | POST /api/chatbot/chat |
RAG κΈ°λ° μλ΄ λ΅λ³ μμ± |
- Swagger: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
h-sw-h-back/
βββ app/
β βββ main.py
β βββ config.py
β βββ routers/
β β βββ health.py
β β βββ chatbot.py
β βββ services/
β β βββ vector_store.py
β βββ utils/
β β βββ pdf_loader.py
β βββ schemas/
β βββ chatbot.py
βββ data/
βββ chroma_db/
βββ .env
βββ .env.example
βββ requirements.txt
βββ run.py
βββ README.md
- PDF λ‘λ
- ν μ€νΈ μ²ν¬ λΆν (500μ / overlap 100μ)
- OpenAI μλ² λ© μμ±
- postgreDB μ μ₯
- μ§λ¬Έ β λ²‘ν° κ²μ (Top-k)
- GPT-4o-miniκ° CBT μ€νμΌ λ΅λ³ μμ±