AI를 학생으로 활용하여 자기주도 학습하는 교육 서비스
주관 : KT 소속 : KT 에이블스쿨 4기 수도권 1반 3조 프로젝트 기간 : 2023-12-11 ~ 2024-01-12
김영진 | 김진우 | 안진수 | 유승호 | 임형섭 | 정원철 |
---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
demo.mp4
-
웹 페이지
- 사용자 회원가입, 로그인 관리
- OAuth로 Github, Google, Naver, Kakao 계정 연동
- 게시판, 댓글 작성
- ckeditor로 편집 가능한 게시글 작성
- 내 게시글에 댓글 달림시 알람
- 사용자 일정 관리
-
동영상 강의
- 강의 등록
- 강의 당 여러편의 동영상 등록
- 강의 시청 및 평가
-
학생AI와 채팅
- 채팅방을 통해 학생 AI와 채팅
- 채팅을 통한 학생AI 학습 (벡터데이터베이스)
- 음성 입력으로 채팅 (STT)
- 학생AI의 응답을 음성화 (TTS)
-
평가
- 저장된 평가지에 맞춰 학생AI의 평가
- 문항 당 점수와 해설
- 전체 문항 점수를 고려한 등급 평가
- Django을 이용하여 웹어플리케이션 구현
- Django ORM을 이용하여 PostgreSQL 데이터베이스를 제어
- ASGI로 웹소켓 채팅
- Vue.js를 이용하여 인터렉티브한 SPA
- Prompt Engineering으로 LLM이 특정 작업을 수행하도록 지시하여 응답을 유도
- LangChain 프레임워크를 통해 템플릿, LLM과 벡터 데이터베이스의 파이프라인을 구축
- LLM으로 GPT, Gemini, LLaMA 또는 HuggingFace 등 다양한 모델의 API을 유연하게 전환 가능
- Ollama를 사용해 로컬에서 LLM 모델 실행도 가능
- Vector Database를 사용한 컨텍스트 관리로 LLM의 기억 저장소 역할 - Chroma, FAISS, Pinecone
- AWS에서 EC2와 S3를 사용하여 웹 호스팅
열기
Aplus-EDU
├─ .git
├─ .gitattributes
├─ .gitignore
├─ .gitmodules
├─ accounts
│ ├─ admin.py
│ ├─ apps.py
│ ├─ forms.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ signals.py
│ ├─ urls.py
│ ├─ urls_allauth.py
│ ├─ views.py
│ └─ __init__.py
├─ board
│ ├─ admin.py
│ ├─ apps.py
│ ├─ forms.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ signals.py
│ ├─ templatetags
│ │ └─ url_utils.py
│ ├─ urls.py
│ ├─ views.py
│ └─ __init__.py
├─ chat
│ ├─ admin.py
│ ├─ apps.py
│ ├─ asgi.py
│ ├─ forms.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ ├─ 0002_remove_message_bot_message_embedded_and_more.py
│ │ ├─ 0003_remove_message_user_remove_message_video_and_more.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ services
│ │ ├─ stt.py
│ │ └─ tts.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ websocket
│ │ ├─ consumers.py
│ │ └─ urls.py
│ └─ __init__.py
├─ config
│ ├─ asgi.py
│ ├─ asset_storage.py
│ ├─ message.py
│ ├─ settings.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ wsgi.py
│ └─ __init__.py
├─ core
│ └─ templatetags
│ ├─ form_tags.py
│ ├─ markdown_tags.py
│ └─ svg_tags.py
├─ dist
│ └─ student_ai-0.3.8-py3-none-any.whl
├─ evaluation
│ ├─ admin.py
│ ├─ apps.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ ├─ 0002_remove_testresult_testpaper_testresult_message.py
│ │ ├─ 0003_remove_testresult_message_testresult_testpaper_and_more.py
│ │ ├─ 0004_rename_scrore_testresult_score_and_more.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ urls.py
│ ├─ views.py
│ └─ __init__.py
├─ home
│ ├─ admin.py
│ ├─ apps.py
│ ├─ context.py
│ ├─ forms.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ urls.py
│ ├─ views.py
│ └─ __init__.py
├─ lecture
│ ├─ admin.py
│ ├─ apps.py
│ ├─ migrations
│ │ ├─ 0001_initial.py
│ │ ├─ 0002_alter_lecture_thumbnail_alter_video_file.py
│ │ └─ __init__.py
│ ├─ models.py
│ ├─ urls.py
│ └─ views.py
├─ manage.py
├─ README.md
├─ requirements.txt
├─ static
│ ├─ accounts
│ │ ├─ css
│ │ │ ├─ avatar.css
│ │ │ ├─ consent.css
│ │ │ ├─ signup.css
│ │ │ └─ social-btn.css
│ │ ├─ img
│ │ │ ├─ babyRobot.png
│ │ │ └─ Rei.jpg
│ │ ├─ js
│ │ │ ├─ enableAgree.js
│ │ │ └─ read-image.js
│ │ └─ md
│ │ ├─ personal_agreement.md
│ │ └─ terms_of_use.md
│ ├─ board
│ │ ├─ css
│ │ │ ├─ post_detail.css
│ │ │ └─ post_form.css
│ │ └─ js
│ │ ├─ popupDelete.js
│ │ └─ postsInjection.js
│ ├─ chat
│ │ ├─ css
│ │ │ ├─ app-chat.css
│ │ │ ├─ loading.css
│ │ │ └─ record-voice.css
│ │ ├─ img
│ │ │ ├─ gpt_logo.svg
│ │ │ └─ loading.svg
│ │ └─ js
│ │ ├─ chat.js
│ │ ├─ loading.js
│ │ └─ recordVoice.js
│ ├─ common
│ │ ├─ img
│ │ │ └─ system.png
│ │ └─ lifeQuotes.txt
│ ├─ evaluation
│ │ ├─ img
│ │ │ ├─ A.png
│ │ │ ├─ B.png
│ │ │ ├─ C.png
│ │ │ ├─ D.png
│ │ │ └─ F.png
│ │ └─ js
│ │ ├─ eachEvalsChartBuilder.js
│ │ ├─ historyChartBuilder.js
│ │ ├─ personalChartBuilder.js
│ │ └─ todayEvalsChartBuilder.js
│ ├─ frontdoor
│ │ ├─ css
│ │ │ ├─ avatar.css
│ │ │ ├─ background.css
│ │ │ ├─ footer.css
│ │ │ └─ happynewyear.css
│ │ ├─ img
│ │ │ ├─ babyRobot__1.png
│ │ │ ├─ babyRobot__2.png
│ │ │ ├─ babyRobot__3.png
│ │ │ ├─ babyRobot__4.png
│ │ │ ├─ babyRobot__5.png
│ │ │ ├─ banner (1).png
│ │ │ ├─ banner (2).png
│ │ │ ├─ banner (3).png
│ │ │ ├─ blank profile.png
│ │ │ ├─ EDU.png
│ │ │ ├─ Hyeongseop.png
│ │ │ ├─ Jinsoo.png
│ │ │ ├─ Jinwoo.png
│ │ │ ├─ logoText.png
│ │ │ ├─ profile.png
│ │ │ ├─ robot.gif
│ │ │ ├─ robot1.png
│ │ │ ├─ robot2.png
│ │ │ ├─ robot3.png
│ │ │ ├─ robot4.png
│ │ │ ├─ robot5.png
│ │ │ ├─ Seungho.png
│ │ │ ├─ Woncheol.png
│ │ │ └─ Yeongjin.png
│ │ └─ js
│ │ ├─ frontdoor.js
│ │ └─ happynewyear.js
│ ├─ home
│ │ ├─ css
│ │ │ ├─ faq.css
│ │ │ ├─ home.css
│ │ │ ├─ main.css
│ │ │ └─ snow.css
│ │ ├─ js
│ │ │ ├─ main.js
│ │ │ ├─ readComment.js
│ │ │ ├─ slidePhrase.js
│ │ │ └─ snow.js
│ │ └─ md
│ │ └─ faq.md
│ ├─ lecture
│ │ ├─ css
│ │ │ └─ modal.css
│ │ ├─ img
│ │ │ └─ converse_with_ai.png
│ │ └─ js
│ │ ├─ modal.js
│ │ └─ videoInjection.js
│ └─ vendor
│ ├─ css
│ │ ├─ bootstrap.css
│ │ ├─ sb-admin-2.min.css
│ │ └─ three-dots.css
│ ├─ js
│ │ ├─ bootstrap.js
│ │ └─ menu.js
│ └─ sneat-bootstrap
│ ├─ app-academy.css
│ ├─ app-calendar-events.js
│ ├─ app-calendar.css
│ ├─ app-calendar.js
│ ├─ config.js
│ ├─ core.css
│ ├─ helpers.js
│ └─ theme-default.css
├─ templates
│ ├─ account
│ │ ├─ avatar.html
│ │ ├─ consent.html
│ │ ├─ login.html
│ │ ├─ mypage.html
│ │ ├─ password_reset.html
│ │ ├─ signup.html
│ │ └─ socialbuttons.html
│ ├─ board
│ │ ├─ confirm_delete.html
│ │ ├─ post_detail.html
│ │ └─ post_form.html
│ ├─ chat
│ │ ├─ loading.html
│ │ └─ page.html
│ ├─ evaluation
│ │ ├─ page.html
│ │ └─ personal.html
│ ├─ frontdoor
│ │ ├─ base.html
│ │ ├─ happynewyear.html
│ │ ├─ index.html
│ │ ├─ introduction.html
│ │ └─ topbar.html
│ ├─ home
│ │ ├─ base.html
│ │ ├─ faq.html
│ │ ├─ layout.html
│ │ ├─ main.html
│ │ ├─ sidebar.html
│ │ └─ topbar.html
│ ├─ lecture
│ │ ├─ room.html
│ │ └─ showcase.html
│ └─ socialaccount
│ └─ signup.html
└─ _student-ai
- 요구 패키지 설치
pip install -r requirements.txt
- 환경 변수 입력 .env 파일을 루트 폴더 아래에 생성
ENVIRONMENT= # DEVELOPE (로컬) | PRODUCTION (AWS)
DJANGO_SECRET_KEY= # https://django-secret-key-generator.netlify.app 에서 발급
GITHUB_OAUTH_CLIENT_ID= # https://github.com/settings/developers 새 앱 만들고 Client ID
GITHUB_OAUTH_SECRET= # ...Client secrets
GOOGLE_OAUTH_CLIENT_ID= # https://console.cloud.google.com/apis/credentials 사용자 인증 정보 만들고 클라이언트 ID
GOOGLE_OAUTH_SECRET= # ...클라이언트 보안 비밀번호
NAVER_OAUTH_CLIENT_ID= # https://developers.naver.com/apps 애플리케이션 등록 - 네이버 로그인 API 등록하고 Client ID
NAVER_OAUTH_SECRET= # ...Client Secret
KAKAO_OAUTH_CLIENT_ID= # https://developers.kakao.com/console/app 애플리케이션 추가하기 - 앱 키 - REST API 키
KAKAO_OAUTH_SECRET # ...보안 - Client Secret
DB_MASTER_USER_ID= # 데이터베이스 유저 아이디
DB_MASTER_USER_PWD= # 데이터베이스 유저 비밀번호
DB_HOST= # (로컬) http://localhost | (AWS): https://console.aws.amazon.com/rds - Endpoint
AWS_ACCESS_KEY_ID= # https://aws.amazon.com/ko/iam - 엑세스 키 ID
AWS_SECRET_ACCESS_KEY= # ...비밀 엑세스 키
LLM_PROVIDER= # OPENAI | GOOGLE | HUGGINGFACEHUB | OLLAMA
EMBEDDING_PROVIDER= # OPENAI | GOOGLE | HUGGINGFACEHUB
VECTORSTORE_PROVIDER= # Chroma | FAISS | PINECONE
OPENAI_API_KEY= # https://platform.openai.com/settings/profile?tab=api-keys
GOOGLE_API_KEY= # https://aistudio.google.com/app/apikey
HUGGINGFACEHUB_API_TOKEN= # https://huggingface.co/settings/tokens
OPENAI_LLM_MODEL= # gpt-3.5-turbo | gpt-4 | gpt-4-turbo
GOOGLE_LLM_MODEL= # text-bison@001 | text-bison@002 | gemini-pro
HUGGINGFACEHUB_LLM_MODEL= # mistralai/Mistral-7B-Instruct-v0.2 | https://huggingface.co/models?other=LLM
OLLAMA_LLM_MODEL= # llama3 | phi3 | wizardlm2 | https://ollama.com/library
GOOGLE_EMBEDDING_MODEL= # models/embedding-001
HUGGINGFACEHUB_EMBEDDING_MODEL= # jhgan/ko-sroberta-nli | https://huggingface.co/models?other=embeddings
- 데이터베이스로 장고ORM 마이그레이션
python manage.py migrate
- 장고 서버 실행
python manage.py runserver
- 관리자 계정 생성
python manage.py createsuperuser