Skip to content

MinecraftDawn/resume-optimizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧠 Resume Optimizer — 104 台灣市場 AI 履歷優化 Skill

一個專為台灣求職市場打造的 Claude Code Skill,讓 AI 像資深 HR 顧問一樣幫你精準評分、改寫、優化你的 104 履歷,並能自動搜尋 104 職缺、計算履歷與每個職缺的適配分數。

📖 介紹文:用 AI Agent 駭進 104 履歷系統


目錄

  1. 為什麼做這個
  2. 這個 Skill 能做什麼
  3. 安裝方式
  4. 使用方式
  5. 評分系統說明
  6. Scripts 說明
  7. Demo 範例
  8. 進階功能
  9. 常見問題
  10. 設計理念與限制

為什麼做這個

台灣求職市場有一個現實:104 上有超過 10 萬筆履歷,HR 平均只花 30 秒掃描一份。

多數求職者知道履歷很重要,卻不知道「哪裡不夠好」。市面上的履歷健檢服務要嘛太貴、要嘛太表面(「多用數字」這種建議根本無從下手)。

這個 Skill 的目標是:像一個懂 104 演算法、懂台灣 HR 心理的資深顧問,給出具體、可立即執行的建議 —— 不是「多加數字」,而是「你的第二段工作描述第一句改成這樣:透過 [Z 方法],達成 [X 成果],以 [Y 指標] 衡量」。


這個 Skill 能做什麼

功能 說明
加權評分(0–103 分) 12 個區塊依實際篩選影響力設定滿分,工作經歷(25分)比推薦人(1分)重要
Missing Section Audit 自動清點缺失、不足、無法評估的區塊,給出狀態圖示
XYZ 成就改寫 把任務型描述(「負責社群媒體」)改寫成成果型(「3 個月自然觸及提升 40%」)
JD 關鍵字 Gap 分析 比對目標職缺 JD,找出履歷缺失的硬技能/職能/產業關鍵字
最佳排序建議 依應屆/資深/轉職/設計職等背景,推薦 104 區塊排列順序
快速掃描模式 只要 Top 3 最高槓桿建議,不需要完整報告(適合時間有限時)
自傳生成助手 自傳缺失或偏弱時,主動協助草擬一篇可直接貼入 104 的自傳
面試問題預測 報告完成後,可選擇根據履歷弱點和 JD 預測最可能被問到的面試題
版本比較 貼上上次報告分數,即時對照改善幅度
JD 職缺適配分析 自動從 104 搜尋職缺,以五維度公式計算每個職缺的適配分(需 Python 環境)
LinkedIn 雙平台模式 從 104 模式切換為 LinkedIn 個人品牌優化,或兩者同時進行
平台轉換模式 將 104 履歷內容轉換為 LinkedIn 格式,或反向轉換
11 種語氣模式 從損友、嚴父、嘮叨媽媽到資深HR,用你最接受的口吻收到回饋,全程貫徹不走音
步驟進度提示 每個 Step 開頭顯示 📍 Step X/5,隨時知道流程進度

安裝方式

此 Skill 支援三種安裝方式,依你使用的 Claude 版本選擇。

方式一:Claude 桌面版 / 網頁版(最簡單)

  1. 下載本 repo 的 ZIP 檔案
  2. 開啟 Claude 桌面版或 claude.ai
  3. 進入 Customize → Skills → + → Create skill → Upload a skill
  4. 上傳下載的 ZIP 檔即完成

注意: JD 職缺適配分析(適配模式)需要執行本機 Python 腳本,僅支援 Claude Code CLI 環境。

方式二:Claude Code CLI(從本 repo 安裝)

# Clone 此 repo
git clone https://github.com/MinecraftDawn/resume-optimizer.git resume-optimizer
cd resume-optimizer

# 安裝 Python 依賴(適配模式需要)
python3 -m venv .venv
source .venv/bin/activate
pip install -r scripts/requirements.txt
playwright install chromium

# 將 Skill 複製到 Claude Code plugin 目錄
mkdir -p ~/.claude/plugins/resume-optimizer/skills/resume-optimizer
cp SKILL.md ~/.claude/plugins/resume-optimizer/skills/resume-optimizer/
cp -r references/ ~/.claude/plugins/resume-optimizer/skills/resume-optimizer/

方式三:Claude Code CLI(整合至現有 Plugin)

若你已有自己的 Claude Code plugin,把 SKILL.mdreferences/scripts/ 放入對應目錄即可。

your-project/
├── SKILL.md
├── scripts/
│   ├── fetch_jobs.py        ← 104 職缺搜尋腳本
│   ├── score_fit.py         ← 適配評分腳本
│   └── requirements.txt
└── references/
    ├── 104-format.md
    ├── scoring.md
    ├── suggestions.md
    ├── output-format.md
    ├── salary-benchmarks.md
    ├── industry-profiles.md
    ├── linkedin-mode.md
    ├── linkedin-format.md
    ├── linkedin-scoring.md
    ├── linkedin-suggestions.md
    ├── linkedin-output.md
    ├── platform-conversion.md
    ├── jd-crawl-guide.md
    └── jd-fit-scoring.md

驗證安裝成功

安裝後開啟新對話,輸入:

/resume-optimizer

或直接說「幫我看履歷」、上傳履歷 PDF,Skill 會自動啟動。


使用方式

基本流程

Step 1:觸發 Skill

直接在對話中說任何觸發詞:

幫我看履歷
分析我的 104 履歷
履歷打分
幫我改履歷

或是直接上傳 PDF / 貼上純文字,Skill 會自動啟動。


Step 2:提供履歷

推薦方式:從 104 會員頁面下載 PDF 上傳。
也接受:直接將文字複製貼上。


Step 3:回答初始問題

Skill 開始前會先問四件事(可一次回答):

  1. 你想做什麼?

    • (104) 完整分析 104 履歷
    • (LI) 分析 LinkedIn 個人頁面
    • (雙平台) 104 + LinkedIn 都要分析
    • (轉換) 把 A 平台內容轉換為 B 平台格式
    • (快速) 只要 Top 3 最高槓桿建議
    • (適配) 分析履歷與多個 104 職缺的匹配度
  2. 這是第一次分析,還是有舊報告要對比?

  3. 求職目標類型(A 主動有JD / B 探索中 / C 被動觀望 / D 職涯轉換 / E 晉升加薪)

  4. 想用哪種語氣收到回饋?(見下方語氣模式說明)


Step 4:收到完整報告

報告包含:

  • 各區塊評分表(得分/滿分/達成率/狀態)
  • 軟實力綜合分析(量化密度、硬實力佔比)
  • JD Gap 分析(若有提供 JD)
  • 每個低分區塊的具體建議 + XYZ 改寫示範
  • 建議區塊排序(附理由)
  • 今日優先執行清單(3–4 項,附預估分數提升)

語氣模式

每次分析開始時,Skill 會讓你選擇 11 種語氣之一,整份報告的說話方式都會跟著改變(評分邏輯與分數不受影響):

# 語氣 特色
1 不套用語氣 維持原始分析風格(預設)
2 嘴砲型損友 直白、損、但真心為你好
3 嘮叨的媽媽 反覆叮嚀、充滿擔憂與愛
4 家中的嚴父 高標準、少稱讚、要你成才
5 研究所教授 系統分析、邏輯導向、學術腔
6 十年資深HR 篩選視角、市場現實、不廢話
7 行政老油條 職場眉角、潛規則、人生閱歷
8 勵志教練 每個弱點都是機會,正能量滿點
9 外商獵頭 personal brand、impact、中英混搭
10 社畜老前輩 過來人、務實、帶點滄桑的溫暖
11 補習班名師 超有條理、愛拆步驟、你一定學得會

隨時在對話中說「換成嚴父語氣」或「換成 4」即可切換。


快速掃描模式

時間有限、只想知道「最值得先做哪三件事」?在 Step 0 第 1 題選 (快速)

