用 AI Agent 打造咖啡萃取記錄器

用 AI Agent 打造咖啡萃取記錄器

Espresso 的變數太多:豆子、烘焙度、粉量、研磨度、萃取時間⋯⋯每個參數都會影響風味。想穩定萃取,就得記錄每次的參數,慢慢找到每支豆子的 sweet spot。 紙筆記了幾天就懶了,試過幾個 App 也都不順手。最後決定自己做一個。 用對話蓋出來的 整個開發過程是透過 OpenClaw(開源 AI Agent 框架)完成的。我沒打開 IDE,就是在對話框裡描述需求: 「單頁 HTML,localStorage 存資料,Chart.js 畫圖。」 「豆子名稱要能搜尋。」 「預設值帶入上一杯的參數。」 AI 生成程式碼、我測試、回報問題、它修。來回大約 30 分鐘,從空白檔案到部署上 NAS。 Placeholder 的坑 過程中卡最久的是預設值。需求很簡單:新增記錄時自動帶入上一杯的粉量、研磨度等參數,使用者只改有變動的欄位。 前幾版用 placeholder 顯示預設值。畫面上看得到數字,但 placeholder 只是提示文字,不是 input.value。留空送出時,存進去的是空值,不是畫面上顯示的數字。 來回修了三版才想通:別用 placeholder 模擬預設值,直接把值填進 input。看到什麼就存什麼,沒有歧義。 最佳參數怎麼算 儀表板有一個「各豆子最佳參數」的區塊。一開始是取所有記錄的平均值,但這樣失敗的杯次會拉低數據。 改成:找每支豆子評分最高的記錄,取那些記錄的平均水粉比、研磨度、萃取時間。邏輯很簡單,就是 filter + reduce,但語義上合理多了——你想參考的是最好的幾杯,不是所有杯的平均。 長什麼樣 記錄表單:填完按儲存,預設值自動帶入上一杯 最近 10 杯,每筆可編輯或刪除 儀表板:各豆子最佳參數、研磨度趨勢、評分分佈 功能 記錄:豆子、烘焙度、粉量、研磨度、萃取時間、出杯量、粉碗、評分、備註 豆子和粉碗都有搜尋(從歷史記錄建 autocomplete) 預設值自動帶入,選了歷史豆子會切換成該豆子上次的參數 時間快捷鍵:現在 / 5 分前 / 10 分前 / 30 分前 / 1 小時前 儀表板:研磨度趨勢、評分分佈、各豆子最佳參數 JSON 匯入匯出 深色主題,手機可用 技術上就是一個 HTML 檔,沒後端。 ...

March 23, 2026 · 1 分鐘 · Mark Lee
在 WSL 上跑 Qwen3-TTS Voice Clone:從 Fish Speech 到三代 TTS 的踩坑之旅

在 WSL 上跑 Qwen3-TTS Voice Clone:從 Fish Speech 到三代 TTS 的踩坑之旅

為什麼要自己跑 TTS? 市面上的 TTS API 不缺——ElevenLabs、OpenAI TTS、Azure Speech。但如果你想要的是用自己的聲音說話,而且不想每個月付錢、不想把錄音傳到別人的 server,那選擇就少很多了。 我的需求很簡單:讓我的 AI agent(跑在 OpenClaw 上)能用我的聲音回覆語音訊息。Agent 跑在 Oracle Cloud 的 ARM VPS 上,沒有 GPU。但家裡有一台 Windows 桌機,裝了 RTX 4070 Ti。 所以架構很明確:VPS 負責 agent 邏輯,Windows 桌機負責 GPU 推理,中間用 SSH tunnel 串起來。 聽起來簡單。實際上花了三代 TTS 模型、無數次 WSL 踩坑,才到今天穩定運作的狀態。 第一代:Fish Speech(2025 年底) Fish Speech 是最早嘗試的方案。它支援 voice cloning,品質不錯,社群也活躍。 部署在 WSL 上,port 8880,透過 autossh reverse tunnel 讓 VPS 能連到。一開始跑得還行,但遇到幾個問題: 模型更新頻繁,API 不太穩定 VRAM 吃得多,跟其他任務搶資源 後來有更好的選擇出現,就換了 Fish Speech 的功勞是:它驗證了整個架構是可行的——WoL 喚醒、WSL systemd、autossh tunnel、VPS 呼叫腳本這一整套 pipeline。後面換模型只需要改 server 端,其他都能重用。 ...

February 19, 2026 · 4 分鐘 · Mark Lee