Skip to content

khmo31/job_wiki

Repository files navigation

Job Wiki — 채용공고 자동 수집 · Wiki 변환 · 매칭

공공기관 채용공고를 ALIO API로 자동 수집하고, 원문 태그를 바탕으로 Facet Wiki로 구조화하며, 사용자 프로필과 단계형 분류 선택을 거쳐 최종 매칭하는 파이프라인입니다.

job_career 매칭 엔진은 단일 LLM으로 핵심 의도 키워드를 추출한 뒤, 나머지 후보 수집·가중치 계산·정렬·최종 추천은 전부 Python 코드로 처리합니다. 현재 구조에서는 crewai가 필요하지 않습니다.

디렉토리 구조

job_wiki/
├── job_raw/                    # Step 1: 수집 + 원문 저장
│   ├── scripts/
│   │   ├── main.py             #   배치 실행기
│   │   └── harvester.py        #   수집 → 저장
│   ├── fetcher.py              #   ALIO API 호출
│   ├── formatter.py            #   마크다운 렌더링
│   ├── writer.py               #   파일 저장 + 인덱싱
│   ├── utils.py                #   유틸리티 (파일명 생성, ID 추출)
│   ├── 00_Raw/                 #   단일 진실 공급원
│   │   ├── index.json          #   ALIO ID → 파일명 매핑
│   │   ├── json_archive/       #   원본 JSON 아카이브
│   │   └── *.md                #   마크다운 채용공고
│   └── docs/README.md          #   상세 기술 문서
│
├── job_wiki/                   # Obsidian 지식 그래프 (최종 Wiki 출력물)
│   ├── 00_Raw → ../job_raw/00_Raw/  # 심볼릭 링크
│   ├── 10_Wiki/
│   │   └── Facets/             # 2차 분류 허브
│   ├── 20_Meta/
│   │   └── Facet_Index.json    # facet 색인
│   └── .obsidian/              # Obsidian 설정
│
├── job_career/                 # UI / 매칭 엔진
│   ├── server.py               # 웹 서버
│   ├── frontend/               # HTML/JS/CSS 대시보드
│   └── src/career_agent/
│       ├── pipeline.py         # 단계형 매칭 파이프라인
│       ├── llm_client.py       # LLM 키워드 추출 클라이언트
│       ├── main_batch.py       # 배치 실행
│       └── tools/
│           └── custom_tool.py  # Wiki/raw 조회 도구
│
└── .github/workflows/
    └── harvest.yml             # CI/CD: 주간 자동 수집 + 정리 + Wiki 변환

현재 데이터 현황 (2026-05-19 기준)

항목 상태
수집된 공고
JSON 아카이브
00_Raw 마크다운
Facet Wiki
Facet_Index
CI/CD workflow ✅ 매주 월 09:00 KST

3단계 파이프라인

Step 1: 수집 (Harvester)

  • fetcher.py가 ALIO 공공데이터 API에서 채용공고 목록 수집
  • 원문 필드(ncsCdNmLst, hireTypeNmLst, recrutSeNm, acbgCondNmLst, workRgnNmLst, aplyQlfcCn, prefCondCn, prefCn, scrnprcdrMthdExpln)를 그대로 보존
  • 결과: 00_Raw/{날짜}_{ID}_{회사}_{제목}.md + json_archive/에 원본 저장

Step 2: Wiki 변환 (wiki_generator.py)

  • 00_Raw/index.jsonjson_archive/를 읽어 10_Wiki/Facets/에 2차 분류 허브 생성
  • Facet_Index.json 업데이트

Step 3: 매칭 (job_career/pipeline.py)

  • 1단계: LLM이 core_keywords, support_keywords, follow_up_keywords를 분리해 추출
  • 2단계: core 6배, support 3배, follow-up 1배로 가중치를 반영해 후보 기관을 좁힘
  • 3단계: 1~5개 후보면 follow-up 없이 바로 추천하고, 6개 이상일 때만 추가 분류를 적용
  • 1차 분석에서는 추천을 숨기고 follow-up 질문만 표시
  • 최종 판단과 정렬은 Python이 담당하며, raw weighted score 기준으로 상위 5개만 보여줌

태그 기반 분류

  • 핵심 분류는 원문 필드를 그대로 사용합니다.
  • ncsCdNmLst, hireTypeNmLst, recrutSeNm, acbgCondNmLst, workRgnNmLst, aplyQlfcCn, prefCondCn, prefCn, scrnprcdrMthdExpln을 2차 분류 축으로 사용합니다.
  • job_career는 LLM으로 핵심 의도 키워드를 추출하고, 최종 추천은 Python 규칙/점수화로만 산출합니다.

빠른 시작

# 1. Python venv
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r job_raw/requirements.txt
pip install -e ./job_career

# 2. 환경변수 설정 (선택)
export ALIO_API_KEY="..."         # 실제 ALIO API 수집용

# 3. 수집 실행 (모의 데이터)
python job_raw/scripts/main.py --days 7

# 4. Wiki 변환
python job_core/scripts/wiki_generator.py

# 5. 웹 UI
python job_career/server.py

패키지 설치

  • 루트 requirements.txt는 공용 수집용 패키지(requests)를 담고 있습니다.
  • job_raw/requirements.txt는 수집기 실행용 패키지를 담고 있습니다.
  • job_career/pyproject.toml은 웹 UI와 매칭 엔진의 런타임 의존성을 담고 있습니다.
  • 현재 job_career 런타임 의존성에는 crewai가 포함되지 않습니다. 도구 클래스는 로컬 최소 구현으로 동작합니다.

GitHub Actions (CI/CD)

매주 월요일 09:00 KST 자동 실행:

  1. 만료 공고 정리 (job_core/scripts/cleanup_expired.py)
  2. 채용공고 수집 (job_raw/scripts/main.py)
  3. Wiki 변환 (job_core/scripts/wiki_generator.py)
  4. 변경사항 커밋 및 푸시

GitHub Secrets 설정

Secret 용도 필수
ALIO_API_KEY 실제 ALIO API 호출 수집 시 필수
GROQ_API_KEY LLM 실험용 선택
OPENAI_API_KEY LLM 실험용 선택
NVIDIA_API_KEY LLM 실험용 선택

주요 버그 수정 (2026-05-21)

  1. save_markdown() 무한 스킵 버그save_markdown()이 실제 파일 존재 여부를 기준으로 건너뛰도록 수정.

  2. raw.list 데이터 구조 불일치 — ALIO API의 raw 데이터가 {"list": {...}, ...} 형태여도 저장·렌더가 동작하도록 fallback 로직 추가.

  3. Facet Wiki 추가 — 원문 태그를 기반으로 2차 분류 허브를 생성하도록 변경.

  4. 단계형 추천 흐름 — 초기 분석에서는 추천을 숨기고, 확정되지 않은 분류를 선택한 뒤 최종 추천을 반환하도록 변경.

  5. 워크플로우 정리 — GitHub Actions가 현재 job_raw/job_core 수집 구조를 직접 호출하도록 조정.

라이선스

Private — khmo31

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors