Skip to content

HelloPy-Korea/JD-Scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

19 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

JD-Scanner

AI ๊ธฐ๋ฐ˜ ์ฑ„์šฉ๊ณต๊ณ  ๋ถ„์„ ๋ฐ ๋ฉด์ ‘ ์ค€๋น„ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ฑ„์šฉ๊ณต๊ณ  URL๊ณผ GitHub ํ”„๋กœํ•„์„ ๋ถ„์„ํ•˜์—ฌ ์Šคํ‚ฌ ๊ฐญ์„ ํŒŒ์•…ํ•˜๊ณ , ๋งž์ถคํ˜• ๋ฉด์ ‘ ์งˆ๋ฌธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ์„ค๋ช…
์ฑ„์šฉ๊ณต๊ณ  ์š”์•ฝ URL์—์„œ ์ฑ„์šฉ๊ณต๊ณ  ์Šคํฌ๋ž˜ํ•‘ ๋ฐ AI ์š”์•ฝ
GitHub ๋ถ„์„ ๊ณต๊ฐœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ถ„์„ ๋ฐ ๊ธฐ์ˆ  ์Šคํƒ ์ถ”์ถœ
์Šคํ‚ฌ ๊ฐญ ๋ถ„์„ ์ฑ„์šฉ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๋ณด์œ  ๊ธฐ์ˆ  ๋น„๊ต ๋ถ„์„
๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ ํ•œ๊ตญ์–ด/์˜์–ด ๋งž์ถคํ˜• ๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ
์ด๋ฉ”์ผ ๋ฐœ์†ก ๋ถ„์„ ๊ฒฐ๊ณผ ์ด๋ฉ”์ผ ์ž๋™ ๋ฐœ์†ก
Discord ์—ฐ๋™ ์š”์•ฝ ๊ฒฐ๊ณผ Discord ์ฑ„๋„ ์ „์†ก

๋™์ž‘ ํ๋ฆ„

[์ด๋ฉ”์ผ/GitHub ์ž…๋ ฅ] โ†’ [์ฑ„์šฉ๊ณต๊ณ  URL ์ž…๋ ฅ] โ†’ [์ฑ„์šฉ๊ณต๊ณ  ์š”์•ฝ]
                                                    โ†“
                                         [GitHub ํ”„๋กœํ•„ ๋ถ„์„]
                                                    โ†“
                                         [์Šคํ‚ฌ ๊ฐญ ๋ถ„์„]
                                                    โ†“
                                    [๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ (ํ•œ/์˜)]
                                                    โ†“
                              [ํŒŒ์ผ ์ €์žฅ + ์ด๋ฉ”์ผ/Discord ๋ฐœ์†ก]

๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
Core LangChain 0.3.25+ / LangChain-Ollama 0.3.3+
LLM Ollama (llama3.2)
์Šคํฌ๋ž˜ํ•‘ BeautifulSoup4 / requests
์ด๋ฉ”์ผ Gmail SMTP (smtplib)
์—ฐ๋™ discord.py 2.5.2+
์„ค์ •๊ด€๋ฆฌ python-dotenv
ํŒจํ‚ค์ง€๊ด€๋ฆฌ uv
Python 3.11+

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

JD-Scanner/
โ”œโ”€โ”€ main.py                     # GUI ์ง„์ž…์ 
โ”œโ”€โ”€ pyproject.toml              # ํ”„๋กœ์ ํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
โ”œโ”€โ”€ makefile                    # ์„ค์น˜/์‹คํ–‰ ์ž๋™ํ™”
โ”œโ”€โ”€ .env                        # ํ™˜๊ฒฝ์„ค์ •
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ __init__.py             # ํŒจํ‚ค์ง€ ์ดˆ๊ธฐํ™”
โ”‚   โ”œโ”€โ”€ ui/                     # UI ๋ ˆ์ด์–ด (Presentation)
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ main_ui.py          # ๋ฉ”์ธ ๋ถ„์„ ํ™”๋ฉด
โ”‚   โ”‚   โ””โ”€โ”€ settings_ui.py      # ์„ค์ • ํ™”๋ฉด
โ”‚   โ”œโ”€โ”€ core/                   # Core ๋ ˆ์ด์–ด (Domain)
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ chain.py            # LangChain ์ฒด์ธ (์š”์•ฝ + ์Šคํ‚ฌ๊ฐญ)
โ”‚   โ”‚   โ”œโ”€โ”€ mapreduce_chain.py  # Map-Reduce ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ lang_prompt.py      # ํ”„๋กฌํ”„ํŠธ ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ lang_template.py    # ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ services/               # Services ๋ ˆ์ด์–ด (Infrastructure)
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ discord_sender.py   # Discord ๋ฉ”์‹œ์ง€ ์ „์†ก
โ”‚   โ”‚   โ”œโ”€โ”€ email_sender.py     # ์ด๋ฉ”์ผ ๋ฐœ์†ก
โ”‚   โ”‚   โ””โ”€โ”€ github_analyzer.py  # GitHub ํ”„๋กœํ•„ ๋ถ„์„
โ”‚   โ””โ”€โ”€ utils/                  # Utils ๋ ˆ์ด์–ด (Shared)
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ config_manager.py   # ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ
โ”‚       โ”œโ”€โ”€ user_manager.py     # ์‚ฌ์šฉ์ž ์ •๋ณด ๊ด€๋ฆฌ
โ”‚       โ”œโ”€โ”€ token_counter.py    # ํ† ํฐ ์นด์šดํ„ฐ
โ”‚       โ””โ”€โ”€ text_splitter.py    # ํ…์ŠคํŠธ ์ฒญํ‚น
โ”œโ”€โ”€ output/
โ”‚   โ”œโ”€โ”€ users/                  # ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ €์žฅ
โ”‚   โ””โ”€โ”€ *.md                    # ๋ถ„์„ ๊ฒฐ๊ณผ ํŒŒ์ผ
โ””โ”€โ”€ test/                       # ํ…Œ์ŠคํŠธ ํŒŒ์ผ

์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ์‚ฌ์ „ ์ค€๋น„

  • Python 3.11+ ์„ค์น˜
  • Ollama ์„ค์น˜ ๋ฐ ์‹คํ–‰

2. ํ”„๋กœ์ ํŠธ ์„ค์ •

# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone https://github.com/HelloPy-Korea/JD-Scanner.git
cd JD-Scanner

# ์˜์กด์„ฑ ์„ค์น˜
make install

3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

.env ํŒŒ์ผ:

# Discord (์„ ํƒ)
DISCORD_BOT_TOKEN=your_bot_token
DISCORD_CHANNEL_IDS=channel_id_1,channel_id_2

# ์ด๋ฉ”์ผ (Gmail SMTP)
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SENDER_EMAIL=your_email@gmail.com
SENDER_PASSWORD=your_app_password

# GitHub API (์„ ํƒ - ๋†’์€ API ์ œํ•œ)
GITHUB_TOKEN=your_github_token

Gmail ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •:

  1. Google ๊ณ„์ • โ†’ ๋ณด์•ˆ โ†’ 2๋‹จ๊ณ„ ์ธ์ฆ ํ™œ์„ฑํ™”
  2. ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑ โ†’ ์ƒ์„ฑ๋œ 16์ž๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ SENDER_PASSWORD์— ์ž…๋ ฅ

4. ์‹คํ–‰

make run

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

============================================================
  JD-Scanner - AI ๊ธฐ๋ฐ˜ ์ฑ„์šฉ๊ณต๊ณ  ๋ถ„์„ ๋ฐ ๋ฉด์ ‘ ์ค€๋น„ ์‹œ์Šคํ…œ
============================================================

[Step 1/6] ์‚ฌ์šฉ์ž ์ •๋ณด ์ž…๋ ฅ
==================================================
  ์‚ฌ์šฉ์ž ์ •๋ณด ์ž…๋ ฅ
==================================================

์ด๋ฉ”์ผ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: user@example.com

GitHub ํ”„๋กœํ•„์„ ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (y/n): y
GitHub ํ”„๋กœํ•„ URL์„ ์ž…๋ ฅํ•˜์„ธ์š”: https://github.com/username

ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค, user@example.com!

[Step 2/6] ์ฑ„์šฉ๊ณต๊ณ  ์ž…๋ ฅ
----------------------------------------
์ฑ„์šฉ๊ณต๊ณ  URL์„ ์ž…๋ ฅํ•˜์„ธ์š”: https://example.com/job

[Step 3/6] ์ฑ„์šฉ๊ณต๊ณ  ๋ถ„์„
...

[Step 4/6] GitHub ํ”„๋กœํ•„ ๋ถ„์„
...

[Step 5/6] ์Šคํ‚ฌ ๊ฐญ ๋ถ„์„
...

[Step 6/6] ๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ
...

============================================================
๋ถ„์„ ์™„๋ฃŒ!
============================================================

์ถœ๋ ฅ ํ˜•์‹

์ฑ„์šฉ๊ณต๊ณ  ์š”์•ฝ

## ๊ณต๊ณ ๋ช…: [๊ณต๊ณ ๋ช…]
### ํšŒ์‚ฌ๋ช…: [ํšŒ์‚ฌ๋ช…]

**๋งˆ๊ฐ๊ธฐํ•œ**
- [๋งˆ๊ฐ์ผ]

### A. ํšŒ์‚ฌ์†Œ๊ฐœ & ์ง๋ฌด ์†Œ๊ฐœ
### B. ์ž๊ฒฉ์š”๊ฑด & ์šฐ๋Œ€์‚ฌํ•ญ
### C. ํ˜œํƒ ๋ฐ ๋ณต์ง€

์Šคํ‚ฌ ๊ฐญ ๋ถ„์„

### 1. ๊ธฐ์ˆ  ์Šคํ‚ฌ ๋งค์นญ ๋ถ„์„
- ์ผ์น˜ํ•˜๋Š” ๊ธฐ์ˆ 
- ๋ถ€์กฑํ•œ ํ•„์ˆ˜ ๊ธฐ์ˆ 
- ์ง€์›์ž์˜ ์ถ”๊ฐ€ ๊ธฐ์ˆ 

### 2. ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜ ๋ถ„์„
### 3. ๊ธฐ์ˆ  ์„ฑ์ˆ™๋„ ํ‰๊ฐ€
### 4. ์ข…ํ•ฉ ๋งค์นญ ์ ์ˆ˜

๋ฉด์ ‘ ์งˆ๋ฌธ (ํ•œ๊ตญ์–ด/์˜์–ด)

### A. ๋ถ€์กฑํ•œ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์งˆ๋ฌธ
### B. ๋Œ€์•ˆ ๊ธฐ์ˆ  ์„ ํƒ์— ๋Œ€ํ•œ ์งˆ๋ฌธ
### C. ๊ธฐ์ˆ  ๊ฐญ ๊ทน๋ณต ๊ณ„ํš ์งˆ๋ฌธ
### D. ํ”„๋กœ์ ํŠธ ์‹ฌํ™” ์งˆ๋ฌธ
### E. ์‹ค์ œ ์—…๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค ์งˆ๋ฌธ

๋ชจ๋“ˆ ์„ค๋ช…

๋ ˆ์ด์–ด ๊ตฌ์กฐ

๋ ˆ์ด์–ด ์—ญํ•  ์˜์กด ๊ฐ€๋Šฅ
ui/ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค core, services, utils
core/ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง utils
services/ ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๋™ utils
utils/ ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ ์—†์Œ

์ฃผ์š” ๋ชจ๋“ˆ

๋ชจ๋“ˆ ์„ค๋ช…
main.py GUI ์ง„์ž…์ , ์„ค์ • ํ™•์ธ ํ›„ ์œˆ๋„์šฐ ์‹คํ–‰
src/ui/main_ui.py ๋ฉ”์ธ ๋ถ„์„ ํ™”๋ฉด, ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ ์‹คํ–‰
src/ui/settings_ui.py ์„ค์ • ํ™”๋ฉด (Discord, Email, GitHub)
src/core/chain.py JobSummaryChain, SkillGapChain
src/core/mapreduce_chain.py ๋Œ€์šฉ๋Ÿ‰ ํ…์ŠคํŠธ Map-Reduce ์ฒ˜๋ฆฌ
src/core/lang_template.py ์š”์•ฝ/์Šคํ‚ฌ๊ฐญ/๋ฉด์ ‘์งˆ๋ฌธ ํ…œํ”Œ๋ฆฟ
src/services/github_analyzer.py GitHub API ์—ฐ๋™, ํ”„๋กœํ•„ ๋ถ„์„
src/services/email_sender.py Gmail SMTP ์ด๋ฉ”์ผ ๋ฐœ์†ก
src/services/discord_sender.py Discord ๋ฉ”์‹œ์ง€ ์ „์†ก
src/utils/config_manager.py .env ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ
src/utils/user_manager.py ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ง‘ ๋ฐ ์ €์žฅ

์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

๋„ค์ด๋ฐ ๊ทœ์น™

๊ตฌ๋ถ„ ๊ทœ์น™ ์˜ˆ์‹œ
ํด๋ž˜์Šค๋ช… PascalCase JobSummaryChain, ConfigManager
ํ•จ์ˆ˜/๋ฉ”์„œ๋“œ๋ช… snake_case run_summary, validate_inputs
์ƒ์ˆ˜ UPPER_SNAKE_CASE BASE_URL, SCHEMA
private ๋ฉ”์„œ๋“œ underscore prefix _initialize_llm, _create_chain

ํŒŒ์ผ ๊ตฌ์กฐ

"""
๋ชจ๋“ˆ ์„ค๋ช… docstring
- ์ฃผ์š” ๊ธฐ๋Šฅ 1
- ์ฃผ์š” ๊ธฐ๋Šฅ 2
"""

# ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
import os
import sys

# ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
from langchain_ollama.llms import OllamaLLM

# ๋กœ์ปฌ ๋ชจ๋“ˆ
from ..utils.config_manager import ConfigManager

ํƒ€์ž… ํžŒํŒ…

from typing import Optional, Dict, List, Literal

def analyze_profile(self, github_url: str) -> Optional[GitHubProfile]:
    """GitHub ํ”„๋กœํ•„ ๋ถ„์„"""
    ...

def generate_questions(
    self,
    language: Literal["ko", "en"] = "ko"
) -> str:
    ...

๋ ˆ์ด์–ด ์˜์กด์„ฑ ๊ทœ์น™

ui/ โ†’ core/, services/, utils/ (ํ—ˆ์šฉ)
core/ โ†’ utils/ (ํ—ˆ์šฉ)
services/ โ†’ utils/ (ํ—ˆ์šฉ)
ํ•˜์œ„ ๋ ˆ์ด์–ด โ†’ ์ƒ์œ„ ๋ ˆ์ด์–ด (๊ธˆ์ง€)

๋ฌธ์ œ ํ•ด๊ฒฐ

Ollama ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

ollama list
ollama serve

๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ

ollama pull llama3.2

Gmail ์ธ์ฆ ์˜ค๋ฅ˜

  • 2๋‹จ๊ณ„ ์ธ์ฆ ํ™œ์„ฑํ™” ํ™•์ธ
  • ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ (์ผ๋ฐ˜ ๋น„๋ฐ€๋ฒˆํ˜ธ X)

GitHub API ์ œํ•œ

  • GITHUB_TOKEN ์„ค์ •์œผ๋กœ ์ œํ•œ ์™„ํ™”

๋ฒ„์ „ ์ •๋ณด

ํ˜„์žฌ ๋ฒ„์ „: 0.1.0

v0.1.0 (New)

  • ์ด๋ฉ”์ผ ์ˆ˜์ง‘ ๋ฐ ๋ฐœ์†ก ๊ธฐ๋Šฅ
  • GitHub ํ”„๋กœํ•„ ๋ถ„์„ ๊ธฐ๋Šฅ
  • ์Šคํ‚ฌ ๊ฐญ ๋ถ„์„ ๊ธฐ๋Šฅ
  • ๋งž์ถคํ˜• ๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ (ํ•œ๊ตญ์–ด/์˜์–ด)
  • ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋กœ์ปฌ ์ €์žฅ

v0.0.2

  • LangChain API ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (LCEL)
  • Discord ๋ฉ”์‹œ์ง€ ๊ธฐ๋Šฅ
  • ํ”„๋กฌํ”„ํŠธ ๊ฐœ์„ 

๋ผ์ด์„ ์Šค

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors