Skip to content

zerojin91/learnmate-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

106 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

LearnAI - MCP 기반 κ°œμΈν™” ν•™μŠ΅ λ©˜ν†  μ‹œμŠ€ν…œ

ν”„λ‘œμ νŠΈ κ°œμš”

LearnAIλŠ” Model Control Protocol(MCP)을 ν™œμš©ν•˜μ—¬ μ‚¬μš©μžμ˜ 관심 μ£Όμ œμ— λ§žμΆ€ν˜• ν•™μŠ΅ μ»€λ¦¬ν˜λŸΌμ„ μ œκ³΅ν•˜κ³ , 일별 ν•™μŠ΅ κ³„νšμ„ κ΄€λ¦¬ν•˜λ©°, AI λ©˜ν†  역할을 μˆ˜ν–‰ν•˜λŠ” κ°œμΈν™” ν•™μŠ΅ 지원 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

μ„œλΉ„μŠ€ λͺ©ν‘œ

  • μ‚¬μš©μžλ³„ λ§žμΆ€ν˜• ν•™μŠ΅ 컀리큘럼 생성
  • 일별 ν•™μŠ΅ κ³„νš 및 진도 관리
  • μ‹€μ‹œκ°„ AI λ©˜ν† λ§ 및 ν•™μŠ΅ 상담
  • ν•™μŠ΅ 기둝 좔적 및 뢄석

ν˜„μž¬ 개발 ν˜„ν™©

μ™„λ£Œλœ κΈ°λŠ₯

  1. MCP Agent μ‹œμŠ€ν…œ

    • MCP μ„œλ²„μ™€ LangGraph μ—μ΄μ „νŠΈ 톡합
    • λͺ¨λ“ˆν™”λœ μ—μ΄μ „νŠΈ 관리 (agent.py)
    • 동적 μ„œλ²„ μ „ν™˜ κΈ°λŠ₯
  2. μ›Ή 기반 μ±„νŒ… μΈν„°νŽ˜μ΄μŠ€

    • FastAPI 기반 λ°±μ—”λ“œ API
    • HTML/CSS/JavaScript ν”„λ‘ νŠΈμ—”λ“œ
    • μ‹€μ‹œκ°„ μ±„νŒ… κΈ°λŠ₯
  3. κΈ°λ³Έ 인프라

    • 둜컬 및 λ„€νŠΈμ›Œν¬ μ ‘κ·Ό 지원
    • ν…œν”Œλ¦Ώ 기반 UI ꡬ쑰
    • λͺ¨λ“ˆν™”λœ μ½”λ“œ μ•„ν‚€ν…μ²˜

기술 μŠ€νƒ

Backend

  • FastAPI: μ›Ή ν”„λ ˆμž„μ›Œν¬ 및 API μ„œλ²„
  • Python 3.11: 메인 개발 μ–Έμ–΄
  • MCP (Model Control Protocol): AI μ—μ΄μ „νŠΈ 톡신
  • LangGraph: AI μ›Œν¬ν”Œλ‘œμš° 관리
  • LangChain: AI μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬

Frontend

  • HTML5/CSS3: κΈ°λ³Έ μ›Ή ꡬ쑰 및 μŠ€νƒ€μΌλ§
  • Vanilla JavaScript: ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ 둜직
  • Jinja2: μ„œλ²„μ‚¬μ΄λ“œ ν…œν”Œλ¦Ώ μ—”μ§„

AI/ML

  • Ollama: 둜컬 LLM μ‹€ν–‰ ν™˜κ²½
  • midm-2.0-base-q8: 메인 μ–Έμ–΄ λͺ¨λΈ
  • ChatOpenAI: OpenAI API ν˜Έν™˜ μΈν„°νŽ˜μ΄μŠ€

LearnAI ν•™μŠ΅ ν”Œλ‘œμš°

1단계: μ‚¬μš©μž 초기 평가 (user_assessment.py)

