第二階段的目標在第一天就提到:讓這些資料變成教練看得懂的東西。
又一個十天過去,我們完成了—課表進到系統、助教有知識底子、算出達成率、紀錄當下狀態、提供週報傳送、回答有邊界規則。
今天要來驗收!

四個來源,格式完全不同:Garmin 給 JSON、體重機廣播 13 bytes、Notion 是巢狀 block、教練課表是 LINE 記事本裡的圖片。
大部分先變成訓練紀錄(coach/logs/*.md),再由 parse_logs.py 轉成 sessions.json 和 weights.json。
只有負荷曲線例外:TRIMP 要的是每筆活動的平均心率和時長,那是紀錄裡沒有的欄位,所以 trimp.py 直接去打 Garmin API。
那份 8/25 的訓練紀錄有 41 行——地點時間、暖身分圈、主課表、單圈明細、收操、備註分析、下次調整建議。
而「跑到第三趟覺得吃不消」這件事,41 行裡一行都沒有。
備註寫的是:
縮短單組距離(1600m → 1000/800m)換來快 6–7 秒/400m 的配速,是合理的區塊推進。
一個從數字反推出來的解釋,而且方向是反的—那不是計畫中的推進,是當下撐不住。
9/3 跑 1B 也一樣,紀錄裡沒有。
兩件事都是後來自己主動紀錄,才補進去的。
上課的時候直接開手機給他看那份 8/24–8/30 的週報。
教練看完,講了兩件事。
第一件:8/25 那天課表開 1000m×5~6,我跑到第三趟吃不消、後三趟自己改成 800m—他說這樣調整沒問題。
Day 16 才幫它做了 自述 欄位,Day 18 把它印在報告上,如果沒有那一行,教練看到的只會是「趟數 5/5、配速 5/5」,他不會知道有什麼好評論的。
第二件,是我沒預料到的:
下次想嘗試 1A 速度的時候,先用體感判斷這個速度能不能跑完預定的距離。
如果不行,維持一樣的距離,把速度降下來。
8/25 那天我做的取捨是:保住配速,砍掉距離。
五組全部落在 1A 四區帶內(1:37.6 / 1:37.6 / 1:37.9 / 1:37.9 / 1:34.4),報告上寫著「達標」,趟數 5/5、配速 5/5。兩個數字都在目標內。
而教練要的優先序是相反的:距離 > 速度。
跑不動就把速度降下來,但距離要跑完。
所以那天正確的做法應該是五趟 1000m 全部跑完,配速掉到 1B 也沒關係—那在我的報告上會變成「配速對 1A 0/5」,一個看起來很難看的數字。
我的儀表板會把那個判斷評為失敗。
Day 15 那篇的結論是「達成率至少要兩個數字」—對 1A 一個、對當天實際跑的那一組一個。
現在看,那還是不夠。因為那兩個數字都在講配速,而課表其實有兩個可以妥協的維度:
| 8/25 我的選擇 | 教練說的 | |
|---|---|---|
| 配速 | 守住 | 可以放掉 |
| 距離 | 砍掉 | 要守住 |
報告只把「守住配速」算成達標,因為那是我寫程式時預設的優先序。 而那個預設從來沒有人跟教練確認過—是自己預設的。
① 教練其實看不到儀表板。
整個第二階段在做「給教練看的東西」,而他唯一看得到的是那個 HTML 檔。儀表板跑在 localhost:5173,沒有部署—上課現場我拿的是手機裡的檔案,不是網址。
② 重訓不在負荷曲線裡。
Day 17 講過,結構性的:沒戴錶就沒有心率。而 Garmin 官方的 Training Load 也是同一個邊界。這一週五天有訓練,兩天是重訓,所以「總負荷 TRIMP」涵蓋的是五天裡的三天。
③ 週報把重訓那天的 TRIMP 顯示成 0—這項今天修掉了。
0 的意思是做了但負荷為零,正確的意思應該是「這個模型看不到」,Day 18 時有提及這個問題。
現在那兩天顯示 —,統計卡也把分母標出來:「總負荷 TRIMP(3/5 天)」,而不是讓一個看起來涵蓋整週的數字站在那裡。底下補充了:
本週 5 天有訓練,其中 2 天算不進去(重訓沒戴錶)—
那幾天標的是「—」不是 0,0 代表沒練,「—」代表這個模型看不到。
五項裡只有這項當場改得動,其他四項都不是改程式能解決的。
④ 教練課表還是人工搬運。
Day 13 提到這是目前還要人工搬運的一段,二十天後仍然是這個情況,存圖、轉傳到 Telegram,這兩步沒有自動化的可能,因為課表在 LINE 記事本裡。
回頭看,第二階段每一篇的錯誤形狀都一樣。
| Day | 我以為 | 實際 |
|---|---|---|
| 14 | 餵好資料就能有好助教 | 輸出的可信度上限,就是輸入的可信度 |
| 15 | 達成率是算出來的 | 先要決定用什麼標準 |
| 16 | 把話存進 markdown 就夠了 | 結構化那層還是沒有欄位 |
| 17 | 資料不夠以為要再等 | 資料一直都在,是沒主動使用 |
| 18 | 週報就是儀表板多開一頁 | 對方打不開網址且那頁下週會變成下週 |
| 19 | 加一句免責聲明就安全 | 它會一邊聲明,一邊給你瞎編的數字 |
我以的事實,其實都只是我的預設
今天教練的回應也是同一件事,差別在於,前面幾次都是我自己撞到才發現,這次是有人看了我做的內容,然後給了回饋。
Day 1 我們提及:
▎ AI 取代不了能一下就看出跑步姿勢有沒有問題的教練,這個專案做的是橋樑。
資料管線完工,橋樑也搭起來,接下來要處理的是過去的比賽—那些完賽後保存下來的檔案。
明天開始講全馬復盤:分段配速、心率漂移、撞牆點,素材是過去跑過的全馬資料。