
價格昂貴的 AI agent 開發系統已經是潮流,不想花這麼多錢?只要幾步起手式,就可以讓 ChatGPT 這種 AI Chat 工具升級成複雜系統開發工具!除了便宜外,這種比較慢的 AI 輔助開發,對想學程式開發的人來說效果絕佳。
本文要解決的是「系統開發」,「就是寫程式嘛!」有人可能會這麼說。嗯,對也不對。對的部分,系統確實是程式組成的。不對的部分,「寫程式」與「系統開發」的差別就像「自彈自唱」跟「指揮交響樂團」,自彈自唱只要按對和絃,而交響樂團卻要搞定樂器與樂器之間、聲部與聲部之間協作的複雜問題。
比如要做個部落格網站,有:認證管理、會員管理、內容管理、資料庫管理、SEO、串接社群網站、備份、網路安全…,有的自己寫,有的導入既有程式庫(別人寫好的半成品),最難的是這些由不同人開發的不同功能最後可以協作不出錯。
搞定系統最複雜的協作,最好把 AI 導入工程師常用的 IDE(整合開發環境),你看到的 AI 都看得到,包括程式碼、運作成功或失敗、失敗原因是什麼…,它還可以自己操作。
但 IDE 要花錢串接,價格上無封頂,我曾花掉 USD$30/日(約 NTD$1000),這不是把賺的都給大模型公司了嗎?接案的話這就是成本,但如果你在公司上班領死薪水,不可能每天為公司貢獻 1000 塊吧?
相較之下,對話式 AI 機器人,如 ChatGPT、Claude 訂閱 Pro 也僅 USD$20/月,雖然沒那麼方便,確實經濟多了。
你可以舉一反三把本文的方法使用在所有「系統性」的事物,例如寫動輒百頁的論文、書、政府科專補助計劃、多集戲劇劇本… 上。
本文目錄
AI Chat 的限制
現在的 AI 對話機器人也有改善,原先流程是你去 Copy & Paste 到 IDE,執行後把錯誤告訴它,它再猜問題是什麼,這很麻煩。而每次修改就重新生成,速度慢不說,很快就把額度用完了,還可能越改越錯。
還好最近 Claude 領先推出了「Artifacts」,ChatGPT 緊接也推出「Canvas」,現在它們可以在河流般前進的對話中持續修改同一個檔案了,就像你和它站在白板前討論一樣,雖不及 IDE,已經比以前好多了。
但它們還是有限制:
- 對話長度有限:跟它對話 10 句,第 11 句它會送出「前面的 10 句 + 最新的 1 句」等於送出了 11 句話加上它的大篇回答,越多輪對話,送出內容成倍增加,很快就把本日額度用光光,解決方法是把一段對話切成多段,但讓每段能連戲。
- 看不到全局:一次說一句話,要它從幾句話瞭解你的系統太難了。這就要利用「Project」功能,例如 Claude 的 Project 有「Project Instruction」和「Project Knowledge」的功能,就可以跟聊天機器人做更深的溝通了。
本文是以 Claude 為例的系統開發設定,ChatGPT 也大同小異。
如果只要生成應用題那樣的短答或寫短文,就不用這麼麻煩。但要讓 AI 有系統解決能力,才能幫你增加生產力。
Project Instruction

我會把下面這樣的 Project Instruction 寫在這個欄位
- 我把相關文件放在 Project knowledge 中,回覆前請先看是否有既有的內容避免重複。
- 因為 AI 會根據你的問句直接回答,完全不看提供的文件,導致跟你的規劃脫節
- 註解請用繁體中文,避免中國用語。
- AI 的訓練素材絕大部分是英文,及簡中,一不小心就會講「普通話」,跟臺灣差異很大,容易誤會。
- 產生程式碼前,請說明程式的路徑。
- 你的專案裡會有很多檔案夾,例如
project_a/app/routes/main.py
,不先說,AI 會生成一堆程式碼,卻不知道這段程式碼要貼在哪個檔案裡,你問它又多耗費一輪對話。
- 你的專案裡會有很多檔案夾,例如
- 要增/刪時請明示。
- 有時候它會要你增加,卻直接產出一段程式碼給了一個沒看過的新名字,很疑惑「這要放在哪裡?」,加上這句,它會說「新增檔案xxx」。
這提示在整個專案都有效,就把「希望你隨時注意」的內容寫在這裡,就不用每輪對話提示一次了。
對 Google Gemini 沒用,因為它根據問它的語言回答,程式碼以英文為主,就算內含中文詢問,也常常回覆英文,而且沒辦法叫它一律講中文。這種小地方令人覺得 Google 雖是 AI 先行者,但本輪 AI 爭霸它真輸了。
Project Knowledge
如果你用過 NotebookLM,就知道一個計劃一定有很多文件,這叫做「語境」或「前後文」(Context),如果你的部門有個新人剛加入專案,他得要具備一些相關知識就是了。你就把 AI 當新加入的同事,給它一堆文件讀,「等下開會別問白癡的話啊!」,因為很多菜鳥問的都寫在文件裡了啊!
在這裡我會放三類文件:1)結構性系統需求文件;2)專案檔案,包括檔案本身及檔案樹。
結構性系統需求文件
請參考先前的文章《生成式 AI 精準生成術 結構性 PROMPT》,你可以想像一個系統用心智圖類似的架構畫出樹狀圖,在一個檔案裡把所有計劃及想法都講明,任何人讀完就不會狀況外。
生成式 AI 很聰明,給它多數檔案它可以「大致懂」,但如果你希望它「完全懂」,建議用 YAML 格式,理由也寫在《生成式 AI 精準生成術 結構性 PROMPT》裡了。
叫 AI 生成劇本
你會不會想「既然都叫 AI 做,為什麼不叫它直接寫程式呢」?
系統常會變得很複雜,有很多檔案你根本看不懂。AI 常會花時間和每日額度生成,結果是錯的,因為它一開始就沒搞清楚目標,但你看不懂不可能在生成過程中糾正它啊!
所以,叫它寫需求文件就像寫劇本一樣,至少這份文件你看得懂可以糾錯。
王家衛不用劇本,也只有他能這樣拍片,大多數導演都有劇本。
其次,當你有清楚的需求指令,它的智力感覺會提升,它會問你很多問題或提出不錯的建議,所以需求是合作產出的。
叫 AI 寫,就跟它花一次對話時間聊一聊,重點是可以根據它說的糾錯,最後說「請把我們剛才的對話總結成 rfp.yaml」等於把剛才的對話壓縮成一個檔案,只要這個檔案沒變,它就會一直朝目標前進。
如果你不想懂太多,這樣就夠了。但 YAML 檔的特色就是人機都易讀,你如果理解,更知道它產出的內容對不對,有興趣可以讀下段進階課程,沒興趣的話,跳過也無妨,或許以後玩一陣子再來查詢。
進階課程:YAML 是什麼
我請 Gemini 整理 YAML 的寫法(它搞不定專案,簡單任務沒問題),它其實不難。
# 註解:以 # 開頭
# 純量值:
name: Alice
age: 30
is_student: false
pi: 3.14159
# 映射:
person:
name: Bob
age: 25
address:
street: Elm Street
city: Anytown
zipcode: 12345
# 列表:
fruits:
- apple
- banana
- orange
# 日期和時間:
created_at: 2023-11-24T12:34:56Z
# 塊字面量:
multiline_string: |
這是一個多行字串。
它可以包含換行符。
# 流式字面量:
singleline_string: >
這是一個單行字串。儘管寫在多行,但會被摺疊為一行。
# 字典中的列表:
hobbies:
- reading
- cooking
- traveling
# 列表中的映射:
pets:
- name: Fluffy
type: cat
- name: Fido
type: dog
# 使用引號:
quoted_string: "This is a \"quoted\" string"
# null 值:
deleted: null
# 錨點與引用:
&anchor
name: Alice
age: 30
person1: *anchor
person2: *anchor
YAML還是很亂?我解釋一下:
YAML 中所有的描述都是「鍵值對」(key-value pair):
鍵 Key: 值value,例如「姓名:王小明」
「姓名」是鍵,「王小明」是它值,用冒號分隔。
如果有 10 個姓名,整理成表格,就是「姓名」欄位有王小明、李小華、黃小虎…,所以你可以把「鍵」當作表格的表頭第一列「標題列」,YAML 讓每列都帶表頭,為了讓人不誤會想盡辦法。
值就是表格裡填的內容,通常一格填一個內容,但常常一格填多個內容的,例如:「電話:0987654321、0987654322」,誰說一個人只能有一個電話?那多個值如何呈現呢?上例中很多亂七八糟的呈現,多數是告訴你如何花式安排多個值。
如果鍵值對的值是個鍵值對(繞口令),像俄羅斯套娃一樣一層套一層。例如:
- 「地址 : 11111 臺北市中正路1號」這是一個鍵配一個值;
- 「地址 : [街道 : 中正路1號, 城市 : 臺北市, 郵遞區號 : 11111]」,這是鍵配了一個「容器」當作值,容器裡裝了 3 個鍵值對。
這個套娃還可以有下一層、下下一層,叫做「巢狀」,可想而知,下一層的功能是解釋上一層,就是把一個主題分解成好幾組,每組再拆成號機組,用來細細詳述。
YAML 可以系統性告訴 AI 全局的樣子,它就可以幫你多想、幫你計劃、不問白癡問題、回答得體,而且不論做了多久都不會走歪,因為「初衷」一直在那裡。
專案檔案上傳到 AI Chat
你要讓 AI 知道你已經有哪些檔案了,以免它又浪費時間去生成既有內容,更怕它改了個新版是錯的。
軟體通常被拆成多個檔案夾,每個檔案都有規定放置的位置,比方下面是一個簡單的 WordPress 插件模板的 Tree:
plugin-name/
├── inc
│ ├── admin
│ │ └── settings.php
│ ├── public
│ │ └── frontend.php
│ └── shortcodes.php
├── assets
│ ├── css
│ │ └── style.css
│ └── js
│ └── script.js
├── plugin-name.php
└── readme.txt
Bash要解決系統檔案間的關係,當然「檔案夾」跟「檔案」都要提供,但 Claude 的 Project knowledge 只能上傳「檔案」而不能上傳「檔案夾」,也不能把上傳過的檔案手動分組,怎麼知道什麼檔案在什麼位置呢?
沒關係,這麼做:
- 畫出檔案樹:單獨寫一個檔案,讓它當作對照表去比對;
- 上傳檔案:把所有檔案一一上傳到 Claude Project knowledge。
這麼麻煩!!!別擔心!
幫你自動化,不用謝
對於「繁文縟節不耐症」的懶人如我,怎麼可能接受這麼麻煩的方法呢?我幫你自動化了!
它會幫你做些什麼事?
- 檢查環境:桌面是否有「/你的專案名稱_backup」檔案夾?有,把前次備份清空,沒有,建立新的;
- 找有用檔案:忽略系統生成、套件下載的上千個檔案,只留下要跟 AI 溝通的工作檔;
- 畫出檔案樹:用系統功能繪製 tree,存成 project_tree.txt;
- 輸出備份:把這些檔案全都存到桌面「/你的專案名稱_backup」檔案夾,而且忽略檔案夾。
# 原本結構,要從每個檔案夾中找到檔案上傳
plugin-name/
├── inc
│ ├── admin
│ │ └── settings.php
│ ├── public
│ │ └── frontend.php
│ └── shortcodes.php
├── assets
│ ├── css
│ │ └── style.css
│ └── js
│ └── script.js
├── plugin-name.php
└── readme.txt
# 執行後,檔案夾消去只有檔案及檔案樹,全選上傳一鍵搞定
plugin-name_backup/
├── settings.php
├── frontend.php
├── shortcodes.php
├── style.css
├── script.js
├── plugin-name.php
├── project_tree.txt # 生成的檔案樹在這裡
└── readme.txt
Bash讓我們開始動手做。
我的環境是 Mac,不知道在 Windows 能不能用,麻煩測試看看。如果你是 Linux 高手,應該不用看這篇文章
1. 把自動處理檔放在專案檔案夾中
把下面這段程式碼複製,貼上文字處理器,存檔叫「backup.sh」,把這個檔案拖放到你的專案根目錄,就是專案最上層的檔案夾下。
#!/bin/bash
# 設定專案名稱(自動根據當前目錄名稱取得)
PROJECT_NAME=$(basename "$(pwd)")
BACKUP_DIR="$HOME/Desktop/${PROJECT_NAME}_backup"
# Step 1: 確認備份目錄是否存在,若無則建立
if [ ! -d "$BACKUP_DIR" ]; then
echo "建立備份目錄: $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
else
echo "清空舊的備份內容: $BACKUP_DIR"
rm -rf "$BACKUP_DIR"/*
fi
# Step 2: 複製需要的檔案(排除自動生成及系統檔案,僅複製檔案)
echo "開始複製檔案到備份目錄(不包含子目錄)..."
find . -type f \
! -path "./venv/*" \ # 你不想備份的檔案夾,可以自行增減
! -path "./__pycache__/*" \
! -path "./node_modules/*" \
! -path "./.mypy_cache/*" \
! -path "./.pytest_cache/*" \
! -path "./.git/*" \
! -path "./logs/*" \
! -path "./migrations/versions/*" \
! -path "./uploads/*" \
! -name "*.log" \ # 你不想備份的副檔名,可以自行增減
! -name "*.pyc" \
! -name "*.swp" \
-exec cp {} "$BACKUP_DIR/" \;
# Step 3: 繪製專案目錄結構
echo "繪製專案目錄結構..."
TREE_OUTPUT="$BACKUP_DIR/project_tree.txt"
tree -I 'venv|__pycache__|node_modules|.mypy_cache|.pytest_cache|vendor|.git' > "$TREE_OUTPUT"
# Step 4: 完成備份,發送 macOS 通知
echo "備份完成!"
osascript -e "display notification \"備份完成!備份位置: $BACKUP_DIR\" with title \"備份通知\""
# 顯示檔案結構的位置
echo "目錄結構存於: $TREE_OUTPUT"
Bash這個檔案不管來源檔案夾是誰,放任何地方它都把檔案複製到桌面,你可以開好幾個專案,桌面就有一堆檔案夾;如果有 ABC 3 個子檔案夾,如果只備份 A 檔案夾,就拖到 A 檔案夾下
2. 修改權限、執行
在終端機打開專案根目錄,輸入下面的指令,給予這個檔案更動的權限,沒有權限它就不能幫你工作。
chmod +x backup.sh
Bash然後輸入下面的指令運行自動執行檔:
./backup.sh
Bash在終端機看到回應:
你的電腦名稱 你的專案名稱 % ./backup.sh
清空舊的備份內容: /Users/your_name/Desktop/你的專案名稱_backup
開始複製檔案到備份目錄(不包含子目錄)...
繪製專案目錄結構...
備份完成!
目錄結構存於: /Users/your_name/Desktop/你的專案名稱_backup/project_tree.txt
Bash完成!現在全部的檔案忽略目錄都複製到桌面,並且幫你把檔案樹畫出來
如果繪製 tree 失敗,通常表示沒安裝工具,在 Mac 輸入
brew install tree
;在 Ubuntu 輸入sudo apt-get install tree
即可;Windows 的安裝有些複雜,參考此文
3. 每次結束一段 AI Chat 對話的更新手續
Claude 在每段對話太長時會貼心的寫:
Tip:Long chats cause you to reach your usage limits faster.
避免很快把額度用光,要開一個新對話,但在新對話會不會不連戲?會,它常常把前面說的忘記,改對的又改錯。
解決方式是,在每段對話結束前更新它的記憶:
- 跟 AI 說「請提供 prompt,讓我們在新對話中可以接續本段對話的進度,請標示已完成和未完成的事項,總結對話」,此時它會提供一段話,把它複製下來;
- 執行前面的 backup.sh,把所有需要跟 AI 溝通的資料丟到桌面;
- 關閉現在的對話,在 Claude Project 裡開啓新對話;
- 在 Project knowledge 全選舊檔案,刪除;
- 在 Project knowledge 全選「桌面/你的專案名稱_backup」上傳;
- 在新對話貼上它在 1 給你的 prompt,因為 AI 有對資料視而不見的毛病,加一句「請閱讀 Project knowledge,並總結進度」。
所以你知道為什麼前面那些操作要自動化了?因為可能 10 輪問答就說對話太長,常常要做!
這幾步更新動作有點麻煩,但省下每段對話開頭都要花力氣跟 AI 對齊資訊的時間,第一輪問答就有生產力,此時它才是真正助理,可以提出有用建議。
總結
如果沒有預算限制,用 Cursor + Cline 兩大 AI 程式設計師聯手最方便,系統開發很快,但很貴,一天花 NT$1000 都可能。
取而代之,USD$20/月就可以用 Claude 的 Project + Artifacts,或是 ChatGPT 的 Project + Canvas,讓你在省錢和效能間平衡,適合在公司上班不願動輒噴幾十美金的你。
如果你在學程式開發,Cline 已經簡單到按「OK」就可以完成系統開發了(現在連按 OK 都自動了!),但沒付出功夫,學習就沒效果。
本文的方法是還需要 Copy & Paste,但看到如何一步步前進,學習效果較好。
試試看,如果你沒學過 PHP,也不懂 WordPress,現在想個隨便的點子,用 AI 開發一個 WordPress 插件,只需兩三天,你對 WordPress 的理解會超過多年老用戶!