教練循環:用 STAR 法把經驗變成履歷素材
教練循環:用 STAR 法把經驗變成履歷素材
技能驗證找出 MISSING/WEAK 後,不是丟給使用者自己補,而是用「教練式提問」逐步引導,把碎片化的工作記憶轉成結構化、可重用的履歷素材。本文分享教練循環的設計理念與實作細節。
問題:「你有 Kubernetes 經驗嗎?」
問這種問題只會得到兩種回答:
- 「有」 - 然後呢?寫什麼進履歷?
- 「沒有」 - 真的沒有嗎?還是只是沒想到怎麼表達?
真正的問題是:人們不擅長把工作經驗轉成履歷語言。
解決方案:STAR 結構化提問
STAR 是面試答題的經典框架,反過來用在提問也很有效:
S - Situation (情境)
「在什麼專案或情境下你用過這個技能?」
T - Task (任務)
「你被指派的具體任務是什麼?」
A - Action (行動)
「你具體做了什麼來解決問題?」
R - Result (結果)
「最終成果是什麼?有量化數據嗎?」
這四個問題逐步深挖,把模糊的「我有經驗」變成清晰的「我在 X 情境下,負責 Y,做了 Z,達成 W%」。
實作架構
verify → 發現 MISSING
↓
coach CLI
↓
┌─────────────────────────────┐
│ 教練循環 (Coach Loop) │
│ │
│ Round 1: Situation 提問 │
│ → 使用者回答 │
│ Round 2: Task 提問 │
│ → 使用者回答 │
│ Round 3: Action 提問 │
│ → 使用者回答 │
│ Round 4: Result 提問 │
│ → 使用者回答 │
│ │
│ 每 2 輪嘗試提取 bullet │
│ 信心度 >= 70% → 入庫 │
└─────────────────────────────┘
↓
ingest 入庫
↓
關聯回 JD (created_from_jd)
CLI 使用
uv run career-kb coach --skill "Kubernetes" --jd-id "abc123"
輸出範例:
╭─────────── Step 4: 教練循環 ───────────╮
│ 教練式提問: Kubernetes │
│ │
│ 我會問一系列問題,幫你把真實經驗轉成 │
│ 可用的履歷素材。 │
│ 如果真的沒有相關經驗,輸入 'skip'。 │
╰────────────────────────────────────────╯
問題 1 (SITUATION):
在什麼專案或情境下你用過 Kubernetes?
你的回答: 在 ABC 公司的微服務專案...
問題 2 (TASK):
你被指派的具體任務是什麼?
你的回答: 負責把 10 個服務從 VM 遷移到 K8s...
───────────────────────────────────────────
提取的素材:
╭─────────────────────────────────────────╮
│ Led Kubernetes migration of 10 │
│ microservices from VM to K8s clusters, │
│ reducing deployment time by 80% and │
│ improving system reliability to 99.9%. │
╰─────────────────────────────────────────╯
技能標籤: Kubernetes, Docker, DevOps
角色層級: Lead
影響等級: 4/5
信心度: 85%
這個素材看起來足夠完整嗎? [Y/n]: y
✓ 已入庫: a1b2c3d4-5678-...
狀態: MISSING → 待驗證 (下次 verify 會確認 COVERED)
回答→素材轉換
LLM Prompt 設計
prompt = f"""Convert this user response into a professional resume bullet point.
Skill being demonstrated: {skill}
JD Context: {jd_context}
User's raw response:
{user_response}
Requirements:
1. Write in action-verb format (Led, Built, Designed, etc.)
2. Include specific numbers/metrics if mentioned
3. Keep it to 1-2 sentences max
4. Extract relevant skill tags
5. Determine role level (IC/Lead/Manager)
6. Rate impact level 1-5
Return JSON:
{
"bullet": "The formatted bullet point",
"skills": ["skill1", "skill2"],
"role_level": "IC|Lead|Manager",
"impact_level": 1-5,
"star_components": {...},
"confidence": 0.0-1.0
}"""
信心度門檻
| 信心度 | 處理方式 |
|---|---|
| >= 0.7 | 可以入庫,詢問確認 |
| 0.5-0.7 | 繼續提問補充細節 |
| < 0.5 | 需要更多上下文 |
三層備案策略
Fallback 1: 可遷移技能搜尋
當用戶輸入 skip:
沒有直接經驗?讓我們找找可遷移技能...
建議搜尋:
→ career-kb search --focus "container orchestration deployment experience"
用 LLM 生成相關搜尋詞,從既有素材中找可以「對齊」的經驗。
Fallback 2: 策略性省略
在 strategy.py 中已處理。非核心技能直接標記為 STRATEGIC_IGNORE,不進入教練循環。
Fallback 3: 學習聲明
如果真的沒有經驗,但這是核心技能:
你正在學習這個技能嗎? [Y/n]: y
請描述學習來源 (課程/專案/自學): 正在 Udemy 上完成 K8s 認證課程
學習聲明 (Fallback 3):
╭─────────────────────────────────────────╮
│ Actively pursuing Kubernetes expertise │
│ through hands-on certification program │
│ (Udemy CKA), with lab exercises in │
│ multi-node cluster deployment. │
╰─────────────────────────────────────────╯
要把這個學習聲明入庫嗎? [Y/n]: y
✓ 已入庫: xyz789...
為什麼學習聲明有效?
- 誠實 - 不假裝有經驗
- 具體 - 說明學習來源和進度
- 可驗證 - 面試官可以追問
- 展現主動性 - 知道缺口並在補
為什麼每次回答後要 ingest
1. 長期資產累積
每次教練循環產出的素材不是用完就丟,而是:
今天準備 Google PM 職位 → 產出 3 個 bullet
明天準備 Meta PM 職位 → 搜尋發現有可用素材
→ 只需補 1 個新 bullet
2. 去重保護
入庫時會做精確去重和相似去重:
# 精確去重:同一句不重存
if text_hash matches:
return existing_id
# 相似去重:語意相近的標記為變體
if cosine >= 0.94 and skills_overlap >= 0.5:
record["parent_id"] = similar_id
record["status"] = "pending_review"
3. JD 關聯追蹤
record["created_from_jd"] = jd_id
這讓你知道每個素材是從哪個 JD 的教練循環產出的。
與其他步驟的銜接
Step 1: save-jd → 取得 jd_id
Step 2: verify → 找出 MISSING/WEAK
Step 3: (search) → 找現有素材
Step 4: coach → 挖掘新經驗入庫 ← 本文重點
Step 5: generate → 生成履歷
Step 6: ingest → 回寫優質內容
教練循環是一個增量學習的過程:每次準備新職位,你的素材庫都會變得更豐富。
實務建議
1. 先 verify 再 coach
不要盲目開始教練循環。先用 verify --with-strategy 看哪些是「核心 MISSING」,只針對那些做 coach。
2. 準備好具體數字
教練提問時,LLM 會特別追問量化數據:
- ❌ "我優化了性能" → 信心度低
- ✅ "我把 API 延遲從 200ms 降到 50ms" → 信心度高
3. 不要美化
教練循環的目標是提取真實經驗,不是編造。如果真的沒做過:
- 用 Fallback 1 找可遷移技能
- 用 Fallback 3 寫學習聲明
- 或者接受 Strategic Ignore
面試時被問穿比履歷有缺口更糟。
4. 每輪檢查提取結果
當信心度 >= 70% 時,系統會問「這個素材看起來足夠完整嗎?」
- 如果 bullet 有誤,回答
n繼續提問補充 - 如果 bullet 正確,回答
y入庫
進階擴展
批次教練
對 MISSING 列表一次處理:
# 未來可能的 API
coach --jd-id "abc123" --skills "all-missing"
對話歷史
保存教練對話,讓後續 round 更精準:
previous_responses = ["Round 1 回答", "Round 2 回答"]
question = generate_coaching_question(
skill,
previous_responses=previous_responses
)
素材品質評分
入庫後定期評估素材被使用次數和轉換率:
SELECT id, text,
array_length(used_in_jobs) as usage_count
FROM resume_chunks
WHERE created_from_jd IS NOT NULL
ORDER BY usage_count DESC
總結
| 環節 | 功能 |
|---|---|
| STAR 提問 | 結構化挖掘碎片記憶 |
| LLM 轉換 | 自然語言 → 履歷格式 |
| 信心度門檻 | 確保素材品質 |
| 即時入庫 | 建立長期資產 |
| 三層備案 | 處理「真的沒經驗」 |
教練循環把「你有經驗嗎」這個無效問題,變成一系列精準的 STAR 提問,最終產出可重用的履歷素材。
Career Knowledge Base 是一個本地優先的履歷知識庫系統,使用 Python + LanceDB + Voyage AI 建構。
- ← Previous
策略制定:從診斷到決策的關鍵一步 - Next →
混合搜尋:讓履歷素材無處遁形