我用 ChatGPT 寫了一個 ChatGPT 指令大全網站

2023年9月15日

ChatGPT 教學專書
不僅教你 ChatGPT 指令,更帶你實作出創新應用!前往了解

去年底橫空出世的 ChatGPT 在網路上有越來越多的應用,但網路上有人提到使用 ChatGPT 收到的答覆並沒有太大幫助。之所以會這樣,是因為指令給的不夠精確與到位。在網路上其實已經有一些 ChatGPT 插件,讓你可以用快捷鍵生成 ChatGPT 指令。只是這些插件對於不熟悉 ChatGPT 的人來說,光是安裝就有難度。

image

於是我們決定寫一個簡易的小網頁,讓大家能夠一鍵複製精準有效的 ChatGPT 指令,然後修改成符合自己需求的指令,然後將指令貼上 ChatGPT,就可以得到更有幫助的回覆。我們分別做了中文版與英文版的指令大全。

而這個 ChatGPT 指令大全網站,正是在 ChatGPT 的幫助下完成的。透過這篇文章,希望跟其他同為前端工程師的人分享,可以如何透過 ChatGPT 加速完成你的工作;同時也想跟非工程師的人分享,現在有了這些 AI 工具,如果你有自己想做的 side project,不一定需要找工程師,也可能一步步把功能實踐出來。

用 ChatGPT 幫忙寫程式的注意事項

請 ChatGPT 協助寫程式時有一些注意事項,包含

  • 用什麼語言寫:要讓它知道用什麼語言、框架來寫。可以透過指令 Act as an expert of [某個程式語言] 來做到,例如 Act as an expert of python
  • 註明典範或設計模式:如果你想要它用特定的典範或設計模式寫,要記得特別標注。因為要達成某項功能,通常能有很多種不同實踐方式。如果你想讓 ChatGPT 的寫法跟你平時的風格一致的話,你必須給它這個指令。舉例來說,透過 Implement [某個功能] using functional programming 可以讓它用函式編程來寫該功能。
  • 描述要清楚:你的邏輯描述要夠清楚。雖然後多人會戲稱有 ChatGPT 幫忙後可以用嘴巴寫程式,但要真的做得好,你嘴巴說出來的邏輯要是夠明確的。假如你講得不清楚或有誤,可能會導致 ChatGPT 寫不出你真正想要的東西。
  • 提供例子:如果能提供例子,會有助於 ChatGPT 更明白你想要的。假如要請它幫忙寫一個函式,你可以提供一個輸入,以及預期的輸出。
  • 寫測試:雖然 ChatGPT 可以幫忙寫,但是請務必還是自己測試一下,確保功能有如你的預期。如果你想要比較自動化地驗證程式的正確性,可以請 ChatGPT 幫忙寫測試案例,然後跑一下那些測試案例來確認沒問題。這可以透過 Write 5 test cases for [某段程式碼] 來做到。

在了解以上的注意事項後,接著讓我們一起來看看可以如何透過 ChatGPT 幫忙寫程式。為了不讓這篇文章的篇幅過長,文章會舉三個實際請 ChatGPT 寫的例子。這三個都是有代表性的例子,因為都是一般 React 與 JavaScript 新手需要花時間去查才寫得出來的功能。

根據特定字串來畫重點

在逛 ChatGPT 指令大全 時,你可以看到每個指令中,要替換掉的字詞,我們都有用淺藍色來畫重點。這件事該怎麼做到呢? 我們當然不是每個指令都去畫一次重點,不然如果有一千個指令,就要畫一千次。用程式的角度來看,我們可以透過特定格式,讓程式看到該格式後,自動幫忙做轉換。

用程式來幫你自動畫重點
用程式來幫你自動畫重點

但是這件事要如何做到呢? 該如何把 你現在是一個 [程式語言] 專家 的程式語言自動畫上重點? 如果沒有 ChatGPT,大概會是這樣執行:

  • 先想辦法判斷 [] 在一個字串中,有沒有符合這個規則的文字
  • 要判斷這個,通常會用正規表達式 (Regex),但因為我不熟正規表達,所以去 StackOverflow (一個工程師們查東西的網站) 上面查,然後根據 StackOverflow 上的回答來試試。很多時候上面回答品質不佳,所以要試很多次才能做到
  • 在能判斷出 [] 這個規則後,接著需要寫一個函式,把 [] 的文字替換成具有畫重點效果的。

基本上,如果能夠描述出上面的想法,就可以讓 ChatGPT 根據上面的內容,來幫你寫程式。下面這段是我輸入到 ChatGPT 的指令。

請幫我用 TypeScript 寫一個 highlightText 函式,它會接收一個字串,接收的字串中可能帶有 [文字],這個函式會辨別 [文字],然後把 [] 內的文字改成用 <span className="bg-sky-100 text-slate-800"> 包住。

