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

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

價格昂貴的 AI agent 開發系統已經是潮流,不想花這麼多錢?只要幾步起手式,就可以讓 ChatGPT 這種 AI Chat 工具升級成複雜系統開發工具!除了便宜外,這種比較慢的 AI 輔助開發,對想學程式開發的人來說效果絕佳。

「系統開發」就是「寫程式」嗎?對也不對!系統由程式組成,但複雜多了,比如你要做個部落格網站,有:認證管理、會員管理、內容管理、資料庫管理、SEO、串接社群網站、備份、網路安全…,有的自己寫,有的導入既有程式庫(別人寫好的半成品),最難的是這些由不同人開發的不同功能最後可以運作不出錯。

這就像自彈自唱跟指揮交響樂團的差異。

搞定系統最複雜的相互關係,最好把 AI 導入工程師實用的 IDE 開發環境,讓它看到所有程式碼、運作成功或失敗、失敗原因是什麼…,這樣就可以自動化了。但 IDE 寫程式要另外花錢串接 AI 公司的 API,價格高昂,我曾花掉 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)專案檔案樹;3)專案檔案。

結構性系統需求文件

請參考先前的文章《生成式 AI 精準生成術 結構性 PROMPT》,你可以想像一個系統用心智圖類似的架構畫出樹狀圖,在一個檔案裡把所有計劃及想法都講明,任何人讀完就不會狀況外。

生成式 AI 很聰明,給它多數檔案它可以「大致懂」,但如果你希望它「完全懂」,建議用 YAML 格式,理由也寫在《生成式 AI 精準生成術 結構性 PROMPT》裡了,這裡我請 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),所以每行都看到「姓名:王小明」,「姓名」就是鍵,用冒號分隔,「王小明」就是它的值,如果有 10 個人整理成表格,就是「姓名」欄位有王小明、李小華、黃小虎…,所以你可以把「鍵」當作表格的表頭第一列「標題列」。
  • 那麼值就是表格裡填的內容,通常一格填一個內容,但是有多個內容也常見,例如:電話:0987654321、0987654322,誰說一個人只能有一個電話?那多個值如何呈現呢?上例中很多都是告訴你如何花式呈現多個值。
  • 鍵值對的下一層還可以有其他的鍵值對,這就是「巢狀」,像俄羅斯套娃一樣一層套一層,就像「地址:」還分作「街道:中正路1號、城市:臺北市、郵遞區號:11111」,這 3 個鍵值對是上一層的值。

其實你不用很懂,寫個大概叫 AI 修改,甚至你就用說的叫它寫,鍵值對的功能就是告訴電腦每個內容是什麼,叫它先寫 YAML 是確定它是否真瞭解你的意思,這一切都是為了不用誤解,因為誤解就要重寫,費時、費錢、費精神。

YAML 可以系統性告訴 AI 全局的樣子,它就可以幫你多想、幫你計劃、不問白癡問題、回答得體,而且不論做了多久都不會走歪,因為「初衷」一直在那裡。

專案檔案上傳到 AI Chat

你要讓 AI 知道你已經有哪些檔案了,以免它又浪費時間去生成既有內容,更怕它改了個新版是錯的。

軟體通常被拆成多個檔案夾,每個檔案都有規定放置的位置,比方下面是一個簡單的 WordPress 插件的模板:

plugin-name/
├── inc
│   ├── admin
│   │   └── settings.php
│   ├── public
│   │   └── frontend.php
│   └── shortcodes.php
├── assets
│   ├── css
│   │   └── style.css
│   └── js
│       └── script.js
├── plugin-name.php
└── readme.txt
YAML

要解決系統檔案間的關係,當然「檔案夾」跟「檔案」都要提供,但 Claude 的 Project knowledge 只能上傳「檔案」而不能上傳「檔案夾」,也不能把上傳過的檔案手動分組,怎麼知道什麼檔案在什麼位置呢?

沒關係,把檔案樹單獨寫一個檔案,讓它當作對照表去比對就好了。

檔案樹

作業系統有個「tree」功能,使用方法是打開終端機輸入「tree」,它會把所有檔案和檔案夾畫出一棵檔案樹。

如果還沒安裝,在 Mac 輸入 brew install tree;在 Ubuntu 輸入 sudo apt-get install tree 即可;Windows 的安裝有些複雜,參考此文

