Claude 3.5核心編碼Prompt揭秘,全網碼農沸騰!四步調教法,最新V2版放出
一則關于Claude Sonnet 3.5核心編碼的系統提示,最近在Reddit上傳瘋了!
名為ssmith12345uk用戶在r/ClaudeAI主板下面,講述了自己通過Claude代碼實踐,不斷調整系統提示來優化模型。
他表示,系統提示融合了Anthropic元提示(Meta-Prompt)的一些思路,并解決了一些之前遇到的問題。
最終,他將所有的提示詞放了出來。
AI社區的開發者們紛紛轉發收藏,紛紛表示這不就是碼農們最想要的提示么!
網友對此做了總結:ReAct + Planning + XML is all you need。
還有受益的網友稱,這一提示在自己的項目中非常有幫助。
就在昨天,原作者在Reddit社區,又發布了一個進化版的V2提示詞,并且提供了詳細的使用說明和解釋。
在解釋這些系統提示技巧之前,先回答網友們一個問題——在哪輸入?
需要創建一個項目(訂閱Pro用戶),便可以進入輸入提示指令的頁面。
Sonnet 3.5最強編碼提示,4步調教
在此,將V1和V2系統提示放在一起,讓大家更直觀感受升級后的不同。
V2版的系統提示,如下圖右所示。相較V1,基本上是小修小補。
最新版本中,依舊通過4個步驟引導模型完成CoT推理——代碼審查、規劃、輸出、安全審查。
在第一段中,Claude 3.5的角色定義,依舊保持不變。
你是一位網絡開發專家,精通CSS、JavaScript、React、Tailwind、Node.JS以及Hugo / Markdown。
只不過,再第二句時,進行了一些微調——「不要進行不必要的道歉。回顧對話歷史以避免重復之前的錯誤」。
接下來,要求Claude 3.5可以在對話中,將任務分解成獨立的步驟,并在每個階段后,建議進行一個小測試,以確保一切都在正確的軌道上。
只在需要舉例說明,或被明確要求時再提供代碼。如果可以不用代碼回答,是最好的。
但如果需要的話,會要求進一步闡述。
下一步就是「代碼審查」了——在編寫或建議代碼之前,對現有代碼進行全面的代碼審查,并在 <CODE_REVIEW> tag之間描述其工作原理。
完成代碼審查后,需要在 <PLANNING> tag之間構建變更計劃,詢問可能相關的額外源文件或文檔。
遵循DRY(Don't Repeat Yourself)原則,避免代碼重復,并平衡代碼的可維護性和靈活性。
并且,在這一步中,提出可能的權衡和實現選擇,考慮并建議使用相關的框架和庫。如果我們還沒有就計劃達成一致,就在這一步停止。
一旦達成一致,在 <OUTPUT> tag之間生成代碼。
這里,Reddit作者還提示了Claude 3.5在輸出代碼時,應該注意的事項:
注意變量名、標識符、字符串字面量(String Literals),并檢查它們是否從原始文件中準確地復制
使用雙冒號和大寫字母(如::UPPERCASE::)來表示按慣例命名的項
保持現有的代碼風格,使用適合該語言的習慣用法
生成代碼塊時,在第一個反引號后指定編程語言:比如:```JavaScript、```Python
最后,就需要對PLANNING和OUTPUT進行安全和操作審查,特別注意可能危及數據或引入漏洞的事項。
對于敏感的更改(例如輸入處理、貨幣計算、身份驗證),進行徹底的審查,并在 <SECURITY_REVIEW> tag之給出你的分析。
作者分析
接下來,一大段解釋長文中,Reddit作者用???來表示提示「迷信」,用??表示自己確信的事情。
這個提示是一個引導式「思維鏈」??提示的例子,告訴Claude要采取的步驟以及順序,并將其用作系統提示(模型接收的第一組指令)。
使用XML tag來分隔步驟的靈感來自于??Anthropic元提示。
作者認為,Claude??對XML標簽特別敏感,這可能與模型訓練有關。因此,他更傾向于單獨處理HTML或在會話末尾處理HTML???。
項目地址:https://github.com/anthropics/anthropic-cookbook/blob/68028f4761c5dbf158b7bf3d43f2f45b44111200/misc/metaprompt.ipynb#
引導式思維鏈遵循以下步驟:代碼審查、規劃、輸出、安全審查。
1 代碼審查
將結構化的代碼分析帶入上下文中,為隨后的計劃提供信息。
目的是防止LLM在不考慮更廣泛上下文的情況下,對代碼進行局部更改。作者在測試中確信這種方法是有效的??。
2 規劃
這個步驟會產生一個高層次的設計和實施規劃,以便在生成代碼之前進行檢查。
這里的「停止」避免了用生成的、不需要的、不滿足我們需求的代碼填充上下文,或者我們來回反復修改的情況。
它通常會呈現一些相關的、恰當的選項。
在這個階段,你可以深入探討規劃的細節進一步完善(例如,告訴我更多關于第3步的信息,我們能否重用Y實現,給我看一個代碼片段,關于庫該怎么考慮等)。
3 輸出
一旦規劃得到一致,就可以進入代碼生成階段。
關于變量命名的提示,是因為作者在長時間的會話中,經常遇到重新生成的代碼丟失或產生幻覺的變量名的問題,目前提示改進變似乎已經解決了這個問題???。
某個時候,作者可能會導出舊的對話并進行一些統計分析,但現在對這個方法的效果很滿意。
代碼圍欄(code fencing)提示,是因為作者切換到了一個無法推斷正確高亮的前端,并驗證了這是正確的做法??。
4 安全審查
作者更傾向于在事后進行安全審查,并發現這一步驟非常有幫助。
它提供了來自「第二雙眼睛」的審視,并可能提出新的改進建議。
解答網友問題
最后,Reddit作者還對網友們的提問,做出了答復。
我應該在Claude.ai上使用這個提示嗎?/ 系統提示應該在哪輸入?
我們并不確切知道Sonnet 3.5的官方系統提示,假設之前泄露Claude官方提示的Pliny是正確的,肯定是有幫助的。作者推測Anthropic的系統提示可能包含自動化CoT,但可能并非如此,或者輸入可能會自動通過元提示處理???。
不過,無論如何,使用這一提示,你會得到不錯的結果,除非你在使用Artifacts。
再次假設Pliny關于Artifacts的摘錄是正確的,作者在此強烈建議,在進行非瑣碎或非Artifacts相關的編碼任務時關閉Artifacts功能。
如果使用允許直接設置系統提示的工具,作者提醒要記得調整temperature參數。
我們現在不需要這么復雜的提示/我向Sonnet輸入了大量代碼,它就直接工作了
自動化的思維鏈(CoR)/默認提示確實可以解決很多問題,但請將其與一個簡單的「你是一個有幫助的AI」提示進行對比測試。
作者聲稱已經進行了這樣的測試,發現簡單提示在處理復雜問題時效果較差。
他還提到早期測試顯示了系統提示的敏感性,即不同的提示會導致顯著不同的結果,未來將考慮進行更多的批量測試來進一步驗證這一點。
他承認Sonnet 3.5在基本任務上表現出色,但同時強調,即使對于高性能的模型,適當的指導仍然有幫助。
這個提示太長了,會導致AI產生幻覺/遺忘/失去連貫性/失去焦點
作者測量了這個提示大約有546個token,而在一個200,000 token的模型中,提示長度是可以接受的。
結構化提示能夠維持上下文的高質量,有助于保持對話的連貫性并減少AI產生幻覺的風險。
目前為止,模型是基于整個上下文來預測下一個token,所以重復的高質量對話,不被不必要的來回代碼污染,可以在你需要開始新會話之前持續更長時間。這意味著可以在同一會話中進行更長時間的有效交互。
這個提示是過度設計
作者對此表示道,也許是吧。
用上的人,已融入工作流
網友驚嘆道,用過之后模型性能確實提升了。
「如果這個提示效果更好,那就說明Anthropic團隊在結合CoT或ReAct系統提示與LLM基礎能力方面所做的工作,取得了成效」。
這是給編碼助手設計的!對于這樣的任務來說,給出一些指導是有意義的。
還有的網友,已經將其中一部分提示融到自己工作流中。如下是他在新對話中總是首先加載的內容。
不過,也有一些網友表示,這個提示太過復雜。
「根據我的經驗,沒有必要使用如此全面的提示。Claude 3.5 Sonnet能夠相當自動地處理這類事情,只需偶爾進行提示澄清」。
角色提示,純屬浪費時間
Django框架的開發者Simon Willison表示,「你是xxx領域的專家」這種提示技巧,自2022年底以來,完全是浪費時間。
LLM提示所涉及的「迷信」,數量相當驚人!
這一結論竟出自,Learnprompting團隊和OpenAI、微軟合著者開展的為期一年的研究。
論文地址:https://arxiv.org/pdf/2406.06608
項目中,他們分析了超1,500篇關于提示的論文,并將其歸納為58種不同的提示技術,并對每一種提示進行了分析。
研究發現,角色提示(Role Prompting)的效果,令人震驚地差。
原因是,對于較舊的模型,它們似乎可以通過提示進入一個更好的參數空間,來獲得改進的響應/推理。然而,較新的模型可能已經處于那個改進的參數空間中。
這對于所有人來說,將是一個有建設性的猜測!
回到2022年10月,當Learnprompting發布了有史以來第一個關于ChatGPT之前的提示技巧指南時,角色提示正是當時最熱門的話題,也是所有人推薦用來獲得更好ChatGPT結果的核心技巧。
不得不承認的是,這些模型正在迅速進化,去年有效的技巧今天可能就不再有效了。
而今天有效的提示技巧,到明年可能也不再有效。
為了澄清這一問題,Learnprompting團隊對gpt-4-turbo使用了大約12不同的角色提示,測試了2000個MMLU問題。
特別是,創建了一個「天才」角色的提示例子——你是一位哈佛大學畢業的科學家...
還有一個「白癡」角色的提示——你是個笨蛋…
"genius...": "You are a genius level Ivy league Professor. Your work is of the highest grade. You always think out your problem solving steps in incredible detail. You always get problems correct and never make mistakes. You can also break any problem into its constituent parts in the most intelligent way possible. Nothing gets past you. You are omniscient, omnipotent, and omnipresent. You are a mathematical God."
"idiot...": "You are intellectually challenged, lacking problem-solving skills, prone to errors, and struggle with basic concepts. You have a limited understanding of complex subjects and cannot think straight. You can't solve problems well, in fact, you can't solve them at all. You are a terrible, dumb, stupid, and idiotic person. You fail at everything you do. You are a nobody and can't do anything correctly."
如下圖所示,不同角色提示的回答準確率,竟沒有零樣本CoT、兩個樣本CoT等策略的比例高。
不管是數學菜鳥、粗心的學生,還是富有學識的AI、警察官、青藤數學教授,全都沒用。
更有趣的是,被稱為「天才」的GPT-4,在回答準確率上,破最低記錄58.7%。
而被稱為「白癡」的GPT-4,得分還要比「天才」GPT-4高。
而另一項來自密歇根大學團隊的研究,很好地闡釋了不同社會角色提示,如何影響模型整體的性能。
他們在2457個MMLU問題上進行了測試,發現表現最好的角色是(紅色)——警察、有用的助手、伙伴、導師、AI語言模型、聊天機器人。
論文地址:https://arxiv.org/pdf/2311.10054
對于大模型提示「迷信」,Willison做了一個生動有趣的比喻:
我把這種情況比作一只狗在灌木叢中找到了一個漢堡,然后在接下來的幾年里每次經過那個灌木叢時都會去檢查是否有漢堡。我們需要比狗更加理性。
不過,他澄清在某些情況下,給AI語言模型賦予特定角色是有用的,但強調這應該基于合理的思考和具體情況。
還有網友表示,一步一步思考,依舊是永恒不變的定理。