舉例來說, 輸入:你現在是一個 [程式語言] 專家 輸出:你現在是一個 <span className="bg-sky-100 text-slate-800">程式語言</span>

透過上面的指令,來看看 ChatGPT 寫出了什麼。成果非常驚人,首先它給了一個正確的正規表達式 const regExp = /\[(.*?)\]/g; 然後透過 splitmap 方法,幫我把每一個 [] 都替換成有畫重點的字。只花五分鐘不到,我就完成了這個畫重點的功能。

用 ChatGPT 幫忙完成畫重點功能
用 ChatGPT 幫忙完成畫重點功能

實作點擊後滑動到最上方的按鈕

在使用 ChatGPT 指令大全 時,如果你往下滑動,你會看到網頁的右下角,有一個圓形的按鈕,裡面有個向上的箭頭。這是許多網站都有的功能,當使用者點擊後,頁面會自動滑到最上方。這個常見的功能該如何實作呢? 直接請 ChatGPT 來幫忙吧。

我給 ChatGPT 的指令如下

你現在是名精通 TypeScript、React 與 TailwindCSS 的專家。今天我想用這三個技術,寫一個元件。這個元件是一個放置在頁面右下方的圓形按鈕,只有在頁面往下滑動後才會出現,假如頁面在最上方時不要出現。當使用者點擊時,要讓頁面滑動回最上方,在滑動到最上方時,這個按鈕要隱藏,直到使用者又向下滑動才顯示

一起來看看 ChatGPT 幫忙寫的成果。

用 ChatGPT 幫忙寫滑動到最上方的按鈕
用 ChatGPT 幫忙寫滑動到最上方的按鈕

因為程式碼有點長,上面的截圖僅截到邏輯的部份。可以看到 ChatGPT 幫你在三十秒內寫完了這個功能。它透過 const [showButton, setShowButton] = useState(false); 來控制按鈕的呈現狀態,然後透過 window.pageYOffset > 0 這個判斷讓按鈕只有在向下滑動後才出現。

因為是用 React 寫,ChatGPT 知道如果要跟 React 以外的外部系統互動 (這邊是跟瀏覽器中的執行環境),必須把邏輯寫到 useEffect 裡面。同時因為在這邊註冊了一個 scroll 監聽器,在 React 元件的生命週期最後,要把這個監聽給移除,這樣才能避免記憶體外洩。這是很多 React 新手會忘記做的事情,但是 ChatGPT 沒有忘記,它有記得用 removeEventListener 來移除監聽。

useEffect(() => {
  window.addEventListener("scroll", handleScroll);
  return () => {
    window.removeEventListener("scroll", handleScroll);
  };
}, []);

你可以自己試試看,把上面那段指令丟到 ChatGPT,你會發現你也做得出來在許多網站中常見的,點擊滑動回頁面最上方的按鈕了 😉

類別與過濾

最後來講另一個許多網站中常見的功能 — 類別與過濾。在 ChatGPT 指令大全 的網頁最上方,有一排 ChatGPT 色的類別,當你點擊後,會自動幫你過濾到你所選的類別。這個功能常見的實作方式有兩種,一種是資料量比較小時,會直接把所有資料放在前端,然後在前端進行過濾;另一種是資料量大時,把資料存在資料庫,然後當使用者點擊某個類別時,帶上該類別的參數,讓後端過濾完後,重送過濾後的資料到前端展示。

因為 ChatGPT 指令大全 目前有的指令數還沒有多到要把指令資料額外放到資料庫 (我們實測後,這邊如果額外打 API 拿資料,網路傳輸來回的時間成本讓我們覺得暫時還不值得這樣做),所以我們暫時先都放在前端,然後讓前端這邊直接過濾。

一起來看看我下的指令,以及 ChatGPT 寫出來的成果吧。再一次地,ChatGPT 讓我用不到一分鐘,打完指令後就幫我寫出這個基本功能。必須說,ChatGPT 在變數命名上,都命的清楚好懂,真心覺得有這個幫手真好 😎

用 ChatGPT 幫忙寫過濾功能
用 ChatGPT 幫忙寫過濾功能

小結論 — 快速原型製作

這次做這個簡易的 ChatGPT 指令大全,比我過往在做 side project 的原型 (prototype) 都快非常多,這多虧了 ChatGPT 的幫忙。在 Copilot 與 ChatGPT 相繼問世後,讓我深深感覺到,要做一個網站原型的成本又比過去小非常多,這也意味著,如果你有創意與想法,實踐這個想法的阻礙變得更小。所以如果你有任何想要嘗試做的網站,不要躊躇不前,快找 ChatGPT 幫忙加速實現吧!

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們