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