前言

最近,我讀了 Claude Code 開發者 Felix Rieseberg 的文章〈給與 AI 模型共事的人類的「志存高遠」教學〉。受到他的想法啟發,所以想稍微引用並介紹一下。

文章提到,Claude 最近甚至還幫忙發現了新的行星。
但即便如此,我們大多數人仍然還停留在像「日本最高的山是哪一座?」這種很單純的用法。

173B2B13-C4CB-474C-B1AF-56F80126031E_4_5005_c.jpeg

文章指出,原因其實在於我們使用者本身。
「把自己的極限誤認為是 LLM 的極限,對自己不擅長的事就不去碰」 !:helmet_with_cross::point_up_tone2:

也因此,在開始做任何事情時,不要先武斷地認為做不到,而是試著和 LLM 一起挑戰看看,我覺得這樣會比較好。

把文章的訊息濃縮成一句話,就是:「對軟體開發要有野心」。

於是我決定,不再自己一個個做應用程式,
而是轉向去做「能夠產生應用程式的機制」。
這篇文章會介紹我目前正在打造的軟體工廠。

C91F2B24-CC60-48D5-AF16-A00A6712A3B9_1_105_c.jpeg

什麼是軟體工廠

簡單來說,就是把想法變成工單丟進去,系統就會幫你推進應用程式開發的機制。

這不是什麼新的概念!:point_up_tone1:
幾年前就已經有像 Devin 這樣的 SaaS,現在也能在 Codex cloud、Claude Code 的雲端工作階段(舊稱 Web)、GitHub Copilot coding agent 中做類似的事情。也有很多公司是自己實作後在內部部署使用。

5EDD7681-9DA6-4C35-88B0-E99187828A3A.jpeg

不過因為各家都是各自實作,所以術語還沒有統一。
因此,正在嘗試建立共通語言的人是 Matt Pocock。
Matt 是以「Total TypeScript」聞名的 TypeScript 教育者,最近也以「AI Hero」教人如何運用 AI 開發。他同時也是超過 30 萬星的代理技能集「mattpocock/skills」作者。

在 2026 年 10 月 21 日,他把用來設計軟體工廠的術語集整理成技能,並以下一個 PR 的形式提出(以下稱為「術語集」)。

術語集把軟體工廠定義為:

以工單、PR 與排程作為輸入,產出已合併程式碼的代理系統。它運作在使用者選定的遠端基礎架構上。

只聽這樣,可能會覺得「那直接用 Claude Code 不就好了嗎?」
其實工廠裡面也可以用 Claude Code。差別在於運作方式!:point_up_tone1:

在術語集的定義中,一次執行會在不等待人工介入的情況下結束。
當人更新工單或 PR 時,就會觸發下一次執行。執行用的機器是一次性的,上一次執行的記憶只會留在工單追蹤系統、Git 主機、協調器裡。
像 Codex cloud 或 Claude Code 的雲端工作階段這類產品,在術語集裡也只是「執行器」的選項之一,前提是你要自己挑選並組合各個零件。

人主要負責的工作,就是寫工單和審查。
不需要在自己的電腦前一直對話,工單會在你自己選定的遠端基礎架構上被實作出來。

忙しさと自動化の対比.png

這個 PR 已在 10 月 31 日合併,成為 software-factory 技能,但它還放在 in-progress 資料夾裡,代表仍屬於未完成狀態。接下來先整理術語,再看看自己打造軟體工廠時應該注意什麼!:relaxed::point_up_tone1:

軟體工廠的構成零件

術語集把構成零件分成兩組:「任務與執行」以及「服務」。

「任務與執行」 是用來描述工廠裡有哪些東西、它們怎麼運作的群組。
「服務」 則是工廠連接的外部零件群組,會為每個部分選擇產品並套用。

各零件的詳細定義如下。

任務與執行

用語含意任務工廠要處理的工作種類。定義一次,可反覆執行。像是審查、調查、實作、棘輪(逐步提高檢查標準的作業)等。對象可以是工單、PR 或整個程式碼庫觸發啟動執行的契機。工單追蹤器或 Git 主機上的變更、協調器的時鐘、另一個執行執行單一任務在一台執行器上跑一次的結果。內部視為黑箱,不等待人工介入就結束執行執行時所使用的一次性機器。執行結束後不會留下任何東西### 服務

用語角色工單追蹤器工單存放處,也是人與工廠的接點。人會寫工單請求工作,並透過留言與代理互動。當人變更工單時,會觸發執行工單來源工廠外部用來產生工單的東西。像是回饋按鈕、監控、錯誤追蹤器、收件匣等Git 主機分支、PR、審查的存放處協調器接收觸發條件,在執行器上啟動執行,並記錄各次執行是待命中、執行中還是已結束可觀測性基礎設施執行器送出日誌、追蹤與狀態的地方,供人查看執行內容。很多時候只靠執行器或協調器的產品就夠了,不一定需要

零件之間的連接

當人把工單寫到工單追蹤器裡,它就會成為觸發條件,協調器會在執行器上執行實作任務。

執行完成後會在 Git 主機上建立草稿 PR,該 PR 又會觸發自動審查任務的執行。若審查發現問題,就會再啟動修正任務的執行。

25092EBA-049F-4A67-853B-48374C46F465.png

執行的串接方式有兩種。
一種是由協調器直接啟動下一次執行;另一種是執行去改寫工單或 PR,再以那些變更作為觸發條件。

組合範例

術語集中列出了 Matt 舉出的三種組合。

欄位全部 GitHub Linear 用來管理工單自製追蹤器工單追蹤器 GitHub Issues Linear 自製應用程式工單來源回饋按鈕回饋按鈕、監控回饋按鈕、監控 Git 主機 GitHub GitHub GitHub 協調器 GitHub Actions 自有伺服器與資料庫自製應用程式執行器 Actions 的執行器 Actions、E2B、Daytona、VPS 其一自製應用程式,或沙箱可觀測性基礎設施無(Actions 的執行頁面就夠了)LLM 追蹤基礎設施自製應用程式全都 GitHub 的配置中,GitHub Actions 同時扮演了協調器、執行器與可觀測性基礎設施三種角色。

服務買現成,任務自己做

Matt 的方針是「服務買現成,任務自己做」。
因為服務是通用零件,而工廠各自的設計則體現在任務上。

工單追蹤器也建議直接使用現成產品。
原因是它們穩定、大家也比較熟悉,而且容易邀請外部使用者加入。

自製工廠介紹

我根據術語集實際打造了一個工廠,這裡來介紹一下。
只要在聊天中提出困擾,經過設計確認之後,就會收到一個可以直接操作的 mock 應用程式。

C84DEC21-F7B2-4A6B-8023-E1207049547A.png

構成要素

foundry-arch.png

零件自製工廠中的分工工單追蹤器 GitHub Issues。標籤 foundry 的工單會成為自動化對象工單來源入口網站的聊天。由 Bedrock 上的 Claude 負責訪談。也可以透過 Amazon Transcribe 用語音諮詢Git 主機GitHub協調器GitHub Actions(agent-design、agent-build、ci、preview 等)執行器運行在 Actions 的一次性 Ubuntu 上的 Claude Code(claude-code-action,Bedrock 東京區域)可觀測性基礎設施入口網站只負責顯示進度這是把前面「全部 GitHub」的配置,再加上聊天式工單來源後的版本。

狀態只保留在 GitHub 裡,所以沒有資料庫;入口網站上的進度顯示,也都是每次根據 Issue、PR、檢查與工作流程執行的狀態即時計算出來的。

儲存庫是一個單一 monorepo。apps/ 放入口網站和生成出來的應用程式,packages/ 放可在各應用程式之間共用的元件。工作流程放在 .github/workflows/,要給 Claude Code 的技能則放在 .claude/skills/。

基礎設施建在 AWS 上,入口網站和應用程式透過 S3 與 CloudFront 發佈,入口網站的 API 則是 Lambda。Actions 裡不放長期存取金鑰,而是透過 GitHub OIDC 來承擔角色,Bedrock 的 Claude 也用同一個角色呼叫。

任務流程

在使用者提出需求時,基本上會全自動進行,但在設計確認與公開確認這兩個步驟上,會有人介入判斷。

  1. 在入口網站的聊天中,Claude 會先進行訪談。按下「用這個內容提出需求」後,GitHub App 會建立一個帶有標籤 foundry 的 Issue。
  2. 以該標籤作為觸發條件,agent-design 會啟動,Claude Code 會製作規格書與各畫面的 HTML,並建立設計 PR。PR 會自動留言預覽網址。
  3. 人員確認預覽後,按下「用這個設計繼續」就會合併設計 PR(人工判斷 1)。如果想修改,也可以先在 PR 留言,再重新執行 agent-design,即可重做。
  4. 以設計 PR 的合併作為觸發條件,agent-build 會啟動,根據已核准的設計製作 Next.js mock,並建立實作 PR。
  5. CI 通過後,就可以按下「公開」。按下後實作 PR 會被合併(人工判斷 2),Issue 會被關閉,應用程式也會正式公開。預覽與工作分支都會自動刪除。

B95C93CE-C5B6-4C67-A999-F85A9F1CCBC9.png

重點是煞車

把工廠做出來、跑起來,本身不算難。
真正困難的是,讓產出的成果處於可被信任的狀態,而這就需要煞車。

術語集中有一項關於設計工廠時的建議,叫做「Start slow(慢慢開始)」。其中把觸發器比喻為油門,把自動檢查、自動審查與人工審查比喻為三道煞車,建議一開始先把煞車踩穩,再慢慢推進。Matt 也在 X 的貼文裡寫到,只有先用煞車限制代理、提升輸出品質,才會真正變得可信。

這次的工廠裡,三道煞車我放了兩道。第一道是自動檢查:在 CI 中強制型別檢查、lint 和 build,沒通過就不能按「公開」。
第二道是人工審查:在任務流程中的兩次判斷就是這個。不過,人確認的不是程式碼,而是預覽。

培育工廠

工廠做出來之後,接下來就是改善與擴充。若以工廠來比喻,開發者就是那個「廠長」。

2E62AA49-1A91-4637-89F7-64C1863F082B.png

廠長的工作主要有三件:

  1. 增加製程(任務)
  2. 修改手冊(技能)
  3. 增加零件(元件)

1. 增加製程(任務):從痛點開始

術語集作者 Matt 建議,不要一開始就追求完美,而是每當實務上出現痛點時,就逐步增加新的製程。很多工廠都是從一個任務開始,隨著問題出現,再把新的任務接上去而逐漸成長。以下是依照痛點內容增加任務的例子。

  • 如果人工審查一直重複提出同樣的意見,就可以加上這次沒有放進來的第三道煞車,也就是在建立 PR 時執行的「自動審查任務」。
  • 如果工廠本身的執行會失敗,就可以加上把錯誤日誌轉成工單,甚至連修正 PR 都一起建立的「修復任務」。因為這是會改寫工廠自身的任務,所以要把廠長審查設為必須。
  • 如果程式碼庫的混亂開始變明顯,就可以加上每天晚上從最近的變更中找出可重構候選項並轉成工單的「架構任務」。

task-pipeline.png

2. 修改手冊(技能):把回饋納入進來

在日常開發中收到的審查意見,會被寫進手冊,納入工廠。這次用作執行器的 Claude Code 會在執行時讀取技能,因此只要修改技能,工廠的準確度就會跟著提升。

這種改善也會讓工廠自己幫忙做。工廠會收集 PR 留言與手動修正的內容,並以 PR 形式提出技能修正建議,由廠長審查後再合併。

術語集任務範例中的「回顧任務(Retro)」就是這個意思。它會以「每合併 10 個 PR 做一次」之類的週期,分析日誌與工單,並建立修正工廠自身指令的 PR。

factory-growth.png

3. 增加零件(元件):擴大可製作的範圍

生成出來的應用程式都會放在同一個 monorepo 的 apps/ 裡,因此 packages/ 裡的共用元件都能被所有應用程式使用。

共用元件越多,工廠能做出的應用程式範圍也就越廣。只要修改共用元件,所有使用它的應用程式都會一起套用到修正。

monorepo-structure.png

總結

Felix 的文章最後以這段話作結:

自我效能感並不是新問題,但在今天它有了更大的意義。在能力每隔幾週就會大幅躍升的世界裡,我們需要技術來實現那些過去從未想過、也從未相信可能做到的事情。

我認為,軟體工廠也是這類技術之一。
不妨先暫時放下逐一打造應用程式的手,先從一個任務開始,試著把一座工廠跑起來。


原文出處:https://qiita.com/Syoitu/items/9364a0a175893bb15219


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
boluoji
📝20   💬3   ❤️6
389
🥈
站長阿川
📝5   💬2   ❤️1
213
🥉
mike
1
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登