> 歡迎訂閱我的 [AI Engineer 電子報](https://aihao.eo.page/6tcs9) 和瀏覽 [[Generative AI Engineer 知識庫]] 這場由 [Anthropic](https://www.anthropic.com/) 的研究員 Karina Nguyen 在 [[AI Engineer Summit 2023]] 帶來的 Prompting 演講,有錄影跟投影片。 * 投影片 https://bit.ly/principles-prompt-engineering * 錄影 https://www.youtube.com/watch?v=6d60zVdcCV4&t=885s > 內容蠻不錯的,但是講者的演講解說能力不是很流暢啊,還需要額外仔細看 code 範例才能理解...XD * 為何 prompting 很難 * ![[Pasted image 20231102164658.png]] * 模型運作 * 模型是估計機率,一個好 prompt 會增加產生好結果的機率 * attention 機制讓模型關注特定文字,好 prompt 能讓模型關注正確的地方 * 有效率的 prompt 可以讓模型不需要額外的計算資源或模型再訓練 * ![[Pasted image 20231102164709.png]] * 為何人類很難,又分三個層級 * 人知道想要什麼,但是不知道如何得到最佳結果 * 人模糊地知道想要什麼,但是不知道如何描述 * 人不知道他們想要什麼 * ![[Pasted image 20231102164904.png]] * 後兩者可以 * 需要提供 examples 和 edge cases * 像解釋給五歲小孩一樣來解釋 * 迭代、迭代、迭代 ![[Pasted image 20231102164924.png]] * Principles * prompting 像是創意寫作,需要形成假說、測試假說、迭代改寫 * 如果模型無法運作好,需要人有原創性和想像力,重寫更好的 prompt * 能夠清楚的表達任務目的,同時提供足夠的限制和指示,來產生高品質相關的結果 * Clarity, Conciseness, Coherence, Consistency, Direction, Grounding, Engaging ![[Pasted image 20231102164953.png]] ![[Pasted image 20231102165000.png]] > 吐槽: 講者投影片的 xml 結束標籤寫錯了,少了 / > 另外就是 anthropic 似乎很喜歡用 XML,範例 prompt 經常喜歡用 xml 來當作區隔符號 ## 推薦衣服 任務: 根據用戶輸入推薦適合的衣服 Prompt 用來判斷 query 和 衣服描述 是否推薦 輸入會用 xml 把 user query 跟 item description 包起來 * v1: 直接問是否 relevant: YES 或 NO * ![[Pasted image 20231102165045.png]] * v2: 給 criteria 和 CoT 叫模型思考 * ![[Pasted image 20231102165028.png]] * v3: 改成給分數 1~10 分 * ![[Pasted image 20231102165035.png]] ## Long context QA 任務: 根據文件,忠實回答用戶問題 Claude 模型的特色就是 100k context windows,所以可以放很長的內容當作 context 例如: 1. 放多個文件來做檢索 2. 可以放很多 few-shot prompt ### Paper: Question Decomposition Improves the Faithfulness of Model-Generated Reasoning ![[Pasted image 20231102165139.png]] ![[Pasted image 20231102165217.png]] https://arxiv.org/abs/2307.11768 (paper 作者是 Anthropic 研究員) prompt source code: https://github.com/anthropics/DecompositionFaithfulnessPaper/tree/main/prompts 這篇 paper 提出 CoT 需要依賴模型能夠忠實地推理才能成功,但並不是成立。 用分解(Decomposition)方法在 QA 問題上,能夠改進 CoT 的忠實程度。 > paper 摘要翻譯: 讓模型通過將問題分解為子問題來生成推理。基於分解的方法在問答任務上取得了強大的性能,有時接近CoT的性能,同時提高了模型在幾個最近提出的指標上所述推理的忠實度。通過強迫模型在不同的上下文中回答更簡單的子問題,我們大大提高了模型生成的推理的忠實度,同時仍然實現了CoT的一些性能增益 不同於 CoT 每個步驟互相有關係,在 Decomposition 中子問題是獨立的問答(減少了偏見),最後在合起來問模型結論 > ihower 補充: Decomposition 這個概念下,有多篇 papers 提出不太一樣的 prompting 作法,例如: > 在 [[Full Stack LLM Bootcamp]] 提及: > Decomposed Prompting: https://arxiv.org/abs/2210.02406 > Self-Ask: https://arxiv.org/abs/2210.03350 > 在 [[The Large Language Model Revolution]] 提及: > Least to Most Prompting https://arxiv.org/abs/2205.10625 > https://learnprompting.org/docs/intermediate/least_to_most ### 評估 Claude 根據文件回答問題的能力,而不是根據 pre-training 的知識: 官方 Blog: Prompt engineering for Claude's long context window https://www.anthropic.com/index/prompting-long-context notebook : https://github.com/anthropics/anthropic-cookbook/blob/main/long_context/mc_qa.ipynb 做法: 選一份在 2023/7/13 模型訓練之後的新政府文件來做測試 拆 chunks 用 prompt 產生多選題,然後再 (相關chunk + 用隨機無關 chunks 塞滿95k長度 + 多選題) 去測試模型是否能正確回答 https://efficient-manatee.files.svdcdn.com/production/images/Prompt_Eng_pdf.pdf?dm=1695489942 用 claude 1.2 測試是因為 1.2 比 claude 2 更明顯需要 prompting 技巧協助 claude 2 就算不用這些技巧,也比 claude 1.2 加上這些技巧效果更好.... 而且 claude 1.2 Instant 速度比較快,方便你做測試。 #### 結論 ![[Pasted image 20231102165310.png]] ![[Pasted image 20231102165259.png]] * 在 doc Q&A 中,將問題放在結尾問,比放開頭好 (blog有提,notebook 沒有) * https://docs.anthropic.com/claude/docs/advanced-text-analysis#document-qa-with-citations * 相關內容放在結尾時,效果比開頭好。 * 用其他不相關的隨機 few-shots 沒幫助 * 5 shots 比 2 shots 好 * 用 scratchpad 技巧有幫助(prompt 多了 Pull 2-3 relevant quotes 再給答案) 也就是先拉出一些相關引用,再回答問題 ## Auto-labeling 用 LLM 產生 datasets,然後評估產生出來的 dataset,做 K-mean clustering 成果: https://www.evals.anthropic.com/ paper: https://arxiv.org/abs/2212.09251 ### Self-consistency 產生 N 個 samples * 用另一個模型檢查是否 consistency,如果一致就更有信心答案是對的 * 選擇最多票的 ### Nuanced distinction 微妙的差異 在很多標籤要做分類的任務中,可以加入對比的概念 ![[Pasted image 20231102165337.png]] * 提供 bad examples * 多樣的 contexts 範例 * 用類比或隱喻 * 常見錯誤觀念 ## Tips & Strategies * Formatting #1 Mistake * 注意格式正確 * ![[Pasted image 20231102165353.png]] * Formatting + Put works in Claude's month * 可以把話塞給 AI 來當作 prompt,也就是呼叫 API 時,除了 user 的問話,也給了 assistant 的回應當作範例。截圖就是一整個 prompt。 * ![[Pasted image 20231102165359.png]] * Have Claude repeat instructions back * 讓 Claude 重複你的指示 * 這個重複的指示,是你塞到模型嘴裡的,不是模型產生的。截圖就是一整個 prompt。 * ![[Pasted image 20231102165406.png]] * Let Claude hedge and say "I don't know" * 可減少幻覺 * ![[Pasted image 20231102165412.png]] * ![[Pasted image 20231102165424.png]] ## How to give good examples? * Relevance * Diversity ![[Pasted image 20231102165435.png]] ## The future of prompt engineering ![[Pasted image 20231102165443.png]] * prompt 還會有,而且會更複雜細緻 * 會有越來越多合成資料 Synthetic data * 更多用模型來做評估 * RLAIF * 產品開發會更圍繞在 prompt engineering,例如 * 自動產生標題 * 個人化 * 找到特定任務的最佳 prompt: 用最少的 token 得到最好的準確性 ## Resources * Cookbook https://github.com/anthropics/anthropic-cookbook/tree/main * Prompt Design Guide https://docs.anthropic.com/claude/docs/introduction-to-prompt-design * Our Papers * https://arxiv.org/abs/2306.16388 * https://www.lesswrong.com/posts/BKvJNzALpxS3LafEs/measuring-and-improving-the-faithfulness-of-model-generated * https://www-files.anthropic.com/production/files/question-decomposition-improves-the-faithfulness-of-model-generated-reasoning.pdf