diff --git a/Dockerfile b/Dockerfile index aa02aac..e9346f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,5 +12,7 @@ COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 앱 코드 복사 COPY . . + # 앱 실행 -CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file +CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] + diff --git "a/images/Rezoom \354\203\201\354\204\270\353\247\244\354\271\255\355\231\224\353\251\264.jpg" "b/images/Rezoom \354\203\201\354\204\270\353\247\244\354\271\255\355\231\224\353\251\264.jpg" new file mode 100644 index 0000000..0a17363 Binary files /dev/null and "b/images/Rezoom \354\203\201\354\204\270\353\247\244\354\271\255\355\231\224\353\251\264.jpg" differ diff --git a/images/RezoomCompanyMain.jpg b/images/RezoomCompanyMain.jpg new file mode 100644 index 0000000..ba39a6c Binary files /dev/null and b/images/RezoomCompanyMain.jpg differ diff --git a/images/RezoomLogin.jpg b/images/RezoomLogin.jpg new file mode 100644 index 0000000..c0ec7df Binary files /dev/null and b/images/RezoomLogin.jpg differ diff --git a/images/RezoomSystemArchitecture.jpg b/images/RezoomSystemArchitecture.jpg new file mode 100644 index 0000000..4fa5068 Binary files /dev/null and b/images/RezoomSystemArchitecture.jpg differ diff --git a/images/RezoomUserMain.jpg b/images/RezoomUserMain.jpg new file mode 100644 index 0000000..a0fe67b Binary files /dev/null and b/images/RezoomUserMain.jpg differ diff --git a/images/RezoomUserMatching.jpg b/images/RezoomUserMatching.jpg new file mode 100644 index 0000000..7866c9a Binary files /dev/null and b/images/RezoomUserMatching.jpg differ diff --git a/poetry.lock b/poetry.lock index 4e7fdcf..6411e76 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1234,7 +1234,10 @@ version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" -groups = ["main"] + +groups = ["main", "dev"] + + files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, diff --git a/readme.md b/readme.md index c2316fd..c92a2eb 100644 --- a/readme.md +++ b/readme.md @@ -2,43 +2,68 @@

Rezoom

AI 기반 이력서-채용공고 매칭 및 코칭 서비스

- - --- -## 프로젝트 소개 -**Rezoom**은 사용자의 이력서와 채용공고를 AI가 분석하여 - 매칭 점수 · 요약 · 학습 로드맵을 제공하는 **AI 기반 채용 매칭·코칭 서비스**입니다. +## 프로젝트 개요 + +저희 프로젝트 **Rezoom**은 지원자의 이력서와 채용공고를 AI가 분석하여 **매칭 점수, 요약, 학습 로드맵, 자기소개서 피드백**을 제공하는 +**AI 기반 양방향 채용 매칭·코칭 플랫폼**입니다. +단순 API 사용이 아닌 직접 학습시킨 LoRA 기반 LLaMA3 모델 사용 -- 자체 파인튜닝한 LLM과 벡터 검색 시스템을 결합 -- Multi-Agent 구조 기반의 AI 분석 & 코칭 흐름 구현 -- 완전 모듈화된 MSA 아키텍처 기반 실시간 응답 시스템 +### 주요 기능 +- LLM 기반 이력서-채용공고 정밀 분석 및 매칭 +- Multi-Agent 기반 피드백 & 로드맵 생성 +- 프론트/백 분리 + 완전 MSA 구조 + ECS 자동 배포 --- -## 시스템 구성 +## 시스템 아키텍처 + +| 영역 | 기술 구성 | +|------------------|--------------------------------------------------------------------------------------------------| +| **Frontend** | React | +| **Backend** | Spring Boot (결제, 인증), FastAPI (AI 분석, DB 연동) | +| **AI/LLM 모델** | `LLaMA3 8B` (Unsloth LoRA fine-tuned) + CrewAI Agent + LangGraph GAN 구조 | +| **데이터베이스** | PostgreSQL, MongoDB Atlas | +| **스토리지** | Amazon S3 | +| **인프라** | GitHub Actions → Docker → AWS ECR → ECS Fargate / RunPod 추론 서버 | +| **기타 연동** | Toss Payments, OpenAI API, Poetry, Wandb | + +
+ +
+ -| 영역 | 기술 구성 | -|------------------|----------------------------------------------------------------------------------------------------------------------------------------------| -| **Frontend** | React | -| **Backend** | Spring Boot (결제 모듈 연동, S3 연동), FastAPI (AI 분석, 벡터 검색) | -| **AI/LLM 모델** | `LLaMA3 8B` (LoRA fine-tuned via Unsloth), CrewAI 기반 Agent, LangGraph GAN 검증 | -| **데이터베이스** | PostgreSQL, MongoDB Atlas (벡터 인덱싱 포함) | -| **인프라** | GitHub Actions → Docker → AWS ECR → ECS Fargate, RunPod 추론 서버 | -| **기타 연동** | Toss Payments, Poetry, wandb, OpenAI API | --- ## 모델 상세 -- **모델명**: `ninky0/rezoom-llama3.1-8b-4bit-b16-r64-merged` +- **모델명**: `ninky0/rezoom-llama3.1-8b-4bit-b16-r64` +- **기반**: Meta LLaMA 3.1 8B, 4-bit 양자화, b16 r64 구조 +- **파인튜닝**: Unsloth + Alpaca SFT +- **배포 환경**: RunPod 워커 병렬 추론 → FastAPI 호출로 응답 - **구성**: LLaMA3 기반 8B 모델, 4-bit LoRA, b16 r64 구조 - **추론 환경**: RunPod 병렬 워커 배포, FastAPI로 서빙 - **검증 흐름**: LangGraph 기반 GAN 구조 + Agent 기반 피드백 추천 +--- + +## 화면 + +
+ + +
+
+ + +
+ + --- ## 기술 스택 @@ -46,7 +71,7 @@
- + @@ -62,14 +87,13 @@ --- +## 모델 저장소 -- 🤖 모델 저장소: [Hugging Face - ninky0/rezoom](https://huggingface.co/ninky0/rezoom-llama3.1-8b-4bit-b16-r64-merged) - +[Hugging Face - ninky0/rezoom-llama3.1-8b-4bit-b16-r64](https://huggingface.co/ninky0/rezoom-llama3.1-8b-4bit-b16-r64) ---
- -⭐ 본 프로젝트는 실무형 AI 서비스 구축을 위한 종합적인 실험과 개발 경험을 바탕으로 진행되었습니다. - +본 프로젝트는 실무형 AI 채용 서비스를 위한 +엔드-투-엔드 아키텍처 구성 및 모델 추론 시스템을 구현하며 개발 역량을 강화하는 데 중점을 두었습니다.
diff --git a/requirements.txt b/requirements.txt index ae727db..f35b0f5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,4 +11,5 @@ langchain-openai==0.3.9 python-dotenv==1.0.1 pandas==2.2.3 starlette==0.36.3 -langgraph==0.3.31 \ No newline at end of file +langgraph==0.3.31 + diff --git a/services/model_service.py b/services/model_service.py index 6e613cc..d2c5f19 100644 --- a/services/model_service.py +++ b/services/model_service.py @@ -2,9 +2,7 @@ import aiohttp import logging import os -import xml.etree.ElementTree as ET import re -from typing import Optional from dotenv import load_dotenv from fastapi import HTTPException from xml.etree.ElementTree import Element, tostring