> 歡迎訂閱我的 [AI Engineer 電子報](https://aihao.eo.page/6tcs9) 和瀏覽 [[Generative AI Engineer 知識庫]]
Deeplearning.ai 跟 OpenAI 合作開的入門課程,的確是蠻入門的。
* 英文原版: https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/
* 簡中版1: https://github.com/GitHubDaily/ChatGPT-Prompt-Engineering-for-Developers-in-Chinese
* 簡中版2: https://space.bilibili.com/15467823/channel/seriesdetail?sid=3247315&ctype=0
* fOx Hsiao 繁體版: https://www.youtube.com/watch?v=NwO3H1S3DUs
https://www.youtube.com/playlist?list=PLly8vI0gpqtpTB7mt_qi57qOKQRo4XWAQ
## 1. Introduction
* 很多人用 ChatGPT,而本課要教的是如何用好 LLM API
![[Pasted image 20230501193337.png]]
* Instruction Tunded LLM 是目前可應用的主流
* 想得到好的結果,你的 prompt 可以講清楚測重方向、語調、要參考的內容等
## 2. Guidelines
![[Pasted image 20230502224733.png]]
* 清晰不是短,長的 prompt 提供更清晰和上下文,可以帶來更詳細和相關的輸出
* 第一個原則的四個戰術
![[Pasted image 20230502225734.png]]
* Tactic 1: 請用分隔符號來明確界定輸入的不同部分
* 也可以避免 Prompt injection: 指用戶輸入一些 prompt 讓你對模型發出你不想做的事情
![[Pasted image 20230502230353.png]]
![[Pasted image 20230502225220.png]]
* Tactic 2: 可以指定輸出格式
![[Pasted image 20230502225356.png]]
* Tactic 3: 指定滿足條件
![[Pasted image 20230502225641.png]]
![[Pasted image 20230502225705.png]]
* Tactic 4: 給範例
![[Pasted image 20230502225813.png]]
![[Pasted image 20230502225900.png]]
* 給模型思考時間,指示模型對一個問題進行更長的思考時間,用更多算力
* 若模型出現推理錯誤,你應該嘗試重新設計query,要求要有一系列的推理
* 太困難的任務,模型無法在短時間或用很少的詞來完成,就會亂掰
* 這跟人思考一樣,一下給太困難的問題,人也會犯錯
![[Pasted image 20230502230313.png]]
* Tactic 1: 指定步驟
![[Pasted image 20230502230552.png]]
更一步要求輸出格式
![[Pasted image 20230502230723.png]]
![[Pasted image 20230502230905.png]]
* Tactic 2: 指示需要檢查
![[Pasted image 20230502231035.png]]
模型回答錯誤,模型只是同意學生的答案而已
![[Pasted image 20230502231145.png]]
![[Pasted image 20230502231306.png]]
有點長~ 但 model 才會真的去解答
![[Pasted image 20230502231644.png]]
* 模型沒有完美記得所有訓練信息
* 知識邊界不清楚
* 困難問題,model 可能會亂編答案
![[Pasted image 20230502231559.png]]
* 這是模型已知的弱點
* 可用上面教的技術來嘗試改進
* 可以要求先找引用資訊,可以紓解這個問題
## 3. Iterative
* 不要想第一次就把 Prompt 用對,要不斷迭代改進
* 用這個框架來迭代開發 prompt
![[Pasted image 20230503000943.png]]
* 不用太在意那些完美 prompt 的文章,因為可能沒有完美的萬用 prompt
* 有一個 process 針對你的 applciation 找出好的 prompt 即可
![[Pasted image 20230503001155.png]]
* 這是一個椅子簡介,你想要摘要給行銷團隊
![[Pasted image 20230503001312.png]]
* (內容很長,截圖沒截完),覺得太長了,加上限制字數好了:
![[Pasted image 20230503001406.png]]
* 不過LLM無法算剛剛好,這裡其實有52個words
* 改成限制三句:
![[Pasted image 20230503001507.png]]
* 改成對技術細節描述更多
![[Pasted image 20230503001745.png]]
* 加上 Product ID
![[Pasted image 20230503001842.png]]
* 一個更複雜的 Prompt
* 不會有人可以第一次就寫這麼完整
![[Pasted image 20230503002102.png]]
* Prompt Engineering 不在於知道完美的 Prompt,而是知道怎麼用好的 Process 來有效開發 Prompt
![[Pasted image 20230503002249.png]]
* 上述示範,只用了一個 example 案例來評估 prompt
* 對於複雜成熟的應用,會用多個 example 來評估,來了解平均或是最壞的表現是如何
* 初期開發一個 example 就夠了,多個 example 你需要建立一些指標來推動改進
## 4. Summarizing 摘要
摘要是最常見的應用
![[Pasted image 20230509221119.png]]
![[Pasted image 20230509221221.png]]
e.g 電商網站總結留言,讓你可以瀏覽更多,了解所有客戶想法
凸顯給特定部門的回饋:
![[Pasted image 20230509221335.png]]
給 pricing 部門提供回饋:
![[Pasted image 20230509221414.png]]
可要求擷取資訊:
![[Pasted image 20230509223035.png]]
![[Pasted image 20230509223121.png]]
![[Pasted image 20230509223233.png]]
## 5. Inferring 推理
可以判斷留言是 positive 或是 negative
輸入文字文本,進行某種分析: 提取標籤、名字、理解情感
> 有人說,就是可將非結構的文字資料,變成結構化的資料,是 GPT 最厲害的能力
以前要做這件事情,需要收集資料並且辛苦訓練你的獨立模型,現在用 LLM 下個 prompt 就辦到了:
![[Pasted image 20230509235111.png]]
來把輸出改簡單一點,方便後期處理:
![[Pasted image 20230509235212.png]]
對客戶支援部門來說,了解特定客戶對產品是否不滿非常重要: 需要額外的關注
![[Pasted image 20230509235028.png]]
若照以前用監督式機器學習來做,沒這麽快可以搞定....
提取有用的資訊,並且用JSON格式:
![[Pasted image 20230509235644.png]]
而且你不需要3~4次prompt來完成,只需要一個prompt就可以完成上述任務:
![[Pasted image 20230509235801.png]]
推導出主題(subject):
![[Pasted image 20230510000402.png]]
自動分類主題:
![[Pasted image 20230510000554.png]]
這是 zero-shot learning 因為我們沒有給任何訓練資料
建立一個 news alert 當 NASA 出現時:
![[Pasted image 20230510000702.png]]
若要用在 production 上,建議改成用 JSON 輸出。
## 6. Transforming 文本轉換
LLM 很擅長將輸入input的內容,轉換成另一種格式format
例如語言翻譯、拼寫和語法修正、校正
翻譯、語言偵測、同意翻多個語言:
![[Pasted image 20230521194717.png]]
用不同形式: 正式和非正式:
![[Pasted image 20230521194830.png]]
電商回覆不同語言,一個汎用翻譯器:
![[Pasted image 20230521194941.png]]
![[Pasted image 20230521195008.png]]
根據受眾不同,你可以做不同語氣轉換
![[Pasted image 20230521195135.png]]
JSON 轉 HTML
![[Pasted image 20230521195407.png]]
![[Pasted image 20230521195425.png]]
拼寫檢查、語法檢查:
![[Pasted image 20230521195627.png]]
改成 改寫:
![[Pasted image 20230521195737.png]]
改一個校勘範例:
![[Pasted image 20230521195839.png]]
找出修改差異:
![[Pasted image 20230521195916.png]]
要求改寫要遵守 APA 風格:
![[Pasted image 20230521200008.png]]
## 7. Expanding 擴寫
將一個短內容擴寫成長文、做brainstorming
但請負責任,不要來拿做垃圾郵件
針對客戶評論和情緒,寫郵件回覆:
![[Pasted image 20230521200533.png]]
![[Pasted image 20230529154304.png]]
用 AI customer agent 署名,透明度很重要
![[Pasted image 20230521200754.png]]
temperature 溫度參數,可增加多樣性、探索和隨機性:
![[Pasted image 20230521200952.png]]
![[Pasted image 20230521201111.png]]
## 8. Chatbot 聊天機器人
打造客製化的聊天機器人
寫一個新的 get_completion_from_messages 方法
![[Pasted image 20230521201626.png]]
![[Pasted image 20230521201714.png]]
![[Pasted image 20230521201804.png]]
system message 用來框定引導 AI,用戶不會察覺
![[Pasted image 20230521202031.png]]
另一個範例:
![[Pasted image 20230521202452.png]]
AI 不知道你的名字: 因為每一次的對話都是獨立的
![[Pasted image 20230521202535.png]]
你需要提供完整對話,上下文 context
![[Pasted image 20230521202644.png]]
來建立 order chatbot:
寫個 collection_messages 方法用來記錄 context
![[Pasted image 20230521202729.png]]
![[Pasted image 20230521202806.png]]
![[Pasted image 20230521202831.png]]
![[Pasted image 20230521202936.png]]
最後總結成一個 JSON,溫度用0
![[Pasted image 20230521203129.png]]
![[Pasted image 20230521203154.png]]
## 9. Conclusion
![[Pasted image 20230521203414.png]]
LLM 很 powerful
請負責任的建立有正向影響力的 app
## 網友心得
* https://ec26ubh65w.feishu.cn/docx/PuULdQP3wojyZYxn157cnsDXnqe?fbclid=IwAR3o4O-ZouI9HyjbFindJzG0MfFLm726Ai6g9f6Tw5Qu-7oc5Etf6-mABJY 中文筆記
* https://twitter.com/blackanger/status/1651825435049865216 腦圖整理
* https://www.facebook.com/hinet/posts/10159731236308318
* https://www.facebook.com/chihwei.hu1/posts/6561567690528459