
做技術這么久我越來越發現一個道理人和人之間、團隊和團隊之間真正的差距不在信息獲取而在“把信息變成可復用能力”這件事上。最近圈子里都在聊一個詞——skills也就是“技能”。這個詞看著簡單但背后牽扯的東西其實很深它既是AI Agent領域的一個具體技術概念也是個人成長和組織協作里繞不開的核心命題。今天我就以“skills”為主線把我在實際項目里對技能體系的理解、搭建方法、踩坑記錄一次講清楚不管你是做AI應用開發的工程師還是想給自己做能力規劃的職場人這篇文章應該都能給你一些可以落地的參考。1. 內容整體設計與思路拆解先說清楚一個容易被混淆的點“skills”在當下的技術語境里至少有兩個層面的含義。一個層面是AI Agent里的“技能模塊”——你可以把它理解成給大模型外掛的一套標準動作讓模型在特定場景下不用從零現想直接調用你封裝好的方法另一個層面是人本身的“技能棧”——也就是你作為一個工程師、一個創作者、一個管理者手里到底握著哪些解決具體問題的能力組合。這兩個層面看著不挨著但底層邏輯是同一套都是把復雜任務拆成可復用單元再用一套機制去調度它們。我在設計自己的技能體系時最核心的思路就是“可復用優先”。什么意思就是不管寫代碼還是做項目復盤我會先問自己一個問題這件事我做過幾次了如果超過三次那它就值得被沉淀成一個標準化的技能模塊而不是每次重新手搓。以AI Agent的技能模塊為例它解決的核心痛點是大模型本身是“通才”但實際業務需要的是“專才”。你讓它寫一段周報它能寫你讓它按你們部門的格式、語氣、匯報結構來寫它就開始胡來了。技能模塊做的事情就是把“你們部門周報怎么寫”這個領域知識固化成一套提示詞加腳本的集合體讓模型在需要時直接加載這套上下文而不是靠臨時發揮。這種方案選型的優勢很直接。第一個是快模型調用技能的開銷遠小于讓它現場推理一套流程第二個是穩技能模塊的輸入輸出是可預期的不像自由對話那樣飄第三個是可沉淀你每做一次項目留下的代碼、文檔、流程都能變成團隊資產而不是留在某個人腦子里。當然它也有取舍。最大的代價是維護成本上來了技能模塊一旦多起來命名、分類、版本管理都是事另一個代價是靈活性下降模型被技能框架約束住了很難再跳出你給的路徑去“自由發揮”。這就要求你在設計技能粒度時拿捏好分寸——太粗了等于沒封裝太細了又變成死流程。1.1 為什么“技能化”比“流程化”更適應現在的工作方式我見過很多團隊搞標準化最后都變成了寫SOP文檔、做流程圖。SOP有沒有用有用但它有一個致命問題——它是給人看的不是給系統執行的。真正落地的時候人不會百無聊賴去翻SOP模型更不會。而“技能”這個概念的巧妙之處在于它是把SOP、工具調用、上下文約束打包成一個可執行單元既能被人類理解也能被機器調用。打個比方你就明白了。傳統流程化像是給員工發一本《餐廳服務手冊》——內容寫得再詳細新來的服務員也得花三個月才能內化成自己的動作技能化則是直接給你一套“標準動作包”——每個動作都有觸發條件、執行步驟、輸出格式你照著做一遍就能達到老師傅八成功力。在AI時代這套“標準動作包”可以直接注入給大模型讓它從“知道”變成“能做到”。所以我在給團隊搭能力體系時堅持一個原則能封裝成技能的絕不止步于寫成文檔。因為文檔是靜態的技能是活的——它可以被測試、被迭代、被復用、被組合。這也是為什么現在主流AI框架都在推“技能市場”的概念本質就是讓人和人之間共享“能力包”。1.2 從AI技能到個人技能同一套底層邏輯再說回個人層面。我自己在做年度規劃的時候會刻意把所有能力拆成一張“技能清單”然后給每個技能標注等級、適用場景、最近使用時間。這么做的好處是當機會來臨時我能迅速判斷自己能不能接得住而不是含糊地覺得“我應該可以吧”。個人技能和AI技能的設計邏輯驚人地相似都需要明確定義、需要有可驗證的輸入輸出、需要有迭代機制。比如“寫技術方案”這個技能我可以把它拆成“需求澄清—方案選型—風險評估—成本測算—交付評審”五個子技能每個子技能都可以單獨訓練和評估。這就像AI里的技能模塊一樣組合起來是一個高階能力拆開來又是可以單獨打磨的基礎單元。2. 核心細節解析與實操要點如果你要上手搭建自己的技能模塊——不管是給AI還是給自己用——有幾個核心細節值得琢磨。我一個個說每個都是實打實踩過坑之后總結出來的。2.1 技能的定義要偏“行為”而不是偏“知識”這是最容易犯的錯。很多人設計技能時喜歡寫成“掌握Python編程”——這頂多算一個領域標簽不是技能定義。真正的技能定義應該包含行為動詞、適用條件、輸出物。比如“使用Python編寫數據清洗腳本輸入為臟數據CSV文件輸出為可直接入庫的規范化表格”——這才是一個合格的技能定義因為它可執行、可測試、可量化。放到AI Agent的場景里也是一樣。一個技能模塊的描述如果寫得太寬泛模型壓根不知道該什么時候觸發它。我見過有人給模型配了一個技能叫“代碼生成”結果模型在所有場景下都想調用它包括用戶只是在問“今天天氣怎么樣”——這就是描述寫得像標簽、不像行為的典型后果。2.2 上下文注入的“不多不少”原則在AI技能模塊的設計里最精細的活兒是上下文管理。你要記住一個事實大模型的上下文窗口是有限的你給它塞的技能說明越詳細它能用來承載真實用戶需求的空間就越少。這就像一個工具箱你放進去的說明書越厚留給實際工具的空間就越小。我常用的方法是“金字塔式”的上下文注入最頂層只放技能的一句話描述用于觸發判斷中間層放執行步驟概述用于規劃最底層放詳細指令和代碼示例用于真正執行。模型加載技能時先看頂層決定要不要用確認用之后再逐層加載底層內容。這和操作系統里的惰性加載是一個思路有效減少上下文浪費。2.3 腳本與配置分離技能才會好維護另一個實戰經驗是把“邏輯”和“參數”分開。很多工程背景不深的朋友做技能封裝時喜歡把API地址、密鑰、規則參數全寫死在提示詞里。看起來方便改起來想哭——你每換一次密鑰就要改一遍技能內容每調整一個參數就得重新測試一遍模型響應。更合理的做法是技能的核心指令放在SKILL.md這種說明文件里而把頻繁變動的參數放到獨立配置文件或通過環境變量注入。這樣一來技能的邏輯保持穩定變化的部分交給外部配置。我在實際項目里甚至會讓部分參數通過用戶在對話里指定而不是硬編碼在技能里這樣技能的可復用性會高一個量級。2.4 技能要有“驗收標準”做軟件的人都知道要有測試用例但做技能的人往往忽略這件事。技能不是寫完就完了你必須給它設計驗收標準——什么輸入算正確觸發、什么輸入應該拒絕、輸出格式是否符合下游要求。沒有驗收標準的技能就像沒有質檢的流水線今天跑通了你以為是運氣明天跑不通了你還不知道為什么。我給自己定的規矩是每個技能至少配套三個測試用例一個標準場景、一個邊界場景、一個異常場景。例如做會議紀要提取技能標準場景是普通周會的音頻轉文字邊界場景是多人同時說話導致文字重疊異常場景是純噪聲音頻。三個用例都過了我才認為這個技能“能上生產”。3. 實操過程與核心環節實現理論說了一堆接下來進入實操。我以當前大模型Agent開發中最常見的“技能模塊”為例帶大家完整走一遍從設計到落地的過程。我會用類似Claude的Agent Skills風格來做演示因為你只要理解原理遷移到別的平臺是一樣的。3.1 從0到1定義一個“天氣速查”技能模塊我選這個例子是因為它足夠簡單但又覆蓋了技能模塊的完整生命周期。我們的目標是讓AI Agent在用戶問天氣時自動調用外部天氣API返回結構化天氣信息而不是靠模型自己“編”一個天氣出來。第一步先建目錄結構。通常一個技能模塊是一個獨立目錄里面包含說明文件和資源文件skills/ └── weather-check/ ├── SKILL.md ├── scripts/ │ └── weather.py └── assets/ └── city_codes.jsonSKILL.md是這個技能的靈魂它告訴模型“你什么時候該用這個技能”“用的時候怎么用”。city_codes.json放城市編碼映射數據weather.py負責真實調用天氣API。目錄拆成這樣好處一目了然指令和數據分離邏輯和資源分離。第二步寫SKILL.md。這是最關鍵的一步里面要包含元信息、觸發條件、執行流程和輸出格式。給你看一個我實際使用的精簡版本--- name: weather-check description: 當用戶詢問任意城市的當前天氣、溫度、降水概率、風力等級或未來天氣預報時使用該技能。支持中文城市名或城市編碼。 --- 1. 先從 user 消息中提取城市名在 city_codes.json 中匹配城市編碼。 2. 若匹配失敗向用戶確認城市名稱不嘗試猜測編碼。 3. 使用天氣API獲取數據超時設為5秒。 4. 將結果轉化為中文自然語言描述包含天氣現象、溫度范圍、濕度、風力和穿衣建議。寫這個文件時最大的坑就是你容易把它寫成“API文檔”而不是“行為指示”。記住模型不關心你的API有幾十個參數它只關心“按什么順序做什么事”。所以SKILL.md要寫決策邏輯和行為步驟而不是參數枚舉。第三步寫可執行腳本。腳本是技能和外部世界交互的橋梁它負責真正去調用API、解析數據、返回結構化的中間結果import json import sys import urllib.request def fetch_weather(city_code): url fhttps://api.example.com/weather?city{city_code} req urllib.request.Request(url) with urllib.request.urlopen(req, timeout5) as resp: return json.loads(resp.read()) if __name__ __main__: city_code sys.argv[1] data fetch_weather(city_code) # 只輸出模型后續處理所需的最小字段 print(json.dumps({ weather: data[current][condition], temperature: data[current][temp_c], humidity: data[current][humidity], wind_kph: data[current][wind_kph] }, ensure_asciiFalse))注意腳本輸出是JSON而不是寫好的完整句子。這是刻意為之——具體怎么組織語言是模型的強項腳本不需要代勞腳本只負責把結構化的“事實”拿回來表達交給模型。這種分工能最大化發揮雙方優勢。第四步測試技能觸發。這是集成環節把技能放進Agent環境里跑三個用例標準場景“北京今天多少度”邊界場景“東京天氣怎么樣”確保編碼能匹配異常場景“幫我寫一首關于雨的詩”應該不觸發天氣技能。只有三種場景全部符合預期這個技能才算驗收通過。3.2 升級技巧讓技能支持“多步推理”基礎技能只能做“用戶問→技能答”這種簡單對應但真實業務往往是鏈式的。比如用戶說“幫我規劃一個適合晨跑的時間”——這背后涉及天氣查詢技能、限行查詢技能、個人日程技能等多個模塊的協同。解決這個問題的思路是“技能編排”。我實踐過兩種方案一種是在頂層配置編排規則比如“涉及多個技能的請求先執行數據查詢類技能再執行建議類技能”另一種是讓模型自己決定技能調用順序前提是你給每個技能的描述足夠準確模型能判斷出先后依賴關系。實際測試下來第二種方案在技能數量超過五個以后就會開始出錯——模型經常搞錯依賴順序。我的建議是關鍵鏈路上用顯式編排非關鍵鏈路允許模型自由調度。也就是“規則保住下限模型決定上限”這套組合目前看是最穩的。3.3 個人技能體系搭建的落地方法技術方案講完再給你分享一個我給自己做的個人技能庫模板。我不用什么高級工具就用一個表格加上定期review機制但效果非常好。表格核心就五列技能名稱、當前等級入門/熟練/精通、最近使用時間、可遷移到的場景、下一步提升計劃。每個季度我會花兩小時做一次review把用過三次以上的臨時方法升級成正式技能把半年沒用且沒有復用可能的技能降級或淘汰。這個方法的魔力在于“復利效應”。剛建庫的第一個季度我的技能庫只有六個技能到第三個季度已經沉淀到二十一個而且每個都是經過實戰檢驗的。更奇妙的是技能之間有“組合爆炸”的效果——“寫技術方案”加上“AI提示詞工程”就能衍生出“用AI輔助寫技術方案”這個高價值復合技能。這種衍生能力是一個人最值得投資的長期資產。4. 常見問題與排查技巧實錄做技能相關項目這么久我整理了一份高頻問題的排查清單幾乎每個都是血淚換來的。你如果準備搭建自己的技能體系這些問題大概率會遇到。4.1 技能觸發不準老是“該用的不用、不該用的亂用”這是最讓人頭疼的問題明明配置好了技能模型就是不按預期觸發。排查路徑有兩條。第一檢查技能描述是否具體到“可判定的行為”——看描述里有沒有明確的觸發場景詞和排除條件。描述寫“當用戶需要天氣信息時使用”就是典型的垃圾描述改成都寫成“當用戶提及具體城市名且詢問氣溫、降水、風力等當前氣象數據時使用”觸發準確率能翻幾倍。第二檢查上下文中技能相關內容的可見位置。模型對不同位置的上下文敏感度不同——并不是所有模型都一視同仁處理你的上下文。實測下來越靠近系統指令末尾的技能列表越容易被模型“注意到”。所以如果你的技能老是觸發不了試著把技能列表挪到上下文靠后的顯眼位置。4.2 技能執行到一半就中斷或者輸出格式不符合下游預期這種情況通常不是模型的問題而是技能內部缺少“錯誤恢復機制”。比如前面舉例的天氣技能如果API超時了模型應該怎么辦是重試、換城市編碼還是坦誠告訴用戶“暫時獲取不到數據”這些分支在SKILL.md里必須寫清楚。我習慣在SKILL.md里加一個step 0先判斷輸入合法性再決定走正常流程還是異常流程。文件里的內容不是給模型“參考”的而是給模型“執行”的你寫得越像程序邏輯模型跑得越穩。輸出格式不符合預期的問題也很常見解決方法是把輸出格式直接結構化定義在文件末尾比如說要求模型按“什么字段在前、什么字段在后”的JSON格式輸出或者干脆讓它調用一段schema校驗腳本來自查。4.3 技能庫膨脹后選擇困難癥開始發作技能少的時候每個都像個寶貝技能一旦超過二十個你會發現瓶頸不在“能不能做”而在“選擇哪條路徑做”。這個問題在AI Agent和人類身上同時存在模型面對二十個技能不知道該觸發哪個我面對二十個能力不知道該主打哪個。給AI的解法是建“技能分類索引”分為數據獲取類、分析推理類、內容生成本類模型先判斷請求屬于哪一類再在該類下檢索具體技能復雜度從線性搜索O(n)降到了對數級別。給我的解法更簡單粗暴每個月月初定三個“本月主打技能”其余技能只要不拖后腿就行——減少選擇本身就是一種提效。4.4 安全與權限邊界怎么劃技能一旦接入真實業務安全就必須提上日程。一個常見的風險是“提示詞注入式攻擊”——用戶可能在對話里惡意拼接指令試圖誘導模型調用某個具有敏感操作能力的技能。我的做法是給技能分權只讀類技能默認開放寫操作類技能需要用戶二次確認涉及支付、發文、刪除等高風險操作類技能則改為“只生成操作指令不在對話內直接執行”的流程。目前我踩過的最深的一個坑是某個團隊成員把需要管理員權限的部署命令封裝成技能結果被一個外部用戶在對話中誘導觸發雖然最后沒有造成實際損失但這件事讓我意識到技能的調用權限一定要參考“最小權限原則”永遠默認不給多余能力。每次添加新技能之前我都會多問一句這個技能真的需要能觸發外部寫操作嗎“鏈接外部工具”這個動作永遠要按“需要專門的開關”來判斷而不是默認放行。4.5 快速定位問題的通用排查方法論結構化排查是讓問題不至于變成事故的關鍵。我先看技能是否被觸發沒觸發查入口描述和上下文位置觸發了但結果不對再看執行過程中是哪一步跑偏了如果執行步驟都對但輸出不行極大概率是輸出約束寫得不夠死。我建了一個排查清單“技能列表—觸發描述—上下文位置—執行日志—輸出格式”按這個順序逐項排查通常三到五輪就能定位根因。5. 迭代路徑與進階方向技能建設不是一個一次性的工程項目它更像養植物關鍵靠持續維護和適當修剪。已經跑通基礎流程的朋友接下來有幾個方向值得花力氣。5.1 讓技能具備自修復能力第一代技能是“模型調用”第二代技能就得學會“自我體檢”了。我給一個重要業務技能建了“運行日志回溯機制”每次調用后記錄執行時間和結果質量每周回顧一次把失敗率驟增的技能挑出來重新打磨。前幾天我們團隊一個聚合信息技能突然頻繁觸發失敗排查小半天發現是上游API悄悄改了響應字段名。有了日志回看習慣之后這類問題的影響面就能控制在“被用戶發現之前”的程度而不是等用戶來反饋。自修復能力的本質不只是讓技能自身變得更穩健而是讓維護者把技能當成一個需要持續照看的系統而不是一次性用途的工具。5.2 從單技能走向技能生態單個技能再強價值也是線性的多個技能一旦產生連接價值就成了指數型。我見過有人把“信息獲取類”技能和“內容撰寫類”技能串成一條流水線自動完成“收集競品動態—提煉關鍵趨勢—生成分析簡報”的全流程效率提升肉眼可見地驚人。打通技能的關鍵在于統一接口所有技能的輸入和輸出都要是結構化的信息實體描述、指令意圖和返回結果的數據格式。一旦做到這一點再做技能組合時就像搭樂高一樣簡單。反過來說技能的輸入輸出如果只是推薦性的自然語言靠模型理解去銜接那不同技能之間幾乎不可能滿足“無縫拼接”的要求。5.3 復利效應給技能加“時間維度”最后聊一個很多人忽略的維度時間。一個好技能在剛建成時和運行半年后價值是完全不同的。因為技能可以被持續喂養新數據和經驗每用一次它的準確度和適應性就可能提升一點。我給自己的個人技能庫加了“每周反饋”機制——每次用完某個技能不管順利還是翻車都簡單記一句“這次哪里順、哪里卡”。半年下來這些“反饋記錄”反而比技能本身更值錢因為它們記錄了我的思維模式和高頻錯誤。技能的定義決定你“能做什么”反饋記錄則告訴你“該改哪里”。這兩者疊加才構成了一個人或一個系統真正的進化能力。根據我個人經驗最難的不是建好第一個技能而是保持那個“不斷拆解、不斷封裝、不斷復盤”的節奏。技能體系這東西短期看它只是工具長期看它會反過來塑造你的工作方式——你開始習慣性地把模糊需求變成可執行模塊把偶然的成功變成可復制的流程。這個習慣一旦養成不管技術怎么變、市場怎么變你都永遠拿著主動權。