當自動雙語系統默默死了一整個夏天:一次深夜的部落格 CI/CD 與 LLM 健檢全紀錄

沒錯,我整個夏天都沒有更新。 從六月中開始,Google 實習、三篇頂會論文、產學合作、再加上準備碩士畢業找工作,幾座大山全部疊在一起,我直接進入了長達四個月的自媒體冬眠期(或者該說夏眠)。 直到前幾天國慶連假,我下定決心要重啟部落格,開啟了全新的個人作品集紀錄(Day 1 與 Day 2 的 Spark on K8s 系列)。當我寫完繁體中文文章、滿心歡喜地 git push 上去,期待著五月底那篇全站自動雙語化實踐的大功臣自動幫我把中文翻成英文時,我點開英文介面一看—— 文章根本沒有出現,整個英文版像被時間凍結在七月一樣。 更詭異的是,GitHub Actions 上的工作流程顯示著一排無辜而刺眼的綠色打勾(✓)。我以為 1010 的文章只是「正在排隊翻譯」,但事實證明,我的自動化系統早已在背後「無聲全滅」。 趁著深夜,我對整個網站做了一次徹底的大健檢,結果抓出了一連串教科書等級的 CI/CD、LLM 生命週期與權限陷阱。這篇文就是這場踩坑之旅的完整復盤。 陷阱一:被 try-except 吞掉的 402(CI 的假綠燈) 五月時,我寫了一支 auto_translate.py 腳本,透過 GitHub Actions 在每次 push 時自動呼叫 Gemini API 翻譯沒有 .md 對應檔的 .zh-tw.md。 這次當我發現文章沒有被翻譯時,我第一時間去翻 GitHub Actions 的 Run Log,赫然看見這段報錯: Translating: content/posts/261010_2318.zh-tw.md -> Error translating: 402 RESOURCE_EXHAUSTED. Your prepayment credits are depleted. Please go to AI Studio... Translating: content/posts/260612_1625.zh-tw.md -> Error translating: 402 RESOURCE_EXHAUSTED... Done. Translated 0 files. 原來我绑定的 Gemini API 預付額度早在夏天就見底了! ...

October 10, 2026 · 3 分鐘 · datafox & 柯宥圻 (Yuchi Ko)

用母語寫作,讓 AI 帶我的文章走向世界:全站自動雙語化實踐

在建立這個個人網站的過程中,我一直有一個兩難:我希望能用自己最熟悉、最有溫度的母語(繁體中文)來記錄與創作,但同時,我也渴望與世界接軌,讓更多英文母語者或是對我的技術文章感興趣的國際讀者,有機會看到這些內容的潛力。 此外,從技術部落格的經營角度來看,雙語內容對於搜尋引擎優化(SEO)也有著顯著的幫助,能夠為網站帶來更廣泛的自然流量。 為了解決這個問題,我沒有選擇花費大量時間手動翻譯,也沒有強迫自己改變寫作語言,而是決定利用 AI 的力量來自動化這個流程。 專注於創作,把翻譯交給 AI 我最近在網站上實作了一套基於 GitHub Actions 與 Gemini API 的自動化翻譯工作流: 維持原本的寫作習慣:我只需要專注於用中文撰寫 Markdown 文章。 自動觸發翻譯:每當我把新文章 push 到 GitHub 上,GitHub Action 就會在背景自動執行 Python 腳本。 Gemini 接手處理:腳本會掃描尚未有英文版本的文章,呼叫 gemini-2.5-flash 模型,自動將內文精準翻譯成流暢的英文。 自動更新網站:翻譯完成後,腳本會自動把內容包裝成中英文切換的 HTML 區塊,並將修改直接 commit 回 repository。 現在,你在這篇文章(以及網站上的其他文章)上方,應該能看到一個「🌐 切換為英文 (Switch to English)」的按鈕。這一切都是自動發生的,我完全不需要介入。 這樣一來,我不僅保留了寫作的純粹與樂趣,也同時賦予了這個網站觸及全球讀者的能力。 未來的計畫:走向更現代化的架構 雖然目前的做法已經能很好地滿足「專注創作+自動翻譯」的需求,但我知道這個網站還有進步的空間。 為了提供更好的閱讀體驗與效能,我之後會繼續嘗試將網站架構遷移到更輕量化、載入速度更快的 Astro.js,並結合 Astro 原生的地區適應(i18n / Localization)功能,讓雙語切換不僅僅是內文的隱藏與顯示,而是從網址結構、Metadata 到介面語系都能完美適配的現代化架構。 世界很大,語言不該是我們分享知識的障礙。接下來,就讓 AI 繼續幫我把這些文字,翻譯給更多需要的人吧!

May 29, 2026 · 1 分鐘 · datafox & 柯宥圻 (Yuchi Ko)

讓網站自己更新:用 GitHub Actions + Gemini 做週報自動化

為什麼想做這件事 靜態網頁有一個很常見的誤解,就是「靜態」代表死的、不能動的。但其實搭配 CI/CD 之後,它可以做到很多人沒想到的事情。 我想做一件事:讓這個網站的某個欄位,每個禮拜自動更新,不需要我手動寫任何東西。我的動機有兩個: 第一個是純粹想測試 GitHub Pages 這類靜態部署在自動化上能走多遠。從爬資料、呼叫 LLM、到最後 commit 進 repo 觸發部署,整條鏈可以完全在 GitHub Actions 裡完成,不需要任何後端伺服器。這件事本身就很有趣。 第二個是實用性:GitHub Trending 是我覺得目前還沒有被充分利用的資訊源。每週跑一次 top 15,用關鍵字篩掉不相關的,剩下的讓 LLM 幫我整理摘要,然後自動發布到網站上。這樣我不用每週主動去追,資訊會自己跑到我的網站來。 技術細節 起點是找到一個乾淨的 RSS 來源。GitHub 官方沒有提供 Trending 的 RSS,但有人做了:mshibanami/GitHubTrendingRSS,每天自動更新,週報的 URL 格式長這樣: h t t p s : / / m s h i b a n a m i . g i t h u b . i o / G i t H u b T r e n d i n g R S S / w e e k l y / a l l . x m l 有了 RSS 之後,pipeline 的結構就很清楚了: ...

May 2, 2026 · 1 分鐘 · datafox & 柯宥圻 (Yuchi Ko)