這份手冊記錄 2026-08-02~03 兩天的產出:專案搬遷獨立、四個「單點失敗炸掉整批」缺陷的修復、LLM 設定收攏,以及第一個 pipeline skill。含存放位置、範圍界定與使用方式。
權證小哥知識蒸餾線從 Gooaye 專案搬出成為獨立 repo,並把當日暴露的四個同型缺陷全數修掉、流程收斂成可重複執行的 skill。
起點是一個放量請求:把《哥有籌必爆》從 6 集試跑放大到全部 56 集。放量本身成功了——但過程中同一種缺陷在四個不同階段各爆一次,暴露出這條管線真正的弱點不在功能,而在錯誤處理的爆炸半徑。
當某個共通原因讓每一項都失敗時,逐項容錯的迴圈會忠實地把每一項都記成失敗、燒光重試額度——幾秒內整個佇列進入終態,需要人工把整份 manifest 復原。
| 防線 | 判定 | 行為 |
|---|---|---|
MAX_CONSECUTIVE_FAILURES | WARN | 連續 3 次一般失敗 → worker 自行結束,其餘維持 pending |
UNWEAVABLE_STATUSES | PASS | 終態集數不進擷圖佇列,不下載影片 |
MIN_TAIL_REMAINDER_SEC | PASS | 餘數 < 3 秒不補尾幀,避免整集作廢 |
DailyQuotaExceeded | FAIL | 額度用盡 → 攔在逐集容錯之前、乾淨結束,一集都不記失敗 |
gemini-3.1-flash-lite,每日 100 次呼叫上限採預約制。youtube_transcribe.py 有了唯一正本,含地端 model_size 簽名修正與迴歸測試。series 欄位與單支影片入口:支援非播放清單的其他系列影片。pytest --collect-only 實測;舊值 2,465 項(10-16)、1469 項,當時全綠;python -m pytest tests/ -q;本手冊產出當下為 310 項)。每道守衛皆做過反向驗證——拔掉修正確認測試轉紅、還原後再綠。手冊規模(2026-10-26):影片 57 集全數萃取、五來源(影片 769+教材 63+課程 142+PPA 訂閱 351+外部筆記 11)共 1,336 張規則卡 → 1,024 條唯一規則(904 條判斷規則+120 條基礎知識)、187 條跨來源/重複提及(mention_count≥2,舊值 138)、2,628 張幀圖、影片引文驗證通過 97%(746/769 張;全來源 1,336 張中 1,226 張通過)(2026-10-25:1,102 卡 → 870 規則、138 條重複;2026-10-13:1,080 卡 → 850 規則、137 條重複;2026-10-01:四來源 963 張規則卡 → 764 條唯一規則、120 條跨來源重複、97%;10-01 處置神器課程併入前:926 卡 → 736 規則、113 條跨來源重複;09-30 會員 17 集重萃前:863 卡 → 717 規則、83 條跨來源重複、96%)。(產出當下:40 集、653 卡 → 572 規則、49 條跨集重複、2,306 幀圖。)重點先講:本次沒有任何全域產出。所有東西都在專案內或該專案專屬的記憶目錄,不會自動套用到你的其他專案。
| 產出 | 檔案 / 位置 | 範圍 |
|---|---|---|
| 五階段管線程式碼 | D:\xiaoge_distill\scripts\xiaoge\(8 支) | 專案內 |
| 測試 | D:\xiaoge_distill\tests\unit\(310 項) | 專案內 |
| 手冊成品 | D:\xiaoge_distill\data\xiaoge\notes\(五篇 MD) | 專案內 |
| 專案指南 | CLAUDE.md、README.md、CHANGELOG.md | 專案內 |
| 設計與實作計劃 | docs\plans\(雙來源設計、實作計劃) | 專案內 |
| 解說頁 / 計劃頁 / 本手冊 | docs\*.html | 專案內 |
| pipeline skill | D:\xiaoge_distill\.claude\skills\YT影片線-pipeline\ | 專案內 · 只在本專案可用 |
| 專案記憶(2 則) | ~\.claude\projects\D--xiaoge-distill\memory\ | 此專案專屬 |
| PR #196 | Gooaye repo · merge 35982ac | 另一個 repo · 已進 master |
~\.claude\CLAUDE.md 與 ~\.claude\skills\ 本次完全沒動。/YT影片線-pipeline 放在專案的 .claude\skills\,只有在 D:\xiaoge_distill 開 session 時才會出現;記憶檔也是專案專屬。若哪天想讓某條經驗跨專案生效,要另外寫進全域 ~\.claude\CLAUDE.md。D--xiaoge-distill 並拆成兩則(環境與缺陷模式/決策與待辦),Gooaye 端只留一行指路。DailyQuotaExceeded 刻意不繼承 RuntimeError,因為呼叫端的逐項容錯多半寫 except Exception。兩個 except 的順序就是防線本身——順序寫反等於防線不存在。~\.claude\CLAUDE.md;目前只寫在本專案的 CLAUDE.md 與專案記憶裡。日常操作只需要記一個指令。其餘(守衛、額度、內容複驗)都是自動生效,不用手動介入。
gemini-3.1-flash-lite,不需手動指定。深色標記=本次有防線或設定變更的環節。
在 D:\xiaoge_distill 開 session,直接用 skill:
/YT影片線-pipeline https://www.youtube.com/watch?v=xxxxx
它會問系列名(如「兆華艾綸說」),然後跑完五階段並回報。若要補播放清單的新集數,不帶參數即可;只想看進度用 --status。
# 測試
python -m pytest tests/ -q
# 今日 LLM 額度還剩多少
./.venv/Scripts/python.exe -c "import sys; sys.path.insert(0,'scripts/xiaoge'); import llm_config as lc; print(lc.remaining(), '/', lc.DAILY_CALL_LIMIT)"
# 手冊規模
./.venv/Scripts/python.exe -c "import json,sys,collections; sys.path.insert(0,'scripts/xiaoge'); import paths; c=[x for f in paths.resolve('rule_cards').glob('*.json') for x in json.load(open(f,encoding='utf-8'))]; print(len(c),'卡 →',len(collections.Counter(x['rule_id'] for x in c)),'條規則')"
.env 需有 GOOGLE_API_KEY(萃取)與 GROQ_API_KEY(雲端轉錄)。缺 groq 只會降級成只用地端,不會中止。<使用者目錄>\gooaye-xiaoge 與分支 feat/xiaoge-knowledge 是搬遷安全網,待你確認新專案跑順後才刪。清除當下務必重掃 reparse point——git worktree remove 與 robocopy /MIR 都會穿透 junction 刪進目標。| 名稱 | 值 | 擋什麼 |
|---|---|---|
MAX_CONSECUTIVE_FAILURES | 3 | 環境故障燒光整個佇列的重試額度 |
MIN_TAIL_REMAINDER_SEC | 3 | 尾段取不到畫面害整集擷圖作廢 |
DAILY_CALL_LIMIT | 100 | LLM 每日呼叫超支 |
QUOTE_VERIFY_THRESHOLD | 0.8 | ≥ 此值標記引文已驗證 |
QUOTE_REJECT_THRESHOLD | 0.5 | < 此值整張卡丟棄(幻覺) |
QUOTE_MIN_ANCHOR | 8 | 0.5–0.8 之間的引文,命中處要有這麼多字與逐字稿連續相同才保留(2026-09-25) |
/教材線-pipeline:把 PDF 教材走同樣流程。計劃已定案於 docs\plans\2026-08-02-pipeline-implementation-plan.md。