所有節目›AI Engineer Europe 2026World's Fair 2026World's Fair 線上軌AI in HealthcareSoftware Factories
Vibe Engineering Effect Apps在 YouTube 看這一場

AI Engineer Europe 2026 · 工作坊 · 2026-05-07 · 103 分

帶模型從零寫 Effect 應用

Vibe Engineering Effect Apps · Michael Arnaldi,Effectful

Michael Arnaldi 在現場從空 repo 起手,把 Effect 原始碼放進專案讓模型自己讀,再用 AGENTS.md、lint 規則與 patterns 檔,一步步帶模型做出一支 to-do API。

關卡與 harness看原片 ↗

概要

  • 直接 clone 原始碼給模型Michael Arnaldi 認為寫程式用的模型是被訓練去讀寫程式碼,不是讀人類文件或沒見過的 MCP server,所以把 Effect 的 repo 直接放進專案,當成模型自己的程式碼來讀。
  • 模型不會持續學習Michael 說模型訓練完就固定,今天交代的事明天不會記得;能做的只是在固定大小的上下文視窗裡追加訊息,視窗越大也不一定越好,所以要在流程上補強。
  • 先研究、寫成 patterns 檔,再實作每要用一塊功能(HTTP API、SQL、測試),先請模型去 Effect repo 研究並存成 patterns 檔,再用 AGENTS.md 指過去。Michael 也不用 plan mode,改成先討論出 spec,再用 Ralph loop 一小塊一小塊做。
  • 模型犯的錯就寫成 lint 規則Michael 一邊看模型的產出,一邊把不喜歡的寫法禁掉,例如 as 型別斷言、用 SQL 型別參數代替驗證、用純字串當 ID,把它比喻成顧著一個拿刀亂跑的初階工程師。
  • GPT 與 Opus 各有脾氣Michael 現在多半用 GPT-5.4,原因之一是 Anthropic 限制了自己想用的工具環境;也提到 Opus 在 UI 上比 Codex 強,兩者在多數任務上差不多。
  • evals 與 workflows 是下一步Effect 團隊想每天跑 evals 檢查文件和範例的效果,也在考慮微調模型;時間不夠,沒有做到 workflows 與 cluster,只解釋了為什麼 AI 讓它們更重要。

原話

  • “there's no more knowledge that comes into the model every day”

    模型每天都不會有新知識進來

    ▶ 07:57
  • “The reality is you are basically appending messages onto a fixed-size array which is called the context window.”

    實際上就是把訊息一直追加到一個固定大小的陣列,那就叫上下文視窗

    ▶ 08:33
  • “our job should be to set up the repositories in ways that the models can act good on it”

    我們的工作應該是把 repo 整理成模型能做好事的樣子

    ▶ 48:48
  • “usually just ask the model why you did that, is there any alternative”

    看到怪的地方,通常就直接問模型為什麼那樣做、有沒有別的做法

    ▶ 1:23:54
  • “Why does this rule exist? Because the model did that.”

    為什麼有這條規則?因為模型真的這樣做過。這是借朋友的比喻:法規裡那些很具體的條文,背後都是有人真的做過那件事

    ▶ 1:31:01

延伸

  • Michael 說 Effect 的 workflows 與 cluster 還放在 unstable 的部分;這場沒有實作,只說明了概念。
  • Michael 提到團隊實驗過只給單一 execute 工具的 coding agent:模型不能直接改檔,只能寫 TypeScript 去執行。
  • Michael 認為 patterns 最好針對使用的模型生成:GPT 家族的 5.2、5.3、5.4 差不多,Opus、Sonnet、Haiku 也很像,所以可以做一個先問你用哪個模型、再調整內容的 CLI。

章節

