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