如何讓 ChatGPT 升級處理複雜任務?用 AI Chat 開發系統

ChatGPT 這種 AI Chat 無法做複雜工作?其實可以,不過要做些準備

價格昂貴的 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 是差不多的產品。

還好最近 Claude 領先推出了「Artifacts」,ChatGPT 緊接也推出「Canvas」,現在它們可以在河流般前進的對話中持續修改同一個檔案了,就像你和它站在白板前討論一樣,雖不及 IDE,已經比以前好多了。

但它們還是有限制:

  1. 對話長度有限:跟它對話 10 句,第 11 句它會送出「前面的 10 句 + 最新的 1 句」等於送出了 11 句話加上它的大篇回答,越多輪對話,送出內容成倍增加,很快就把本日額度用光光,解決方法是把一段對話切成多段,但讓每段能連戲。
  2. 看不到全局:一次說一句話,要它從幾句話瞭解你的系統太難了。這就要利用「Project」功能,例如 Claude 的 Project 有「Project Instruction」和「Project Knowledge」的功能,就可以跟聊天機器人做更深的溝通了。

本文是以 Claude 為例的系統開發設定,ChatGPT 也大同小異。

如果只要生成應用題那樣的短答或寫短文,就不用這麼麻煩。但要讓 AI 有系統解決能力,才能幫你增加生產力。

Project Instruction


在 Claude 開個新專案,右方有 Project knowledge 欄,輸入 project instructions 和把檔案用 Add Content 提供給它, AI Chat 做法都差不多是這樣
在 Claude 開個新專案,右方有 Project knowledge 欄,輸入 project instructions 和把檔案用 Add Content 提供給它, AI Chat 做法都差不多是這樣

我會把下面這樣的 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 只能上傳「檔案」而不能上傳「檔案夾」,也不能把上傳過的檔案手動分組,怎麼知道什麼檔案在什麼位置呢?

沒關係,這麼做:

  1. 畫出檔案樹:單獨寫一個檔案,讓它當作對照表去比對;
  2. 上傳檔案:把所有檔案一一上傳到 Claude Project knowledge。

這麼麻煩!!!別擔心!

幫你自動化,不用謝

對於「繁文縟節不耐症」的懶人如我,怎麼可能接受這麼麻煩的方法呢?我幫你自動化了!

它會幫你做些什麼事?

  1. 檢查環境:桌面是否有「/你的專案名稱_backup」檔案夾?有,把前次備份清空,沒有,建立新的;
  2. 找有用檔案:忽略系統生成、套件下載的上千個檔案,只留下要跟 AI 溝通的工作檔;
  3. 畫出檔案樹:用系統功能繪製 tree,存成 project_tree.txt;
  4. 輸出備份:把這些檔案全都存到桌面「/你的專案名稱_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.

避免很快把額度用光,要開一個新對話,但在新對話會不會不連戲?會,它常常把前面說的忘記,改對的又改錯。

解決方式是,在每段對話結束前更新它的記憶:

  1. 跟 AI 說「請提供 prompt,讓我們在新對話中可以接續本段對話的進度,請標示已完成和未完成的事項,總結對話」,此時它會提供一段話,把它複製下來;
  2. 執行前面的 backup.sh,把所有需要跟 AI 溝通的資料丟到桌面;
  3. 關閉現在的對話,在 Claude Project 裡開啓新對話;
  4. 在 Project knowledge 全選舊檔案,刪除;
  5. 在 Project knowledge 全選「桌面/你的專案名稱_backup」上傳;
  6. 在新對話貼上它在 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 的理解會超過多年老用戶!

讓我們保持聯繫

推送 Push:有個資疑慮的您,按下網址列左方「鎖頭」開啟「通知」會收到通知

電子報 Subscribe:在上方框或側邊欄框中訂閱電子報,我會看到信箱,但不會發垃圾郵件。

合作 Cooperation:行銷、課程合作 請到 About 中填寫表單,留言、臉書專頁聯繫也可以

臉書專頁:疑問或聊天,請留言,或到臉書專頁「Simpro 學習控」關注及留言

訂閱電子報

約雙週更新,絕無垃圾郵件|記得到信箱查看驗證信

最有人氣

探索更多來自 六叔觀察站 | Uncle6 Observer 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

Continue reading