點時碼直接跳到原片的那一段。

  1. 開場:什麼都沒準備Michael 說既然是 vibe engineering,就該從零開始,所以完全沒有事先準備,並問現場聽眾對 AI 工具與 Effect 的熟悉程度。
  2. 不再手寫程式Michael 說自己大約從「late this summer」起就不手寫程式,平常做的是 library 層級的底層程式碼;原本以為 AI 在那裡派不上用場,後來發現想錯了。
  3. 模型不會持續學習模型訓練完就固定,隔天不會記得今天的指示;上下文視窗只是不斷追加訊息的固定大小陣列,100 萬 tokens 的視窗不一定有幫助。
  4. 把原始碼放進專案寫程式用的模型是靠強化學習練出來的,擅長讀寫程式碼;放在 node_modules 或 git ignore 的目錄裡,模型都不太看,所以最有效的辦法是直接 clone repo。
  5. 目標與模型選擇空專案要做 vitest、有 OpenAPI 文件的 HTTP server 與型別安全的 client;Michael 用 GPT-5.4,最初用 Sonnet 4,並說開放權重模型落後前沿模型三到六個月。
  6. 專案初始化與 TSGO請模型建出 bun、vitest 與型別檢查的設定,裝上還沒正式釋出的 Effect v4 beta,並嘗試改用 TSGO 編譯器;這段花了不少時間處理套件與 VS Code 設定。
  7. 診斷全設成 error把 language service 的診斷等級全部改成 error,讓模型把它們當錯誤處理;也提到 effect.solutions 這個入門網站,但 Michael 覺得直接 clone repo 比較有效。
  8. subtree 與 AGENTS.md把 Effect repo 以 subtree 放進專案,開新 session 請模型寫 AGENTS.md,列出指令與 repo 位置,並禁止跑 watch 模式與 dev server。
  9. 用 lint 擋模型走捷徑Michael 的 accountability repo 禁止 as、any、unknown;結果禁掉 unknown 後模型改用 as never as X,所以乾脆禁掉 as。
  10. 規格驅動與 Ralph loop先請模型研究 HTTP API 並存成檔案;Michael 不用 plan mode,改成先討論 spec,再用 bash 迴圈每次只做一個小任務;另外提到只給單一 execute 工具的實驗。
  11. 整理 repo 是工程師的工作Michael 認為工程師的工作該是把 repo 整理到模型能做好事;接手舊專案時,先讓模型探索,再 clone 主要函式庫並產生 best practice 檔。
  12. 檢查 vitest 設定確認測試用的 runtime,發現 vitest 連 repos 底下的 Effect 測試也跑,加了忽略;模型為了讓測試通過去改測試,Michael 說這是典型錯誤。
  13. to-do API 計畫與儲存層先和模型討論 to-do API 的計畫並存成檔案;儲存改用 Effect 的 SQL 搭 SQLite,同樣先產生 patterns,讓人能自選要用 Effect 的哪些部分。
  14. Q&A:patterns 該怎麼提供聽眾問框架作者能否官方提供 patterns;Michael 說 AGENTS.md 並非真正的標準,對 GPT 和 Claude 的下指令方式也不同,並提到微調開源模型的想法。
  15. GPT 與 Opus 的脾氣GPT 會一直停下來問,但輸出不錯;Opus 愛走捷徑,放過一個 any 就到處是 any,所以 Michael 用上千行的 lint 檔管著。
  16. 自訂 lint 規則的例子禁止給 SQL 用型別參數、強制用品牌型別當 ID、禁止用 as 與建構子繞過驗證,要求把驗證放在 schema 的邊界。
  17. 為何轉用 OpenAIMichael 想用 OpenCode 和自己寫的 TypeScript 去接 AI SDK,Anthropic 的政策不允許,所以改用 OpenAI;UI 任務上 Opus 比 Codex 強。
  18. 檢視產出的程式看模型做的 SQL client 與 API,抓到重複的程式碼、純字串 ID 與 struct/class 的偏好問題,也提到正在試語意程式碼搜尋。
  19. 伺服器、測試與 API 文件模型補上 client、live handler、伺服器入口、測試與 OpenAPI 文件;Michael 說之後會要求改用 it.layer,並把資料庫檔加進 gitignore。
  20. 清理測試的壞 pattern模型寫了手動建 layer 又包 Effect.scoped 的多餘寫法;Michael 說看到怪的地方就問模型為什麼,並談測試資料庫用 transaction 回滾的做法。
  21. 測試 pattern 與 skills回顧目前流程,再請模型寫 testing 的 patterns;談 slash command 與 skills 的差別,以及 skills 塞太多會污染上下文。
  22. 具體規則與 patterns 驗證很具體的規則背後都是模型真的做過的事;聽眾問如何測試 patterns,Michael 認為可以標記哪些要執行、哪些只是參考檔案。
  23. evals 與微調Effect repo 打算每天跑 evals 並出報告;程式風格沒有絕對好壞,他們用人寫的範例與模型產出相比、由 LLM 打分,也在研究微調。
  24. 為何需要 workflows 與 cluster以註冊流程為例,寫資料庫再寄信沒有交易保證;Effect 的 workflows 建在 Effect Cluster 上,AI 讓流程變長,伺服器更容易在中途失敗。
  25. 結論:從空 repo 到可用 APIMichael 說講了一個多小時,從一個不懂 Effect 的空 repo 做出可用的 API,這也是工作坊「just clone the repo」的重點。

名詞

Effect
這場示範用的 TypeScript 函式庫,做法是把它的原始碼放進專案給模型讀
AGENTS.md
放在專案裡的指示檔,列出可用指令、Effect repo 的位置與 patterns 檔
patterns 檔
請模型研究 Effect repo 後存下來的做法整理,之後實作時當參考
Ralph loop
用簡單的 bash 迴圈,每次只讓模型做一個小任務就結束
Geoffrey Huntley
Ralph loops 的作者;Michael 說「拿刀在家裡亂跑的小孩」這個比喻出自 Geoffrey
OpenCode
Michael 這場用的 coding agent 環境,搭配 GPT-5.4
TSGO
Michael 想換上的 TypeScript 編譯器,用來做型別檢查
effect.solutions
Keith Langton 做的 Effect 入門網站,用 CLI 讓模型讀 Effect 內容
accountability
Michael 自己玩的 repo,放了大量禁止模型走捷徑的 lint 規則
Effect Cluster
讓流程在伺服器掛掉後換到別處繼續跑的叢集機制,Effect 的 workflows 建在它上面
Temporal
Michael 舉例的 workflow 方案,說過去 12 個月因為大家都在產品裡導入 AI 而更受關注

相關影片 同屬「關卡與 harness」