μ‚¬μš©μžκ°€ 처음 LearnAI에 μ ‘μ†ν•˜λ©΄ AI μ—μ΄μ „νŠΈμ™€μ˜ λŒ€ν™”λ₯Ό 톡해 λ‹€μŒ 정보λ₯Ό μˆ˜μ§‘ν•©λ‹ˆλ‹€:

  • ν•™μŠ΅ λͺ©ν‘œ: 무엇을 배우고 싢은지, μ™œ 배우렀고 ν•˜λŠ”μ§€
  • ν•™μŠ΅ μ œμ•½μ‘°κ±΄: μ‹œκ°„, μ˜ˆμ‚°, ν™˜κ²½μ  μ œμ•½
  • μ΅œμ’… λͺ©ν‘œ: ꡬ체적이고 μΈ‘μ • κ°€λŠ₯ν•œ ν•™μŠ΅ λͺ©ν‘œ μ„€μ •

2단계: λ§žμΆ€ν˜• 컀리큘럼 생성 (generate_curriculum.py)

1λ‹¨κ³„μ—μ„œ μˆ˜μ§‘λœ 정보λ₯Ό λ°”νƒ•μœΌλ‘œ κ°œμΈν™”λœ ν•™μŠ΅ λ‘œλ“œλ§΅μ„ μƒμ„±ν•©λ‹ˆλ‹€.

3단계: 일별 ν•™μŠ΅ 관리 및 λ©˜ν† λ§ (evaluate_user.py)

ν•™μŠ΅ μ§„ν–‰ 상황을 λͺ¨λ‹ˆν„°λ§ν•˜κ³  ν•„μš”μ— 따라 κ³„νšμ„ μ‘°μ •ν•©λ‹ˆλ‹€.

learnai/
β”œβ”€β”€ main.py              # FastAPI 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”œβ”€β”€ agent.py             # MCP μ—μ΄μ „νŠΈ λͺ¨λ“ˆ
β”œβ”€β”€ utils.py             # 개발/디버깅 μœ ν‹Έλ¦¬ν‹°
β”œβ”€β”€ templates/
β”‚   └── index.html       # 메인 μ±„νŒ… UI
β”œβ”€β”€ servers/             # MCP μ„œλ²„λ“€
β”‚   β”œβ”€β”€ user_assessment.py    # μ‚¬μš©μž 진단 μ„œλ²„ (ν˜„μž¬: 날씨 데λͺ¨)
β”‚   β”œβ”€β”€ generate_curriculum.py # 컀리큘럼 생성 μ„œλ²„ (개발 μ˜ˆμ •)
β”‚   └── evaluate_user.py      # μ‚¬μš©μž 평가 μ„œλ²„ (개발 μ˜ˆμ •)
└── agent.ipynb         # ν”„λ‘œν† νƒ€μ΄ν•‘ λ…ΈνŠΈλΆ

μ„€μΉ˜ 및 μ‹€ν–‰

1. μ˜μ‘΄μ„± μ„€μΉ˜

pip install fastapi uvicorn jinja2 python-multipart aiofiles
pip install langchain langchain-openai langgraph mcp langchain-mcp-adapters

2. Ollama μ„œλ²„ μ‹€ν–‰

ollama serve
ollama pull midm-2.0-base-q8  # λͺ¨λΈ λ‹€μš΄λ‘œλ“œ (ν•„μš”μ‹œ)

3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

python main.py

4. 접속

API μ—”λ“œν¬μΈνŠΈ

  • GET /: 메인 μ±„νŒ… UI
  • POST /chat: μ±„νŒ… λ©”μ‹œμ§€ 처리
  • GET /docs: API λ¬Έμ„œ (Swagger UI)

개발 μ˜ˆμ • κΈ°λŠ₯

Phase 1: λ°μ΄ν„°λ² μ΄μŠ€ 및 μ‚¬μš©μž 관리

  • PostgreSQL/SQLite λ°μ΄ν„°λ² μ΄μŠ€ 연동
  • μ‚¬μš©μž 인증 및 νšŒμ›κ°€μž… μ‹œμŠ€ν…œ
  • μ„Έμ…˜ 관리 및 λŒ€ν™” 기둝 μ €μž₯
  • μ‚¬μš©μž ν”„λ‘œν•„ 관리

Phase 2: ν•™μŠ΅ 컀리큘럼 μ‹œμŠ€ν…œ

  • μ‚¬μš©μž 진단 MCP μ„œλ²„ (user_assessment.py)
  • μ‚¬μš©μž ν•™μŠ΅ μˆ˜μ€€ 평가 MCP μ„œλ²„ (evaluate_user.py)
  • λ§žμΆ€ν˜• 컀리큘럼 생성 MCP μ„œλ²„ (generate_curriculum.py)
  • 일별 ν•™μŠ΅ κ³„νš 생성 및 관리
  • ν•™μŠ΅ 진도 좔적 μ‹œμŠ€ν…œ

Phase 3: UI/UX κ°œμ„ 

  • λ°˜μ‘ν˜• μ›Ή λ””μžμΈ
  • λŒ€μ‹œλ³΄λ“œ 및 ν•™μŠ΅ ν˜„ν™© μ‹œκ°ν™”
  • λͺ¨λ°”일 μΉœν™”μ  μΈν„°νŽ˜μ΄μŠ€
  • 닀크λͺ¨λ“œ 지원

Phase 4: κ³ κΈ‰ κΈ°λŠ₯

  • μ‹€μ‹œκ°„ μ•Œλ¦Ό μ‹œμŠ€ν…œ
  • ν•™μŠ΅ 뢄석 및 리포트
  • μ†Œμ…œ ν•™μŠ΅ κΈ°λŠ₯ (μŠ€ν„°λ”” κ·Έλ£Ή)
  • μ™ΈλΆ€ ν•™μŠ΅ 자료 연동

Phase 5: 배포 및 운영

  • Docker μ»¨ν…Œμ΄λ„ˆν™”
  • ν΄λΌμš°λ“œ 배포 (AWS/GCP/Heroku)
  • CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕
  • λͺ¨λ‹ˆν„°λ§ 및 λ‘œκΉ… μ‹œμŠ€ν…œ
  • μ„±λŠ₯ μ΅œμ ν™” 및 μŠ€μΌ€μΌλ§

μ•„ν‚€ν…μ²˜ νŠΉμ§•

λͺ¨λ“ˆν™”λœ 섀계

  • MCP μ„œλ²„λ³„ 독립적인 κΈ°λŠ₯ κ΅¬ν˜„
  • μ—μ΄μ „νŠΈμ™€ μ›Ή μ„œλ²„μ˜ λͺ…ν™•ν•œ 뢄리
  • μž¬μ‚¬μš© κ°€λŠ₯ν•œ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜

ν™•μž₯ κ°€λŠ₯ν•œ ꡬ쑰

  • μƒˆλ‘œμš΄ MCP μ„œλ²„ μΆ”κ°€ 용이
  • μ„œλ²„ νƒ€μž…λ³„ 동적 μ „ν™˜ 지원
  • ν”ŒλŸ¬κ·ΈμΈ λ°©μ‹μ˜ κΈ°λŠ₯ ν™•μž₯

개발 μΉœν™”μ  ν™˜κ²½

  • ν•« λ¦¬λ‘œλ“œ 지원 (개발 λͺ¨λ“œ)
  • API λ¬Έμ„œ μžλ™ 생성
  • ν”„λ‘œν† νƒ€μ΄ν•‘μ„ μœ„ν•œ Jupyter λ…ΈνŠΈλΆ 지원

κΈ°μ—¬ 방법

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

λΌμ΄μ„ μŠ€

MIT License

λ¬Έμ˜μ‚¬ν•­

ν”„λ‘œμ νŠΈ κ΄€λ ¨ λ¬Έμ˜μ‚¬ν•­μ΄λ‚˜ 버그 λ¦¬ν¬νŠΈλŠ” 이슈 트래컀λ₯Ό μ΄μš©ν•΄ μ£Όμ„Έμš”.


ν˜„μž¬ μ‹œμŠ€ν…œ ꡬ성 및 흐름 (2025.09 κΈ°μ€€)

전체 μ•„ν‚€ν…μ²˜ ꡬ쑰

LearnAI System Architecture
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Web Interface (index.html)               β”‚
β”‚  μ‚¬μš©μžκ°€ μ±„νŒ… UIλ₯Ό 톡해 λ©”μ‹œμ§€ μž…λ ₯                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ POST /chat
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                FastAPI Server (main.py)                    β”‚
β”‚  β€’ μ›Ή μ„œλ²„ μ—­ν•                                               β”‚
β”‚  β€’ μ±„νŒ… API μ—”λ“œν¬μΈνŠΈ 제곡                                    β”‚
β”‚  β€’ ν…œν”Œλ¦Ώ λ Œλ”λ§                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ MultiMCPAgent.chat()
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               Multi-Agent System (agent.py)                β”‚
β”‚  β€’ μ—¬λŸ¬ MCP μ„œλ²„λ₯Ό λ™μ‹œ 관리                                  β”‚
β”‚  β€’ ν•™μŠ΅ μ˜λ„ 감지 및 λΌμš°νŒ…                                    β”‚
β”‚  β€’ μ„Έμ…˜ μƒνƒœ 관리                                            β”‚
β”‚  β€’ Assessment vs General λŒ€ν™” λΆ„κΈ°                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚                 β”‚
        Assessment Mode      General Mode
                 β”‚                 β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚   User Assessment MCP Server    β”‚ β”‚
β”‚   (user_assessment.py)          β”‚ β”‚
β”‚                                 β”‚ β”‚
β”‚  β€’ Stateful μ„Έμ…˜ 관리           β”‚ β”‚
β”‚  β€’ LangGraph Multi-Agent        β”‚ β”‚
β”‚  β€’ 파일 기반 영ꡬ μ €μž₯           β”‚ β”‚
β”‚                                 β”‚ β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚
β”‚  β”‚    LangGraph Workflow       β”‚ β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  Extraction Agent       β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  β€’ 정보 μΆ”μΆœ (엄격)     β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  β€’ UserInfoSchema ν™œμš©  β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚
β”‚  β”‚            β”‚                 β”‚ β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  Response Agent          β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  β€’ μ™„λ£Œλ„ 체크           β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  β€’ 질문 생성 or μ™„λ£Œ     β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β”‚  β€’ UI 정리 처리          β”‚β”‚ β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
                                   β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚          General Conversation                       β”‚
        β”‚  β€’ LangChain ReAct Agent                           β”‚
        β”‚  β€’ 일반 λ©˜ν† λ§ λŒ€ν™”                                   β”‚
        β”‚  β€’ λ‹€λ₯Έ MCP 도ꡬ듀 ν™œμš©                              β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ„Έμ…˜ 관리 μ‹œμŠ€ν…œ

Session Management Flow
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Session Storage                         β”‚
β”‚                    sessions/ 폴더                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚
β”‚  β”‚ abc123.json β”‚  β”‚ def456.json β”‚  β”‚ xyz789.json β”‚  ...     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚
β”‚                                                             β”‚
β”‚  각 파일 ꡬ쑰:                                                β”‚
β”‚  {                                                          β”‚
β”‚    "messages": [...],    # λŒ€ν™” 기둝                        β”‚
β”‚    "topic": "파이썬",     # μΆ”μΆœλœ ν•™μŠ΅ 주제                  β”‚
β”‚    "constraints": "초보자, μ£Ό 2μ‹œκ°„",  # μ œμ•½ 쑰건           β”‚
β”‚    "goal": "μ›Ή 개발",     # ꡬ체적 λͺ©ν‘œ                      β”‚
β”‚    "session_id": "abc123",                                  β”‚
β”‚    "completed": false,   # 평가 μ™„λ£Œ μ—¬λΆ€                    β”‚
β”‚    "current_agent": "response"                              β”‚
β”‚  }                                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ‚¬μš©μž 평가 흐름 (Assessment Flow)

User Assessment Workflow
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  μ‚¬μš©μž μž…λ ₯: "λ‚˜ 파이썬 배우고 μ‹Άμ–΄"                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 1: ν•™μŠ΅ μ˜λ„ 감지 (_should_use_assessment_tool)            β”‚
β”‚  β€’ ν‚€μ›Œλ“œ λ§€μΉ­: "배우고 μ‹Άμ–΄", "κ³΅λΆ€ν•˜κ³  μ‹Άμ–΄", "ν•™μŠ΅" λ“±          β”‚
β”‚  β€’ assessment_in_progress μƒνƒœ 체크                             β”‚
β”‚  β†’ Assessment Flow μ§„μž…                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 2: μ„Έμ…˜ 관리                                               β”‚
β”‚  β€’ κΈ°μ‘΄ μ„Έμ…˜ 볡원 λ˜λŠ” μƒˆ μ„Έμ…˜ 생성                               β”‚
β”‚  β€’ sessions/μ„Έμ…˜ID.json νŒŒμΌμ—μ„œ λ‘œλ“œ                           β”‚
β”‚  β€’ λŒ€ν™” 기둝에 μ‚¬μš©μž λ©”μ‹œμ§€ μΆ”κ°€                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 3: LangGraph Workflow μ‹€ν–‰                               β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Extraction Agent                                          β”‚ β”‚
β”‚  β”‚  β€’ μ—„κ²©ν•œ 정보 μΆ”μΆœ (λͺ…μ‹œμ  μ–ΈκΈ‰λ§Œ)                          β”‚ β”‚
β”‚  β”‚  β€’ "파이썬 배우고 μ‹Άμ–΄" β†’ topic: "파이썬"                   β”‚ β”‚
β”‚  β”‚  β€’ constraints: "", goal: "" (빈 κ°’ μœ μ§€)                  β”‚ β”‚
β”‚  β”‚  β€’ UserInfoSchema둜 ꡬ쑰화                                 β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                   β”‚                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Response Agent                                             β”‚ β”‚
β”‚  β”‚  β€’ μ™„λ£Œλ„ 체크: topic βœ“, constraints βœ—, goal βœ—             β”‚ β”‚
β”‚  β”‚  β€’ λ―Έμ™„λ£Œ β†’ λ‹€μŒ 질문 생성                                   β”‚ β”‚
β”‚  β”‚  β€’ "파이썬 ν•™μŠ΅ 쑰건을 μ•Œλ €μ£Όμ„Έμš”!" 생성                      β”‚ β”‚
β”‚  β”‚  β€’ λ§ˆν¬λ‹€μš΄ 제거, μ„Έμ…˜ 정보 μˆ¨κΉ€                              β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 4: 응닡 처리                                               β”‚
β”‚  β€’ μ„Έμ…˜ 데이터λ₯Ό sessions/μ„Έμ…˜ID.json에 μ €μž₯                    β”‚
β”‚  β€’ UI용 응닡 정리 (_clean_response_for_ui)                      β”‚
β”‚  β€’ μ‚¬μš©μžμ—κ²Œ λ‹€μŒ 질문 λ°˜ν™˜                                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

정보 μΆ”μΆœ 둜직 (μ—„κ²©ν•œ μΆ”μΆœ)

Information Extraction Rules
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  μž…λ ₯: "λ‚˜ 파이썬 κ³΅λΆ€ν•˜κ³  μ‹Άμ–΄"                                   β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Extraction Prompt (맀우 μ—„κ²©ν•œ κΈ°μ€€)                        β”‚ β”‚
β”‚  β”‚  β€’ μ‚¬μš©μžκ°€ 직접 λ§ν•œ λ‹¨μ–΄λ§Œ μΆ”μΆœ                             β”‚ β”‚
β”‚  β”‚  β€’ μ ˆλŒ€ μΆ”λ‘ , μœ μΆ”, 해석 κΈˆμ§€                                 β”‚ β”‚
β”‚  β”‚  β€’ μ—†μœΌλ©΄ 빈 λ¬Έμžμ—΄λ‘œ μœ μ§€                                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                           β”‚                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  UserInfoSchema ꡬ쑰화 좜λ ₯                                  β”‚ β”‚
β”‚  β”‚  topic: "파이썬"        ← λͺ…μ‹œμ μœΌλ‘œ 언급됨                   β”‚ β”‚
β”‚  β”‚  constraints: ""        ← μ–ΈκΈ‰λ˜μ§€ μ•ŠμŒ                      β”‚ β”‚
β”‚  β”‚  goal: ""               ← μ–ΈκΈ‰λ˜μ§€ μ•ŠμŒ                      β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                 β”‚
β”‚  잘λͺ»λœ μΆ”μΆœ μ˜ˆμ‹œ (ν•˜μ§€ μ•ŠμŒ):                                    β”‚
β”‚  topic: "파이썬 ν•™μŠ΅" ❌                                         β”‚
β”‚  constraints: "μ‹œκ°„ 정보 ν•„μš”" ❌                                β”‚
β”‚  goal: "ν”„λ‘œκ·Έλž˜λ°" ❌                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

질문 생성 둜직

Question Generation Logic
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Current Profile State:                                         β”‚
β”‚  topic: "파이썬", constraints: "", goal: ""                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
            β”‚  _generate_next_question  β”‚
            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚  Missing Information Check      β”‚
        β””β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚             β”‚
    topic μ—†μŒ      constraints μ—†μŒ
         β”‚             β”‚
  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚  "μ–΄λ–€ λΆ„μ•Όλ₯Όβ”‚ β”‚ "파이썬 ν•™μŠ΅ 쑰건을        β”‚
  β”‚  ν•™μŠ΅ν•˜κ³     β”‚ β”‚  μ•Œλ €μ£Όμ„Έμš”!"             β”‚
  β”‚  μ‹ΆμœΌμ‹ κ°€μš”?"β”‚ β”‚ β€’ ν˜„μž¬ μˆ˜μ€€               β”‚
  β”‚             β”‚ β”‚ β€’ μ‹œκ°„ 투자              β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  goal μ—†μŒ                β”‚
                    β”‚  "파이썬 ν•™μŠ΅ λͺ©ν‘œλ₯Ό       β”‚
                    β”‚   μ•Œλ €μ£Όμ„Έμš”!"            β”‚
                    β”‚  β€’ μ·¨μ—…/이직              β”‚
                    β”‚  β€’ 업무 ν™œμš©              β”‚
                    β”‚  β€’ 개인 ν”„λ‘œμ νŠΈ          β”‚
                    β”‚  β€’ μ·¨λ―Έ/μžκΈ°κ³„λ°œ          β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

UI 응닡 정리 κ³Όμ •

UI Response Cleaning Process
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Raw Response:                                                  β”‚
β”‚  πŸš€ **파이썬 ν•™μŠ΅ λͺ©ν‘œλ₯Ό μ•Œλ €μ£Όμ„Έμš”!**                           β”‚
β”‚                                                                 β”‚
β”‚  **μ–΄λ–€ λͺ©μ μœΌλ‘œ νŒŒμ΄μ¬μ„(λ₯Ό) λ°°μš°μ‹œλ‚˜μš”?**                      β”‚
β”‚  - μ·¨μ—…μ΄λ‚˜ 이직을 μœ„ν•΄μ„œ                                        β”‚
β”‚  - ν˜„μž¬ 업무에 ν™œμš©ν•˜λ €κ³                                         β”‚
β”‚                                                                 β”‚
β”‚  _Session: abc123 | Status: In Progress_                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”‚ _clean_response_for_ui()
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Cleaned Response:                                              β”‚
β”‚  πŸš€ 파이썬 ν•™μŠ΅ λͺ©ν‘œλ₯Ό μ•Œλ €μ£Όμ„Έμš”!                               β”‚
β”‚                                                                 β”‚
β”‚  μ–΄λ–€ λͺ©μ μœΌλ‘œ νŒŒμ΄μ¬μ„(λ₯Ό) λ°°μš°μ‹œλ‚˜μš”?                          β”‚
β”‚  β€’ μ·¨μ—…μ΄λ‚˜ 이직을 μœ„ν•΄μ„œ                                        β”‚
β”‚  β€’ ν˜„μž¬ 업무에 ν™œμš©ν•˜λ €κ³                                         β”‚
β”‚                                                                 β”‚
β”‚  ꡬ체적인 λͺ©ν‘œλ₯Ό μ•Œλ©΄ 더 λ§žμΆ€ν˜• λ‘œλ“œλ§΅μ„ μ œμ‹œν•  수 μžˆμ–΄μš”!        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β”œβ”€ ** λ§ˆν¬λ‹€μš΄ ꡡ은글씨 제거
β”œβ”€ - 리슀트λ₯Ό β€’ 뢈릿으둜 λ³€κ²½
β”œβ”€ μ„Έμ…˜ 정보 μ™„μ „ 제거
└─ μ—¬λŸ¬ μ€„λ°”κΏˆ 정리

μ™„λ£Œ μƒνƒœ νŒλ‹¨ 둜직

Completion Status Check
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  _should_continue() ν•¨μˆ˜                                        β”‚
β”‚                                                                 β”‚
β”‚  topic_complete = bool(state.get("topic"))      ← True         β”‚
β”‚  constraints_complete = bool(state.get("constraints")) ← False β”‚
β”‚  goal_complete = bool(state.get("goal"))        ← False        β”‚
β”‚                                                                 β”‚
β”‚  if all three are True:                                        β”‚
β”‚    return "complete" β†’ μ™„λ£Œ λ©”μ‹œμ§€ 생성                         β”‚
β”‚  else:                                                          β”‚
β”‚    return "continue" β†’ λ‹€μŒ 질문 생성                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ‹€μ œ μ‚¬μš© 흐름 μ˜ˆμ‹œ

μ‹€μ œ λŒ€ν™” 흐름
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  User: "λ‚˜ 파이썬 κ³΅λΆ€ν•˜κ³  μ‹Άμ–΄"                                 β”‚
β”‚  β†’ Assessment: topic="파이썬", constraints="", goal=""         β”‚
β”‚  β†’ AI: "파이썬 ν•™μŠ΅ 쑰건을 μ•Œλ €μ£Όμ„Έμš”! ν˜„μž¬ μˆ˜μ€€κ³Ό μ‹œκ°„..."       β”‚
β”‚                                                                 β”‚
β”‚  User: "μ™„μ „ 초보자고 μ£Ό 2μ‹œκ°„ κ°€λŠ₯ν•΄"                           β”‚
β”‚  β†’ Assessment: topic="파이썬", constraints="μ™„μ „ 초보자, μ£Ό 2μ‹œκ°„", goal="" β”‚
β”‚  β†’ AI: "파이썬 ν•™μŠ΅ λͺ©ν‘œλ₯Ό μ•Œλ €μ£Όμ„Έμš”! μ·¨μ—…, μ—…λ¬΄ν™œμš©..."        β”‚
β”‚                                                                 β”‚
β”‚  User: "μ·¨μ—… μ€€λΉ„ν•˜λ €κ³ "                                         β”‚
β”‚  β†’ Assessment: topic="파이썬", constraints="μ™„μ „ 초보자, μ£Ό 2μ‹œκ°„", goal="μ·¨μ—…" β”‚
β”‚  β†’ AI: "🎯 ν•™μŠ΅ ν”„λ‘œν•„ 뢄석 μ™„λ£Œ! [μ™„λ£Œ λ©”μ‹œμ§€]"                 β”‚
β”‚                                                                 β”‚
β”‚  β†’ assessment_in_progress = False μ „ν™˜                         β”‚
β”‚  β†’ 이후 일반 λ©˜ν† λ§ λͺ¨λ“œλ‘œ μ „ν™˜                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

이 ꡬ쑰λ₯Ό 톡해 Stateful Multi-Agent Assessment System이 μ‚¬μš©μžμ˜ ν•™μŠ΅ ν”„λ‘œν•„μ„ λ‹¨κ³„μ μœΌλ‘œ μˆ˜μ§‘ν•˜κ³ , μ™„λ£Œ ν›„μ—λŠ” 일반 λ©˜ν† λ§ λͺ¨λ“œλ‘œ μžμ—°μŠ€λŸ½κ²Œ μ „ν™˜λ©λ‹ˆλ‹€.

About

Personalized Learning Agent offering conversational guidance and tailored study paths.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors