Skip to content

wanteddev/onboarding-chatbot

Repository files navigation

🤖 Wanted 온보딩 챗봇

원티드랩 신규 입사자의 3개월 온보딩 경험을 AI 챗봇과의 대화를 통해 수집하고 분석하는 시스템입니다. 자연스러운 대화형 인터페이스로 피드백을 받아 분석 리포트를 자동 생성하고 이메일로 발송합니다. 피플팀이 신입 사원의 온보딩 경험을 체계적으로 파악하고 개선점을 도출하는 데 활용됩니다.


📋 목차


📁 프로젝트 구조

chatbot-onboarding/
├── main.py                          # Streamlit 애플리케이션 진입점
├── pyproject.toml                   # Python 프로젝트 의존성 관리
├── Makefile                         # 프로젝트 실행 명령어 모음
├── .env                             # 환경변수 (API 키, 이메일 설정)
├── .env.example                     # 환경변수 예시 파일
│
├── src/
│   ├── app.py                       # 챗봇 핵심 로직 (OnboardingChatbot 클래스)
│   ├── config.py                    # 설정 파일 로더
│   ├── report_generator.py          # 분석 리포트 HTML 생성
│   ├── conversation_exporter.py     # 대화 내역 HTML 생성
│   ├── email_sender.py              # 리포트 생성 및 이메일 발송 오케스트레이션
│   │
│   ├── ui/
│   │   ├── intro_page.py            # 시작 페이지 (이름/이메일 입력)
│   │   └── chat_page.py             # 채팅 인터페이스 페이지
│   │
│   └── utils/
│       ├── email_service.py         # SMTP 이메일 발송 서비스
│       ├── emotion.py               # 감정 분석 (GPT-4 기반)
│       └── logger.py                # 로깅 설정
│
├── config/
│   ├── questions.json               # 설문 질문 정의 (11개 질문)
│   ├── llm_config.json              # LLM 모델 설정 (GPT-4o)
│   ├── system_prompt.md             # 챗봇 페르소나 및 대화 규칙
│   └── report_analysis_prompt.md    # 리포트 분석 프롬프트
│
├── data/
│   ├── reports/                     # 생성된 HTML 리포트 저장소
│   └── responses/                   # 사용자 응답 JSON 저장소
│
└── assets/
    └── images/                      # Wanted 로고 및 이미지

주요 파일 설명

파일 역할
src/app.py 챗봇 대화 흐름 관리, 질문 순서 제어, 응답 검증
src/report_generator.py GPT-4로 대화 분석 후 HTML 리포트 생성
src/email_sender.py 리포트/대화 HTML 생성 → 이메일 발송 통합 관리
src/utils/email_service.py Gmail SMTP를 통한 이메일 전송
config/system_prompt.md 챗봇의 성격, 대화 스타일, 질문 방식 정의
config/report_analysis_prompt.md 리포트 분석 기준 및 형식 정의

🛠 주요 라이브러리

핵심 의존성

라이브러리 버전 용도
langchain >=0.1.0 LLM 오케스트레이션 프레임워크
langchain-openai >=0.1.0 OpenAI GPT-4 통합 (ChatOpenAI 클래스)
streamlit >=1.28.0 웹 기반 대화형 UI 프레임워크
python-dotenv >=1.0.0 환경변수 관리 (.env 파일)
pydantic >=2.0.0 LangChain 내부 데이터 검증용 (의존성)
markdown >=3.5.0 마크다운 텍스트 처리

개발 도구

도구 용도
black 코드 자동 포맷팅
ruff 린팅 및 코드 스타일 검사

⚙️ 환경 설정

1. 필수 요구사항

  • Python 3.11 이상
  • UV 패키지 매니저 (권장)
  • OpenAI API 키 (GPT-4o 접근 권한)
  • Gmail 계정 (이메일 발송용)

2. UV 설치 (macOS/Linux)

curl -LsSf https://astral.sh/uv/install.sh | sh

3. 프로젝트 클론 및 의존성 설치

# 프로젝트 클론
git clone <repository-url>
cd chatbot-onboarding

# 의존성 설치
make install
# 또는
uv sync

4. 환경변수 설정

# .env.example을 복사하여 .env 파일 생성
cp .env.example .env

.env 파일 예시:

# OpenAI API Configuration
OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxx    # 실제 OpenAI API 키 입력
OPENAI_MODEL=gpt-4o

# Application Settings
DEBUG=false
LOG_LEVEL=INFO

# Email Configuration
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=true
EMAIL_SENDER=yourname@wantedlab.com     # 발송자 Gmail 주소
EMAIL_PASSWORD=abcd1234efgh5678         # Gmail 앱 비밀번호 (16자리)
EMAIL_RECIPIENTS=peopleteam@wantedlab.com,hr@wantedlab.com  # 수신자 (쉼표 구분)

🚀 실행 방법

기본 실행

make run
# 또는
uv run streamlit run main.py

개발 모드 실행 (디버그 로그 포함)

make dev
# 또는
uv run streamlit run main.py --logger.level=debug

기타 명령어

make help       # 사용 가능한 명령어 확인
make clean      # 캐시 및 임시 파일 정리
make lint       # 코드 스타일 검사
make format     # 코드 자동 포맷팅

🔧 사용자 설정 가이드

1. OpenAI API 키 설정

API 키 발급:

  1. OpenAI Platform 접속
  2. API Keys 메뉴에서 새 키 생성
  3. 생성된 키를 .env 파일의 OPENAI_API_KEY에 입력

주의사항:

  • API 키는 절대 코드에 하드코딩하지 않기
  • .env 파일은 .gitignore에 포함되어 있어 Git에 업로드되지 않음
  • GPT-4o 모델 접근 권한 필요

2. 챗봇 시스템 프롬프트 수정

파일 위치: config/system_prompt.md

챗봇의 성격, 대화 스타일, 질문 방식을 정의합니다.

수정 가능한 항목:

  • 챗봇 페르소나 (친근함, 전문성 수준)
  • 금지 행동 (개인정보 수집, 부적절한 주제)
  • 대화 규칙 (질문 순서, 재질문 조건)
  • 마무리 멘트

예시:

## 역할 (Role)
당신은 원티드랩 피플팀 소속의 친근하고 따뜻한 AI 챗봇입니다.
신규 입사자의 3개월 온보딩 경험에 대해 자연스럽게 대화하며 피드백을 수집합니다.
...

3. 리포트 분석 프롬프트 수정

파일 위치: config/report_analysis_prompt.md

GPT-4가 대화 내용을 분석하여 리포트를 생성할 때 사용하는 지침입니다.

수정 가능한 항목:

  • 분석 기준 (점수 부여 로직)
  • 리포트 섹션 구성
  • 평가 항목 (업무 적합도, 조직문화 적응도 등)
  • 마크다운 형식 규칙

예시:

## 중요 원칙
1. **의미 없는 답변**이 많은 경우 → 각 항목 **20-40점 범위**
2. **구체적 사례 없이 일반적 표현**만 사용한 경우 → **40-55점 범위**
3. **구체적 사례 1-2개 + 긍정적 태도****55-70점 범위**
...

4. 설문 질문 수정

파일 위치: config/questions.json

챗봇이 순서대로 질문할 내용을 정의합니다.

JSON 구조:

{
  "survey_questions": [
    {
      "id": 1,
      "question": "지난 3개월 간의 원티드 생활을 돌아봤을 때, 가장 먼저 떠오르는 단어나 표현을 자유롭게 말해 주세요."
    },
    {
      "id": 2,
      "question": "입사 후 3개월의 온보딩 기간동안 가장 기억에 남는 경험이나 에피소드를 들려주세요."
    },
    {
      "id": 11,
      "question": "전체적으로 피플팀 주관 온보딩 프로그램의 만족도를 알려주세요. (1~10점)",
      "scale": {
        "min": 1,
        "max": 10,
        "labels": ["매우 불만족", "불만족", "보통", "만족", "매우 만족"]
      }
    }
  ]
}

주의사항:

  • id는 1부터 순차적으로 증가
  • 점수 기반 질문에는 scale 객체 추가 가능 (min, max, labels)
  • 질문 개수 변경 시 src/app.pymeaningful_answers_count 로직도 확인 필요

🖥️ 서버 배포 (EC2)

SSH 접속

.pem 파일은 팀 내 공유 채널에서 수령 후 ~/.ssh/ 디렉토리에 보관하는 것을 권장합니다.

Mac / Linux

chmod 400 ~/.ssh/Wanted-Onboarding-Chatbot.pem
ssh -i ~/.ssh/Wanted-Onboarding-Chatbot.pem ubuntu@10.190.80.88

Windows (PowerShell)

# 권한 설정 (최초 1회)
icacls $env:USERPROFILE\.ssh\Wanted-Onboarding-Chatbot.pem /inheritance:r /grant:r "$($env:USERNAME):(R)"

ssh -i $env:USERPROFILE\.ssh\Wanted-Onboarding-Chatbot.pem ubuntu@10.190.80.88

Windows에서 OpenSSH가 없다면 설정 > 앱 > 선택적 기능에서 OpenSSH 클라이언트를 설치하세요.

코드 업데이트 및 의존성 동기화

cd onboarding-chatbot
git pull
uv sync

앱 재시작

# 기존 프로세스 종료
pkill -f streamlit

# 백그라운드 재실행
nohup streamlit run main.py --server.port 8501 > app.log 2>&1 &

# 실행 확인
ps aux | grep streamlit

로그 확인

# 실시간 전체 로그
tail -f logs/app_$(date +%Y%m%d).log

문의: daecheol.gong@wantedlab.com

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors