> 歡迎訂閱我的 [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