TwKit
正在载入
TwKit

# 函數寫好了 Claude 還是不叫,憑什麼怪模型瞎?官方拆台:不是函數寫錯了,是你沒給它寫說明書 官方來源:Anthropic Academy《Buil… · @swordBluesy · TwKit

@swordBluesy

# 函數寫好了 Claude 還是不叫,憑什麼怪模型瞎?官方拆台:不是函數寫錯了,是你沒給它寫說明書 官方來源:Anthropic Academy《Building with the Claude API》第 16 課。課頁未標注發布日期,故此處不寫日期。原文標題直譯:《工具模式》。先把反常識結論放前面:函數不是寫好就完事——你寫的函數模型看都看不懂,它拿什麼叫你?函數是手,模式是說明書,手長得再好,沒有說明書告訴模型這隻手什麼時候伸、怎麼伸,它就只能站在旁邊乾瞪眼;說明書沒寫,函數就等於沒寫。 說清詞: - 工具模式(tool schema):用 JSON 寫的一份說明書,告訴 Claude 你的函數吃什麼參數、怎麼叫。 - JSON 模式(JSON schema):流傳多年的通用數據驗證規範——描述資料長什麼樣子、驗證資料合不合格,AI 圈拿它來描述函數參數。 - 名字(name):工具規範的第一樣——清楚、有描述性的工具名字,像 get_weather,一看就知道是查天氣的。 - 描述(description):工具規範的第二樣——工具做什麼、什麼時候用、回傳什麼,三到四句話講清楚。 - input_schema:工具規範的第三樣——描述函數參數的 JSON 模式本體,參數叫什麼、是什麼型別、哪個必填,都寫在這裡。 - ToolParam:Anthropic 函式庫裡的一個型別——拿來給模式加一層型別安全,擋住型別錯誤。 一個真實的例子:課內拿天氣函數開刀。get_weather 這個函數你第 15 課已經寫好了,名字清楚、參數會驗、報錯寫得明白——但模型還是叫不動它,為什麼?因為模型只看到一個函數,不知道它吃什麼:地點這個參數叫什麼名字?是不是字串?是不是必填?沒人告訴它。寫了模式就不一樣:input_schema 是個物件,裡面有一個必填的字串參數 location——模型讀完就知道,查天氣要先給地點,地點是字串、不能空。你猜模型第一次叫 get_weather 沒給地點,問題出在哪?出在模式沒寫清楚:名字、描述、參數三樣少一樣,模型就得猜,猜錯了就叫不動。眼熟的進化路線也正是這條:從第 1 課的單次請求,到第 2 課的帶歷史多輪對話,到第 3 課的定角色系統提示詞,到第 4 課的調溫度,到第 5 課的流式輸出,到第 6 課的結構化數據,到第 7 課的提示詞評估,到第 8 課的代碼評分,到第 9 課的 XML 標籤,到第 10 課的提供示例,到第 11 課的清晰直接,到第 12 課的具體明確,到第 13 課的工具使用入門,到第 14 課的專案總覽,到第 15 課的工具函數,再到本課的工具模式——前面是把調用調通、把輸出調順、把評估搭起來、給提示詞劃界線、把好樣子擺出來、把第一句寫清楚、把要求說死、給模型開一扇伸手拿數據的門、把提醒專案的三個短板列出來、動手寫第一個函數,這課是給函數寫說明書:手長出來了還不夠,得把「這隻手怎麼用」寫給模型看,不然門開了、接應的人也到了,模型還是站在門口不知道往哪走。 反方適用條件清單——以下情況,不必先按三樣東西寫模式,先說清楚,免得把本課讀成教條: - 函數還沒寫好、連它做什麼都沒定:先回第 15 課把函數寫好,模式是寫給現成函數的說明書,不是寫給空氣的。 - 函數只會被你自己在程式碼裡叫、模型永遠不會碰它:說明書是寫給模型看的,模型不叫就不用寫。 - 工具只有一個參數、名字本身就講得一清二楚:模式照樣要寫,但描述可以短一點,三樣東西不能少。 - 還在試驗階段、函數長什麼樣天天在改:先把函數定下來再寫模式,邊改邊寫說明書,寫完就過期。 - 除此之外,只要是「模型要叫的函數」——名字、描述、input_schema 三樣就得寫齊,沒有第二種寫法。 一句定性金句:函數是手,模式是說明書;沒有說明書的手,模型不敢伸手。 ### 一、翻車清單 - 函數寫好就收工:以為函數能跑就是完事,模型連它吃什麼參數都不知道,叫都不敢叫。 - 名字寫得含糊:工具名字一看不知道是幹嘛的,模型在工具清單裡翻半天翻不到它。 - 描述只寫一句話:做什麼講了一半,何時用、回傳什麼全沒寫,模型叫了也不知道用在哪。 - 參數描述留白:input_schema 裡參數列了名字,沒寫是什麼型別、哪個必填,模型傳錯了都不知道錯在哪。 - 必填沒標清楚:location 是必填的,模式裡沒標,模型以為可給可不給,不給就翻車。 - 模式從零手寫、寫錯格式:JSON 括號少一個、欄位拼錯,模型讀到壞掉的說明書,比沒說明書更慘。 - 模式寫完不放進程式碼:生成好了存在筆記裡,程式碼裡還是只有函數,模型照樣看不到。 - 函數改了、模式沒跟著改:函數加了新參數,模式還是舊的,模型照舊模式叫新函數,叫一次錯一次。 ### 二、替代方案+理由 課內給的替代方案就是三樣東西加一個捷徑:第一,名字——清楚、有描述性的工具名字;第二,描述——三到四句話,講清楚做什麼、何時用、回傳什麼,每個參數都要有詳細描述;第三,input_schema——參數叫什麼、什麼型別、哪個必填,全寫進去;再加一個捷徑:模式不用手寫,叫 Claude 自己寫——把函數程式碼複製給它,附上官方文件當上下文,照最佳實踐生成。理由有三:第一,說明書是模型叫工具的唯一依據——模型看不到你的程式碼,只能看到模式,模式寫得清楚,叫對的機率就高;第二,描述寫得好等於先排了雷——何時用、回傳什麼先講明白,模型就不會在不該叫的時候亂叫;第三,捷徑是拿官方文件當標準答案——叫 Claude 照著文件寫,格式對、欄位全,比你自己從零手寫又快又穩。先把「名字寫清、描述寫滿、參數寫死、模式叫 Claude 寫」這條規矩寫穩,後面所有「函數寫好了模型卻不叫」的問題都是在它上面加東西。 ### 三、目標形態 一份模型看得懂的說明書:名字一看就知道幹嘛,描述三到四句話講清楚做什麼、何時用、回傳什麼,每個參數的型別和必填都寫死,模式跟函數成對放在程式碼裡,函數改了模式跟著改;新同事接手一看模式,就知道這個工具怎麼叫、參數怎麼傳,不用再問。 ### 四、遷移步驟 1. 先把你現在的函數單獨拎出來:名字、描述、參數三樣,現在寫了幾樣?一樣沒寫就先補,別急著改別的。 2. 名字先改清楚:像 get_weather 這樣,一看就知道是幹嘛的,含糊的名字先改名。 3. 描述寫三到四句話:做什麼、何時用、回傳什麼,三句缺一句就補一句。 4. 每個參數寫詳細描述:參數叫什麼、是什麼型別、哪個必填,寫進 input_schema。 5. 模式叫 Claude 幫你寫:函數程式碼複製給它,附上 Anthropic 的工具使用文件,叫它照最佳實踐生成。 6. 生成好的模式複製進程式檔案:命名用「函數名」加上「_schema」,函數和模式成對放好。 7. 從 Anthropic 函式庫 import ToolParam 加一層型別安全,擋住型別錯誤。 8. 用天氣例子驗一遍:模式拿掉,模型還知道地點是必填字串嗎?不知道就回去補。 ### 五、團隊共建分工 - 一個人審名字:新工具上線前只看名字——一看不知道幹嘛的就打回去。 - 一個人審描述:描述三到四句話,做什麼、何時用、回傳什麼缺一句就打回去。 - 一個人審參數:每個參數的型別和必填寫沒寫清楚由他負責,含糊的就打回去。 - 一個人管模式生成:模式一律叫 Claude 照官方文件寫,手寫的模式先過一遍格式再放進程式碼。 ### 六、官方工具包 - 工具模式:用 JSON 寫的說明書,告訴 Claude 函數吃什麼參數、怎麼叫。 - JSON 模式:流傳多年的通用數據驗證規範,AI 圈拿來描述函數參數、驗證資料。 - 完整工具規範三樣:名字(name)、描述(description)、input_schema。 - 描述寫法:三到四句話,講清楚做什麼、什麼時候用、回傳什麼;每個參數都要有詳細描述。 - 天氣例子:get_weather 的 input_schema 是個物件,有一個必填的字串參數 location。 - 生成捷徑:函數程式碼複製給 Claude,附上 Anthropic 工具使用文件,叫它照最佳實踐寫模式。 - 命名習慣:函數叫什麼名字,模式就叫「函數名」加上「_schema」。 - 型別安全:從 Anthropic 函式庫 import ToolParam,不是非要不可,但能擋住型別錯誤。 - 課內收束:模式寫好之後,就是把它接到對話系統裡,讓 Claude 真正開始叫工具。 結尾收束:原則比架構重要——函數不是寫給人看的作品,模式也不是寫給人看的文件,兩樣都是寫給模型看的;你寫函數時想的是「跑得起來」,模型想的是「我看不看得懂」,兩邊想的不一樣,函數就白寫了。可重複的動作規則只有一條,每次寫完一個新函數問自己一句:名字寫清楚了嗎、描述三到四句話寫滿了嗎、每個參數的型別和必填寫死了嗎——三問答完再收工,沒答完就先把缺的那一樣補上。把這句話寫成習慣、寫成模板,「函數寫好了模型卻不叫」就從玄學變成了手藝。 S1哥觀點:別再罵模型不叫你的函數了——你函數寫得再漂亮,沒給它寫說明書,模型連它吃什麼參數都不知道,叫一次猜一次,猜錯了就不敢再叫了,它錯在太謹慎,你錯在以為函數寫好就完事。更值得問的是:你現在最常用、卻一次都沒被模型叫過的那個函數,名字、描述、參數三樣寫齊了,模型會不會叫它?先把說明書補上再罵也不遲。你的函數,有說明書嗎?評論區說說。 收藏用清單(照著做): 1. 名字先改清楚,一看就知道是幹嘛的。 2. 描述寫三到四句話:做什麼、何時用、回傳什麼,缺一句就補一句。 3. 每個參數寫清楚型別和必填,寫進 input_schema。 4. 模式叫 Claude 照官方文件寫,生成好複製進程式碼,命名用「函數名」加「_schema」。 轉給還在寫「函數寫好模型卻不叫」的朋友,這篇他今天就能用上。 #Claude中文教程

曝光 63 · 评论 4 · 点赞 2 · 书签 0

查看原帖