ChatGPT 在開發工作中的實戰策略 筆記

Jul.14.2023

謝謝  ALPHA Camp  舉辦一系列 AI 相關活動 - AI Your Summer 🏖️

本次參加的主題是:運用 GPT,像個資深工程師般思考

上半場由 布丁 分享 ChatGPT 在開發工作中的實戰策略,下半場 Workshop 則是由 Caesar 帶領我們透過實作 ChatGPT 應用

Workshop 的流程是先讓我們自己嘗試實作,啟動個人與 ChatGPT 更多對話,蠻有趣的部分是在小組討論與 DEMO 時觀察到許多不同的開放答案。

布丁 的演講內容和 Q&A 整理成筆記,希望這些筆記可以幫助對活動有興趣的朋友。

筆記分為以下 2 篇,此篇文章為 ChatGPT 在開發工作中的實戰策略

  • ChatGPT 在開發工作中的實戰策略
  • Q&A 紀錄

👩🏻‍💻 如果筆記內容有需要調整的地方,可以到 FB 私訊跟我說喔 🙏🏻


已經聽了好幾場 布丁 的 AI 演講,每次都有新東西,總是搜集許多新資訊,會直接附上 DEMO 成果與資料參考來源,這對我非常有幫助,讓我們有更多探索的空間,簡報有貓 🐱 就是讚 🇯🇵