程式開發系統常會產出大量暫存檔或系統用檔案夾,比如 Python 常會產生上千個檔案,這些不是我們開發的也不用告訴 AI,我用了一個 tree 指令,讓它不列出 Python, PHP, Node.js, Git 這些會產出系統檔案的工具,如果你用的是其他軟體,也可以加入你不想列出的工具檔案夾。

tree -I 'venv|__pycache__|node_modules|.mypy_cache|.pytest_cache|vendor|.git'
Bash

最後,在 Claude 新增一個文字文件,題目是「Project Dir Tree」把畫出來的 Tree 貼在內文,AI 就知道每個檔案原本放在哪個檔案夾了。

用 tree 把樹狀圖提供給 AI,它會自行比對
用 tree 把樹狀圖提供給 AI,它會自行比對

上傳檔案到 AI Chat

同樣的問題,Claude 無法「上傳目錄」,我要把所有檔案讓 AI 看到,只能從層層疊疊的檔案夾中找到檔案,常常有幾十個,一一上傳到 Claude,容易出錯且工程浩大。

我的做法是在桌面建立一個「/專案名稱_files/」檔案夾,用下面的指令做到 2 件事:

  1. 忽略檔案夾:從專案檔案夾搜尋檔案(忽略子檔案夾),送到桌面檔案夾,只要幾秒鐘就搞定。
  2. 忽略自動生成檔案:避免複製 Python, PHP, Node.js, Git…自動生成的上千個系統檔發給 AI。
find /來源檔案夾路徑/ \
  -type f \
  ! -path "*/venv/*" \                # 不要的檔案夾們
  ! -path "*/.git/*" \
  ! -path "*/__pycache__/*" \
  ! -path "*/node_modules/*" \
  ! -path "*/.mypy_cache/*" \
  ! -path "*/.pytest_cache/*" \
  ! -name "*.log" \                   # 不要的副檔名們
  ! -name "*.tmp" \
  ! -name "*.lock" \
  ! -name "*.pyc" \
  ! -name "*.swp" \
  -exec rsync -av {} /目的檔案夾路徑/ \;
Bash

這個指令可以一瞬間把全部檔案都複製到新檔案夾,再用 Claude 的「Upload from device」全選上傳即可,省時省力。

每次結束 AI Chat 對話的更新

Claude 在每段對話太長時會貼心的寫「Tip:Long chats cause you to reach your usage limits faster.」,避免很快把額度用光,要開一個新對話,但在新對話會不會不連戲?會,它常常把前面說的忘記,改對的又改錯。

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

  • 「請提供 prompt,讓我們在新對話中可以接續本段對話的進度,請標示已完成和未完成的事項,總結對話」,此時它會提供一段話,把它複製下來,貼到新對話。
  • 刪除舊檔案樹,用前面指令更新 project knowledge 的檔案樹。
  • 刪除舊專案檔案,用前面指令更新 project knowledge 的專案檔案。

所以你知道為什麼前面那些操作要寫成固定指令了?因為一段對話可能 10 輪問答就會跳出太長的警訊,常常要做所以要儘量自動化啊!

比起直接開新對話聊天,這幾步更新動作是有點麻煩,但省下每段對話開頭都要花力氣跟 AI 對齊資訊的時間,第一輪問答就有生產力,此時它才是真正助理,可以提出有用建議。

總結

如果沒有預算限制,用 Cursor + Cline 兩大 AI 程式設計師聯手最方便,系統開發很快,但很貴,一天花 NT$1000 都可能。

取而代之,用 Claude 的 Project + Artifacts,或是 ChatGPT 的 Project + Canvas,USD$20/月,在省錢和效能間平衡,適合在公司上班不願動輒噴幾十美金的你。

從學習角度看,自動開發已經簡單到只要按「OK」就可以用一隻滑鼠完成系統開發了(現在連按 OK 都自動化了!),但因為沒付出功夫,學習沒效果。

本文的方法是還需要 Copy & Paste,但看到如何一步步前進,學習效果較好。例如,如果你從沒學過 PHP,也不懂 WordPress,試試看用 AI 開發一個 WordPress 插件,花兩三天,你會對兩者都有深刻理解,甚至比多年 WordPress 用戶更懂。

讓我們保持聯繫

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

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

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

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

訂閱電子報

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

最有人氣

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

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

Continue reading