Community연구 & 데이터 분석github.com

Bin-H-17/research-mock-interview

지역 우선(local-first) 연구 면접 모의 시스템으로, 플러그인 가능한 LLM 백엔드를 지원합니다. (보험/박사 진학/논문答辩)

research-mock-interview란 무엇인가요?

이 스킬은 연구 분야 모의 면접을 위한 로컬 우선 시스템입니다. Hermes Skill 형태로 제공되며, 지원자의 실제 연구 자료(이력서/프로젝트/논문)를 읽고 보험(保研), 박사 진학(申博), 연구직 취업, 논문答辩(答辩), 그룹 미팅, 해외 PhD 등 다양한 시나리오에 대해 LLM 기반의 엄격한 면접관 역할을 수행합니다. 사용자의 답변이 프로젝트나 코드 설명 수준으로 얕을 경우 '하드 블로킹 추궁(hard-blocking follow-up)'을 발동시켜 깊이 있는 답변을 유도하며, 면접 종료 후 점수, 약점 분석, 회고 보고서를 제공합니다. 로컬 우선 설계로 모든 데이터는 로컬 SQLite에 저장되며, LLM 백엔드는 mock(오프라인 의존성 없음), ollama(로컬 기본), cloud(BYOK, 키는 환경 변수로만 전달)를 플러그인 방식으로 전환할 수 있습니다. 음성 지원은 v1.1에서 추가되어 mock(오프라인)부터 vosk/whisper(pyttsx3/edge-tts)까지 선택 가능하며, 모두 lazy loading으로 구현되어 필수 의존성이 없습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add Bin-H-17/research-mock-interview

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

연구 모의 면접 (Research Mock Interview) Hermes Skill

1. 이것은 무엇인가

로컬 우선 연구 시나리오 모의 면접 시스템으로, Hermes Skill 형태로 제공됩니다. 지원자의 실제 연구 자료(이력서/프로젝트/논문)를 읽고, 보험(保研), 박사 진학(申博), 연구직 취업, 논문答辩, 그룹 미팅, 해외 PhD 등 시나리오에 대해 플러그인 가능한 LLM 백엔드가 엄격한 면접관 역할을 수행하며 다중 대화형 모의 면접을 진행합니다. 지원자가 '프로젝트/코드' 설명을 얕게 할 경우 하드 블로킹 추궁을 발동시키고, 종료 후 점수 + 약점 라이브러리 + 회고 보고서를 생성합니다.

1.1 아키텍처 방안과의 일관성 (결정 사항)

  • X1 대상 사용자: 전체 방향 (보험/박사 진학 + 취업 경량판), v1 문제은행은 보험/박사 진학/취업/논문答辩/그룹 미팅/해외 PhD 여섯 가지 시나리오를 지원합니다.
  • X2 형태: 로컬 Hermes Skill + 공개 콘텐츠 유입 경로; 이 저장소가 Skill 본체입니다.
  • X3 음성: v1.1에서 '플러그인 가능한 음성 이중 통신' 구현 — mock 오프라인 의존성 없이 전체 체인 동작 확인; 실제 STT (vosk/whisper) + 실제 TTS (pyttsx3/edge-tts)는 선택적 백엔드로, 전부 lazy loading 처리되어 의존성 부재 시 명확한 에러 발생 (핵심 제로 의존성 유지).
  • X4 공개 계정 수집: 포기함, 이 Skill은 외부 콘텐츠 소스를 수집하지 않습니다.
  • X5 Python 버전: 대상 3.12, 최소 3.11 (자세한 사항은 requirements.txt와 §6 참조).
  • 플러그인 가능한 LLM 백엔드: 추상 인터페이스 + mock (오프라인 제로 의존성) / ollama (로컬 기본) / cloud (BYOK, 키는 영구 저장 안 함).
  • 콜드 스타트 자료: 예시 데이터 우선 제공 (data/sample_profile.json), 실제 자료는 cli run --profile로 가져오기 가능.
  • 프라이버시 철칙: 로컬 단일 테넌트, 삭제 가능, 원격 측정 없음, 데이터 출구 없음; tenant_id=local; purge로 소유자 전체 데이터 일괄 삭제.

2. 언제 실행하는가

  • 사용자가 연구 관련 면접(보험, 박사 진학, 연구직, 논문答辩, 그룹 미팅, 해외 PhD)을 연습/복기하고 싶을 때.
  • 사용자가 자신의 프로젝트 경험을 바탕으로 '명확하고 자세하게 설명하는' 압박 테스트를 원할 때.
  • 사용자가 구조화된 회고 보고서와 축적 가능한 약점 리스트를 필요로 할 때.

3. 워크플로우 (주관자/사용자 실행 순서)

1단계: 환경 준비 (일회성)

cd research-mock-interview
python --version            # 필요 >=3.11, 권장 3.12
pip install -r requirements.txt   # 선택 사항: config.yaml 사용 시에만 PyYAML 필요

2단계: 데모 실행 (인터넷 없이도 가능)

python src/cli.py run --demo

--demo는 내장 예제 자료 + mock 백엔드를 사용하여 '질문→답변→하드 블로킹 추궁→평가→회고 보고서' 전체 과정을 자동 실행, 시스템이 오프라인에서도 동작하고 데이터가 로컬 SQLite에 저장됨을 확인합니다.

3단계: 실제 자료 연결

실제 이력서/프로젝트를 JSON으로 정리한 후 (data/sample_profile.json 필드 참조):

python src/cli.py run --profile /path/to/your_profile.json --scenario 보험

대화형 모드로 진입, 라운드별 답변; /finish 입력으로 종료 및 보고서 생성, /quit은 중간 종료 (기록은 유지).

4단계: LLM 백엔드 전환 (선택 사항)

config.example.yaml을 config.yaml로 복사하고 llm.backend를 다음 중 선택:

  • mock: 오프라인 제로 의존성 (기본값, 데모/무인터넷에 적합).
  • ollama: 로컬 기본 프로덕션 백엔드, base_url/model 입력 (예: qwen2.5:7b).
  • cloud: 클라우드 API (BYOK), 키는 환경 변수(RMI_LLM_API_KEY)에서만 가져오며 절대 하드코딩/영구 저장 안 함.

5단계: 데이터 확인 및 삭제 권한

python src/cli.py list          # 현재 테넌트의 모든 면접 목록 출력
python src/cli.py report --id <session_id 앞 8자리 또는 전체>   # 회고 보고서 보기
python src/cli.py weakness      # 약점 라이브러리 보기
python src/cli.py purge --yes   # 소유자 삭제 권한: 현재 테넌트의 모든 로컬 데이터 삭제

6단계 (v1.1 추가): 음성 이중 통신 모드 (플러그인 가능)

# 오프라인 자가 진단: mock 이중 통신, 마이크/네트워크 필요 없음, 음성 오케스트레이션 체인 증명
python src/cli.py run --demo --voice

# 실제 음성 연결 (먼저 해당 선택적 의존성 설치 필요, requirements.txt 참조)
# config.example.yaml을 config.yaml로 복사, voice.enabled=true 설정 또는 실행 시 --voice 추가,
# voice.stt/tts의 backend를 vosk/whisper/pyttsx3/edge로 설정, 모델 경로 입력.

7단계 (v1.1 추가): 약점 라이브러리 교차 시나리오 집계 분석

python src/cli.py analyze                 # 전체 시나리오 집계
python src/cli.py analyze --scenario 보험   # 특정 시나리오만 보기
python src/cli.py analyze --out report.md  # Markdown 보고서로 출력

집계 차원: 분류 분포, 심각도 분포, 교차 시나리오 추세(개선/악화/유지), 반복 약점(≥2회) 및 행동 제안.

4. 모듈 책임 (src/)

  • llm_backend.py: LLMBackend 추상 + MockBackend/OllamaBackend/CloudBackend, from_config(cfg) 팩토리 메서드로 설정에 따라 전환.
  • storage.py: Store가 SQLite 로컬 지속성을 캡슐화, 테넌트 범위 격리, purge_owner()로 삭제 권한 완결.
  • interview_engine.py: InterviewSession이 '가져오기→질문→하드 블로킹 추궁→평가→약점 라이브러리→회고 보고서'를 구동.
  • voice_io.py (v1.1): STTProvider/TTSProvider/DuplexVoice 플러그인 가능 음성; mock 오프라인 제로 의존성, 실제 백엔드 lazy loading + 의존성 부재 가드.
  • analytics.py (v1.1): aggregate_weaknesses/render_aggregate_report 약점 교차 시나리오 집계 (순수 표준 라이브러리).
  • cli.py: argparse 진입점 (run/list/report/weakness/purge/analyze, run은 --voice 지원).

5. 설계 규율 (위반 불가)

  1. 데이터 출구 금지: 모든 데이터는 로컬 SQLite에만 저장; 클라우드 백엔드는 면접 텍스트만 사용자 설정 API로 전송, 키는 환경 변수로만 전달.
  2. 원격 측정 금지: 사용 행위를 수집하거나 보고하지 않음.
  3. 삭제 가능: data_dir 전체 삭제 가능; purge로 프로그래밍 방식 일괄 삭제 제공.
  4. 백엔드 플러그인 가능: 비즈니스 코드는 LLMBackend 추상에만 의존, 새 백엔드는 generate()만 구현하면 됨.
  5. 콜드 스타트 친화적: 예제 데이터로 설치 직후 실행 가능; 실제 자료는 --profile로 가져오며 형식 하위 호환성 유지.

6. 실행 환경

  • 대상 Python 3.12; 최소 3.11 (requirements.txt 주석 참조).
  • 핵심 의존성은 표준 라이브러리만; PyYAML은 선택 사항 (config.yaml 활성화 시에만 필요).
  • 음성은 선택적 강화 기능: 핵심은 여전히 제로 필수 타사 의존성; 실제 STT/TTS 의존성은 음성 활성화 및 실제 엔진 선택 시에만 필요 (requirements.txt 주석 참조).

관련 스킬