不要把有任何有智慧財產權的完整程式碼,直接傳送到 ChatGPT

  • 例如:AWS key / password 等
  • 不然你會變訓練資料,或者寫註解,可能出現別人的抱怨 (笑
  • 可以寫 pseudo code 或 code snippet 來避免此問題

AI 從魔法到日常的演進過程

  • 魔法 ✨ 當我們對事情不了解,所有事情就像是魔法
  • 科學 ✨ 有理論之後、被稱之為科學,但科學可能會被驗證或推翻
  • 自動化 ✨ 不用了解就可以使用,例如:3C 產品 - 電冰箱,食材建檔操作、自動製冰過程、溫度調節,我們可以思考並嘗試哪些東西可以自動化 ?
  • 日常 ✨ 跟水、電一樣的日常,大家最長時間沒使用網路是什麼時候?

湧現 (Emergence) 或者又稱為頓悟時刻

  • 當有一定的量、集合的時候,突然有了靈性,有了解決問題的能力

一個資深工程師各自表述

  • 在 ChatGPT 詢問 20 個知名工程師對於資深工程師的想法,要怎麼衡量資深工程師的定義?
  • 但同樣是專業人士,不一定都會有同樣的想法
    • 例如:專家 A 認為要專精一個語言,而專家 B 覺得可以嘗試寫各種語言,意見可能會有點衝突
  • Engineering Ladders 裡有整理一些方法論,提供蠻棒的觀點,大家可以參考看看

ChatGPT 在工作中可以扮演的角色

  • 程式碼生成 / 編輯
  • 有人一起組隊開發 (pair programming) → 更快完成工作,品質更好
  • 撰寫測試 → 快速驗證程式碼的可靠性
  • 撰寫文件 → 提高工作效率,促進團隊協作
    • 繪製流程圖/甘特圖/ mermaid
    • 生成 comment message
  • 程式分析 = 跟一個看過程式碼的工程師對話 → 更快上手
    • 使用情境 1: 換工作,打開別人的 code,這到底在寫什麼?
    • 使用情境 2: 與其他團隊協作
    • 閉著眼睛,先丟給 ChatGPT
    • 像是在跟人對話
  • 數據分析 → talk with data → 更容易掌握資料的概念
    • 可以拿 simple 資料做討論
  • 打破自我的 Known Unknown, Unknown Unknowns → 提升自我
    • The Known-Unknowns Matrix In E-Commerce
      • Known Knowns 知道你已經知道的
      • Known Unknowns 你知道你不知道的
      • Unknown Knowns 你不知道你知道的
      • Unknown UnKnowns 你不知道你不知道什麼

驗證你對於 Senior Software Engineer 的理解程度

  • 問題 1 Teach me how Senior Software Engineer works by asking questions about my level of understanding of necessary concepts. One question at a time. With each response, fill in gaps in my understanding, then recursively ask me more questions to check my understanding. Please speak in Traditional Chinese and use Taiwanese terms.
    • ChatGPT 回答 當然可以。首先,我想問你一個問題來了解你對軟體工程的基本知識。你對物件導向程式設計(Object-Oriented Programming,簡稱 OOP)的理解如何?
      • ChatGPT 會反問你,判斷你的理解能力如何
  • 問題 2 在回答問題之前,你可以告訴我完整的學習地圖嗎?
    • 或者直接說『太難了我都不知道』
  • 從無到有,要知道一個 Idea 最難的地方是不知道關鍵字,你可以問 ChatGPT、也可能被 ChatGPT 反問,最後獲得更容易理解的回答

使用 ChatGPT 從無到有撰寫程式

  • 直接開始做事情,因為想要快速解決問題,可能會做得很爛,建議先畫流程圖,成果都會好很多
  • 遇到程式出錯,可以貼 error message 詢問 ChatGPT
  • AI 可能只寫範例程式,裏面根本沒有寫,要再針對此部分詢問
  • AI 寫程式碼很容易,但是品質要控管

資料視覺化 Show Me Diagrams

  • Prompts:
    • 你是一位資料分析師。這邊有一份生成式 AI 年會報名資料的 sample 檔案,請建議我分析資料的方式,並且撰寫一個 Python 程式,用 Plotly 繪製出精美的圖表。程式要載入 data.csv 的資料,第一行是 column name。
    • 幫我想想還有什麼更進階,看起來就很厲害的圖表。
    • 可以請你扮演一個不大懂資料分析,不管任何資料都喜歡用折線圖來表示的人,用上面的資料來亂做一些圖表嗎?
    • 太棒了!你可以再做出一些更搞笑的圖表嗎?不需要考慮是否傳達任何有用的資訊。
  • 成果:

網頁爬蟲 + 文字雲

  • Prompts:
    • 我們的資訊課教授希望我們撰寫一個 Python 程式,抓取台灣最近的新聞,產生出一個文字雲,你可以協助我規劃這個程式的流程嗎?請用 Mermaid 幫我畫出流程圖。
    • 請幫我撰寫一個 Python 程式,從 Google News 抓取新聞資料,進行文字分析,最後生成文字雲。
  • 成果:

叫 ChatGPT 用 GPT API 做網站

  • 歡迎註冊使用:https://mycoach.career
  • Prompt: generate a Python web app
  • Write a Python web app to generate performance review for someone by using OpenAI GPT3 davinci-003 engine. Input: name, job title, ranking score (from 1 to 5), some points. User can choose which kind of languages (at least English and Traditional Chinese) they want this app to generate. Please add some logger so we can detect issues.

叫 ChatGPT 撰寫產品需求文件

  • 寫 test case
  • 找一些不想做的事情給他做
  • PRD: 履歷分析 SaaS 軟體及服務
  • 叫 AI 自己反省自己寫的 PRD
  • PRD: 履歷分析 SaaS

日常工作範例

  • Comment, Diagram, Test
    • 幫我將以下程式碼加上逐行註解
    • 可以幫我畫一個用戶跟系統互動的循序圖(sequence diagram)嗎?
    • 好棒,可以幫我畫一下系統的流程圖嗎?
    • 如果要改善這個程式,你有沒有什麼建議呢?
    • 要怎麼增加測試呢?可以幫我寫一個完整測試整個程式的 code 嗎?
  • Refactor Code 1
    • 請先閱讀以下的程式碼,我的主管說 generate_text 太醜,你有沒有改善的建議呢?
    • 我這份程式碼目前沒有任何測試。要加上 unit test 的話要怎麼樣開始呢?
    • 可以給我一個 mock 的範例嗎
  • Refactor Code 2
    • 你是一位資深 Python 工程師,這邊有一段 Streamlit 的程式碼。如果請你重構,你有什麼建議?
    • 可以根據你的建議,幫我改寫整份程式嗎?
  • Create README from code
    • 這邊有一份專案的程式碼,你可以幫我撰寫 README.md 嗎?
  • Fix Code, Improve Readability, Test
    • Please find error in this code
    • How can I improve the readability?
    • I heard TDD. How do I make this code testable?
  • 30 Best ChatGPT Prompts for Software Engineers

改善程式碼審查流程:Pull Request Reviewer

text to code

AutoPR

  • AutoPR,這是 work 的,但 Issue 要寫清楚一點
  • Fix issues with AI-generated pull requests, powered by ChatGPT

ChatGPT Code Plugin: Talk to your code

bloop

  • bloop is a fast code search engine written in Rust.
  • 這個很棒,基於 GPT-4,能夠理解你專案的程式碼,可以透過問答的方式、快速找到你需要的程式碼
  • 例如:某個變數是幹嘛用的?要關掉某個東西,要怎麼關?不看 readme 要怎麼把專案 run 起來?問出各種內容,提供改善建議

LLM 在程式開發的發展現況

General Purpose Agent

  • Auto-GPT
  • 建議不要用 AutoGPT
  • 沒有什麼事情做得到,例如:幫我怎麼樣賺到錢
  • BabyGai
  • BabyGai 有不錯的論述

Voyager

  • 終身學習 Agent 是一個開發世界的遊戲,Voyager 會不停地探索遊戲世界
  • Voyager 如果發現自己處在沙漠而非森林中,就會知道學會收集沙子和仙人掌,會比收集鐵礦更重要

Junior Developer Agent

  • gpt-engineer
    • Specify what you want it to build, the AI asks for clarification, and then builds it.
  • smol developer
    • the first library to let you embed a developer agent in your own app!

Use GPT to generate best prompts

  • gpt-prompt-engineer
    • 確定會動,動得很好,這個非常棒,除了有點燒錢之外
    • 幫你寫 prompts,可以說想要生幾個 prompts
    • 有兩個角色,幫你評價哪個寫得比較好
    • 但按下去就是幾萬個 tokens 在跑

ChatGPT Code Interpreter is Here!

  • 情境 1: 幫我生成一個有貓的形狀的 QR code 圖片,提供可以下載該圖片的連結
    • ChatGPT 回答有難度,改成給一張圖,墊在 QR code 的後面,讓對比更高
    • 變成 8 bit 的樣式
  • 情境 2: 失業率數據分析
  • 情境 3: 政治獻金分析

學習更多

  • OpenAI 跟 DeepLearning.AI 合開的課程 ChatGPT Prompt Engineering for Developers
  • Make ChatGPT Speaks with Speechki Plugin
  • Prompt 非常重要,會影響到你的產生結果
  • 要學習要怎麼做基礎的防護
    • GPT Prompt Attack
  • 打造更多 tool ,協助自己提升生產力
  • 自製 shell command
  • 從 A 到 B
    • 兩個語言有什麼不一樣,有什麼要注意的地方
    • 把一個問題,變成不同的方式問他
    • 把答案反推回去給他
    • 再改進問題

如果想要了解更多細節,可以參考 ALPHA CAMP 的文章,工程師新作業流程:ChatGPT 用於軟體開發的實戰策略,文章內也有附上講者的簡報內容。

Q&A 番外篇 筆記內容:可以到 這裡 查看

  • Generative AI
  • ChatGPT
  • ALPHA Camp
  • AI Your Summer
  • Speech Notes