Skill 會跳過完整的 Step 1–5 流程,直接輸出 Top 3 最高槓桿建議,格式精簡,每條都附上 XYZ 改寫示範與預估影響。最後還有跳出口:輸入「完整分析」即可繼續完整版流程。

📍 Quick Scan — 分析完成

**Top 1 — 工作經歷**
問題:所有描述都是任務型,沒有任何數字成果
怎麼改:把每段第一句換成 XYZ 格式
範例改寫:
  原:負責後端 API 開發與維護
  改:設計並交付 RESTful API,支撐日均 50 萬次請求,透過 Redis 快取將回應時間從 420ms 降至 95ms
預估影響:高 — 工作經歷佔總分 25%,改一條立竿見影
...

JD 職缺適配分析

需要: Python 3.10+、.venv 虛擬環境、Playwright(見安裝步驟)

在 Step 0 第 1 題選 (適配),Skill 會進入 J1–J4 流程:

J1 — 收集履歷與求職條件

提供履歷後,Skill 收集:目標職稱、偏好地區、薪資期望,並從履歷中提取技能池與總年資。

J2 — 自動搜尋 104 職缺並評分

呼叫 scripts/fetch_jobs.py,使用 Playwright 無頭瀏覽器從 104 搜尋符合條件的職缺(每頁 10 筆),並對每筆自動執行 scripts/score_fit.py 計算五維度適配分。

  • 若搜尋結果不足,自動追加同義關鍵字 fallback(最多 3 次)
  • 支援分頁瀏覽,跨頁選擇職缺
  • 可排除薪資完全面議的職缺
📍 職缺搜尋結果(第 1 頁)

| # | 職稱 | 公司 | 薪資 | 地點 | 適配分 | 主要技能缺口 |
|---|------|------|------|------|--------|------------|
| 1 | [前端工程師](URL) | OO科技 | 月薪60,000–90,000元 | 台北市 | 🟢 82/100 | TypeScript |
| 2 | [React工程師](URL) | XX新創 | 月薪50,000–70,000元 | 新北市 | 🟡 67/100 | Next.js, GraphQL |
...

J3 — 選定職缺詳細適配分析

選擇想深入分析的職缺編號後,展開五維度得分明細、已具備技能 vs 缺少技能清單,以及投遞建議。

J4 — 輸出適配報告

彙整所有分析職缺的比較表、職缺連結清單、前 3 名詳細分析,以及跨 JD 共同缺少的高頻技能補強清單。


LinkedIn 模式

在 Step 0 選 (LI)(雙平台),Skill 載入 LinkedIn 專屬評分規則(references/linkedin-*.md),分析以下區塊:

  • Headline / About / 工作經歷 / 技能清單 / 教育背景 / 專案 / 證照 / Featured

LinkedIn 模式注重個人品牌與故事性,而非 104 的關鍵字密度。雙平台模式會先完成 104 完整分析,再進行 LinkedIn 增量分析(共用工作經歷資料,不重複詢問)。


平台轉換模式

在 Step 0 選 (轉換),依照 C0–C4 流程執行:

  1. C0 確認轉換方向(104 → LinkedIn 或 LinkedIn → 104)
  2. C1 收集來源平台的完整內容
  3. C2 逐欄審計(直接搬移 / 需改寫 / 需新建 / 操作說明)
  4. C3 逐欄改寫輸出(每個欄位產出可直接貼入目標平台的文字)
  5. C4 完整轉換報告 + 轉換品質提醒

完成後可選擇繼續對目標平台進行評分。


版本比較模式

若已有上一次的分析報告,可觸發比對模式:

我已經有上次的評分報告,想看這次改了多少

Skill 會請你貼上舊報告的總分與各區塊分數,最終產出對比表,標示每個區塊的進退幅度(▲/▼/─)。


評分系統說明

計分架構(104 完整版)

區塊 滿分 重要性
工作經歷 25 ★★★★★
專長 15 ★★★★
基本資料 10 ★★★★
學歷 10 ★★★
求職條件 8 ★★★
自傳 8 ★★★
專案成就 8 ★★★
軟實力綜合 6 ★★★
證照 4 ★★
語文能力 3 ★★
附件 2 ★★
推薦人 1
基礎總分 100
自訂內容(加分) +3 ★★
含加分總分 103

JD 職缺適配評分架構(五維度)

維度 滿分 說明
職稱 / 職類匹配 25 職稱相符程度、職類是否一致
技能關鍵字重疊率 30 履歷技能 vs JD 必要/加分技能
年資符合度 20 履歷工作年資 vs JD 要求年資
薪資區間符合度 10 履歷期望薪資 vs JD 揭露薪資
產業 / 地區符合度 15 目標產業 + 工作地點

色階:80–100 🟢 強力推薦、60–79 🟡 值得嘗試、40–59 🟠 有挑戰、0–39 🔴 不建議

狀態圖示意義(104 完整版)

圖示 意義 達成率
優秀,不需優先處理 ≥75%
⚠️ 尚可,建議改善 50–74%
嚴重不足,優先處理 <50% 或必要項缺失
缺失,但屬可選項 未填寫
無法評估(資訊不足) N/A

評分原則

這個 Skill 評品質,不評填寫格數

  • 專案成就有 2 筆深度描述 = 充足(不需要填滿 6 筆)
  • 自傳 400 字聚焦有力 > 3000 字流水帳
  • 工作描述有成果數字 > 工作內容長度

Scripts 說明

適配分析模式(J1–J4)需要在專案根目錄下執行兩個 Python 腳本。

scripts/fetch_jobs.py

使用 Playwright 無頭瀏覽器從 104 搜尋職缺,並透過 104 Detail API 抓取每個職缺的 JD 文字、技能標籤、年資要求與薪資資訊。

source .venv/bin/activate && python scripts/fetch_jobs.py \
  --keyword "前端工程師" \
  --area "6001001000" \       # 台北市;全台傳空字串 ""
  --title-filter "前端,frontend" \
  --limit 10 \
  --page 1 \
  [--salary-min 40000] \     # 月薪下限(元)
  [--salary-max 80000] \     # 月薪上限(元)
  [--exclude-negotiable]     # 排除薪資面議職缺

輸出 JSON 格式:

{
  "status": "success",
  "page": 1,
  "jobs": [
    {
      "job_code": "abc123",
      "title": "前端工程師",
      "company": "OO科技",
      "salary": "月薪60,000–90,000元",
      "salary_monthly_min": 60000,
      "salary_monthly_max": 90000,
      "location": "台北市",
      "url": "/job/abc123",
      "jd_text": "...",
      "skill_tags": ["React", "TypeScript"],
      "exp_required": "2年以上"
    }
  ]
}

status 可為 successneed_fallback(無法存取 104,回傳搜尋 URL 讓用戶手動操作)、error


scripts/score_fit.py

以五維度公式計算履歷與單一 JD 的適配分,輸出 JSON。

source .venv/bin/activate && python scripts/score_fit.py \
  --job-title "前端工程師" \
  --jd-required '["React","TypeScript","Git"]' \
  --jd-preferred '["Next.js","GraphQL"]' \
  --jd-exp 2 \
  --jd-salary-min 60000 \
  --jd-salary-max 90000 \
  --jd-location "台北市" \
  --resume-title "前端工程師" \
  --resume-skills '["React","JavaScript","CSS","Git"]' \
  --resume-exp 3.5 \
  --resume-salary 75000 \
  --resume-location "台北市"

輸出範例:

{
  "status": "success",
  "scores": {
    "title": 25, "skill": 22, "exp": 20, "salary": 10,
    "industry_location": 14, "total": 91
  },
  "skill_detail": {
    "matched_required": ["git", "react"],
    "missing_required": ["typescript"],
    "matched_preferred": [],
    "missing_preferred": ["graphql", "next.js"]
  }
}

所有薪資參數單位為(月薪)。技能比對支援同義詞正規化(如 React.js = react)。


Demo 範例

輸入

幫我分析這份履歷
(上傳 PDF)

目標職缺:後端工程師 (Python/Django)
背景:3 年工作經驗,目前在新創,想換到 SaaS 公司

輸出(摘要)

## 104 履歷評分報告

### 各區塊評分

| 區塊 | 得分 | 滿分 | 達成率 | 狀態 |
|------|------|------|--------|------|
| 工作經歷 | 14 | 25 | 56% | ⚠️ |
| 專長 | 12 | 15 | 80% ||
| 基本資料 | 7 | 10 | 70% | ⚠️ |
| 學歷 | 8 | 10 | 80% ||
| 求職條件 | 5 | 8 | 63% | ⚠️ |
| 自傳 | 3 | 8 | 38% ||
| 專案成就 | 0 | 8 | 0% ||
| ...  | ... | ... | ... | ... |
| **基礎總分** | **63** | **100** | **63%** | |
| 自訂內容 | 0 | +3 | | |
| **含加分總分** | **63** | **103** | **61%** | |

### JD 關鍵字 Gap 分析

目標職缺:後端工程師 (Python/Django)

| 類別 | JD 關鍵字 | 履歷狀態 | 建議行動 |
|------|----------|---------|---------|
| 硬技能 | Python | ✅ 完全匹配 ||
| 硬技能 | Django | ⚠️ 弱匹配(提及但無具體使用情境) | 在工作經歷加入「使用 Django 建立...」 |
| 硬技能 | PostgreSQL | ❌ 缺失 | 若有使用,加入專長標籤 |
| 產業 | SaaS | ❌ 缺失 | 若有 SaaS 產品開發經驗,在工作內容補充 |

匹配率:6 / 12 個關鍵字完全匹配(50%)

### 工作經歷建議(XYZ 改寫示範)

**原句:** 「負責後端 API 開發與維護」

**改寫:**
「設計並交付 RESTful API 服務,支撐日均 50 萬次請求,
回應時間從 420ms 降至 95ms,透過 Redis 快取層與查詢優化實現」

(如果你目前沒有這個數字,可以告訴我大概的 traffic 規模,我幫你估算一個合理範圍)

### 下一步行動清單(今日優先執行)

1. **改寫工作經歷描述** → 預估 +5–7 分:把前 3 條任務型描述套用 XYZ 公式
2. **重寫自傳開場** → 預估 +3–4 分:刪除「我叫XXX,畢業於...」,改為直接切入最強成就
3. **新增專案成就區塊** → 預估 +4–6 分:至少加入 1 個有連結或數字的 side project
4. **補充 JD 關鍵字** → 提升關鍵字匹配率:PostgreSQL、SaaS 加入專長/工作描述

進階功能

自傳生成助手

若自傳完全缺失,或評分達成率 <50%,Skill 會在 Step 3 建議後主動詢問,收到回應後依三段結構生成 200–350 字草稿(定位 → 成就 → 動機),可直接貼入 104。


面試問題預測

Step 5 完整報告輸出後,Skill 會詢問是否要預測面試問題。確認後輸出:

🎯 面試問題預測

高風險問題(對應你的履歷弱點)
1. 可以說說你在 XX 公司最有成就感的一個專案嗎?
   為什麼會這樣問:工作經歷缺乏量化成果,面試官會追問實際貢獻
   準備方向:先備好 2–3 個有數字的案例,用 STAR 結構回答

必問基本題
2. ...

JD 相關追問(若有提供 JD)
3. ...

共 5–8 題,高風險問題排在前面。


自訂內容加分提示

若你有以下任何一項,Skill 會主動詢問並協助你加入「自訂內容」區塊,最高獲得 +3 分加分:

  • 學術發表(期刊、會議論文)
  • 開源貢獻(GitHub stars 或 PR merged)
  • 演講或 podcast 出場紀錄
  • 重大競賽獎項
  • 有可衡量成效的 side project

學歷精準計算

學歷評分考慮三個因子:

  • 學位(博士/碩士/學士/...)
  • 學校聲望(S/A/B/C 等級,台大清大 +1.5 分,QS 前 100 海外學校同等)
  • 就學狀態(畢業 ×1.0 / 就學中 ×0.9 / 肄業 ×0.75)

軟實力綜合分析

除了各區塊分數外,Skill 還會從整份履歷跨區塊計算:

  • 量化密度:工作描述中含數字的比例(共 X 條,X 條含量化指標)
  • 硬實力佔比:所有技能標籤中,工具/技術 vs 個性描述的比例
  • 軟實力佐證:軟實力聲明是否有具體行為佐證

這三項組成「軟實力綜合」6 分,讓你知道履歷的整體說服力。


常見問題

Q:PDF 解析失敗怎麼辦?
直接把履歷文字複製貼上即可。Skill 接受純文字輸入,分析品質不會受影響。

Q:沒有目標 JD 也可以分析嗎?
可以,JD Gap 分析是選填功能。沒有 JD 時,工作經歷評分的 JD 關鍵字維度(10%)會以通用標準評估。

Q:適配模式的 fetch_jobs.py 跑失敗怎麼辦?
104 有反爬蟲機制,腳本會回傳 need_fallback 並提供搜尋 URL。你可以自行打開連結,把感興趣的職缺 URL 或 JD 文字貼回對話,Skill 會直接從文字進行適配分析(J3 流程),不需要腳本也能用。

Q:分數多少才算「可以投了」?
沒有絕對門檻,但一般建議:

  • 含加分 75 分以上:投遞競爭較少的職缺有合理回應率
  • 含加分 85 分以上:投遞一般競爭職缺
  • 含加分 90+ 分:投遞熱門大公司或外商

Q:LinkedIn 模式和 104 模式有什麼不同?
104 注重關鍵字密度與結構清晰(HR 用搜尋引擎找人),LinkedIn 注重個人品牌與故事性(主管會 Google 你)。兩個平台的策略不同,直接複製貼上效果很差。

Q:可以只讓 Skill 幫我改某一個區塊嗎?
可以,直接說「只看我的工作經歷」或「幫我改自傳」即可。Skill 會針對該區塊給出評分與建議,不需要分析整份履歷。


設計理念與限制

設計理念

評品質,不評格數: 很多履歷服務鼓勵「填滿所有欄位」,但 104 HR 真正在乎的是「這個人能不能解決問題,有沒有成果」。本 Skill 的充足標準基於有效內容,而非欄位塞滿程度。

影響力加權: 工作經歷(25 分)和專長(15 分)加起來佔總分 40%,因為這兩個區塊是 HR 初篩的核心。推薦人(1 分)雖然建議填寫,但不是優先改善項目。

具體可執行: 所有建議都有具體的改寫示範。「多加數字」是沒有用的建議,「你的第二段工作描述改成:透過 Redis 快取,API 回應時間從 420ms 降至 95ms」才是有用的建議。

已知限制

  • fetch_jobs.py 依賴 Playwright: 需要本機 Python 環境,桌面版/網頁版用戶無法使用適配模式的自動搜尋功能
  • 104 反爬蟲機制: 腳本可能因 104 更新而失效,此時 fallback 為手動貼入 JD 文字
  • 無法驗證數字真實性: XYZ 改寫中的數字由用戶提供,Skill 不做事實查核
  • 學校聲望資料庫: 主要覆蓋台灣主要大學,偏冷門或地方性學校可能歸類為 B/C 等級
  • PDF 解析品質: 部分掃描版 PDF 或特殊排版可能影響文字提取,建議改用純文字貼上

評分不是絕對真理

這個 Skill 的分數是一個結構化的主觀評估,協助你找出最值得改善的地方。高分履歷能提高通過初篩的機率,但最終錄取還是取決於面試表現、與職位的實際匹配度,以及許多履歷以外的因素。


貢獻與回饋

如果你發現某個評分邏輯不合理、建議改寫品質可以提升,或想新增某類職缺的專屬優化建議,歡迎:

  1. 修改 references/ 底下對應的 .md 檔案
  2. 提交 PR 並描述你的改動理由

SKILL.md 是主邏輯,references/ 是評分與建議的資料庫,scripts/ 是 JD 搜尋與適配評分的 Python 工具,三者分離讓更新更容易。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages