Minion Skills:Claude Code Skills的開源實(shí)現(xiàn)

Minion Skills:Claude Code Skills的開源實(shí)現(xiàn)

引言

Claude Code最近推出了一個令人興奮的特性——Skills系統(tǒng)。它讓AI Agent能夠動態(tài)加載專業(yè)能力,按需"學(xué)習(xí)"處理PDF、Excel、PPT等專業(yè)文檔的技能。

作為一個開源愛好者,我立刻意識到這個設(shè)計的價值,并在Minion框架中實(shí)現(xiàn)了完整的開源版本。本文將介紹Skills的設(shè)計理念,以及我的開源實(shí)現(xiàn)細(xì)節(jié)。

Skills解決了什么問題?

在開發(fā)AI Agent的過程中,有一個核心矛盾:

Context Window的有限性 vs 能力需求的無限性

傳統(tǒng)做法是把所有工具、所有指令都塞進(jìn)system prompt:

System Prompt = 基礎(chǔ)指令 + 所有工具描述 + 所有專業(yè)知識
? ? ? ? ? ? = 50K+ tokens
? ? ? ? ? ? = 高延遲 + 高成本 + 低效率

更糟的是,大多數(shù)時候用戶只需要其中一小部分能力。當(dāng)用戶問"幫我處理這個PDF"時,系統(tǒng)卻加載了處理Excel、數(shù)據(jù)庫、代碼等所有能力的上下文。

Skills的核心理念

Claude Code的Skills設(shè)計靈感來自一個簡單的類比:

人類專家不是把所有知識都裝在腦子里,而是在需要時查閱手冊、調(diào)用專業(yè)知識。

Skills系統(tǒng)讓AI Agent也具備這種能力:

用戶請求 → Agent識別需要PDF技能 → 動態(tài)加載PDF處理指令
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?→ 執(zhí)行專業(yè)任務(wù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?→ 返回結(jié)果

Minion的開源實(shí)現(xiàn)

看到Claude Code的Skills設(shè)計后,我決定在Minion框架中實(shí)現(xiàn)一個完全兼容的開源版本,讓更多開發(fā)者能夠使用這一特性。

1. Skill的定義:簡潔而強(qiáng)大

每個Skill就是一個包含SKILL.md文件的目錄:

.minion/skills/
├── pdf/
│? ?├── SKILL.md? ? ? ? ? # 技能定義和指令
│? ?├── references/? ? ? ?# 參考資料
│? ?├── scripts/? ? ? ? ? # 輔助腳本
│? ?└── assets/? ? ? ? ? ?# 資源文件
├── xlsx/
│? ?└── SKILL.md
└── docx/
? ? └── SKILL.md

SKILL.md采用YAML frontmatter + Markdown body的格式:

---
name: pdf
description: PDF文檔處理技能,支持文本提取、表格解析、表單填寫等
license: MIT
---


## 當(dāng)使用此技能時


你現(xiàn)在具備了專業(yè)的PDF處理能力...


### 文本提取
使用pypdf2庫進(jìn)行文本提?。?br>...


### 表格識別
使用tabula-py進(jìn)行表格提?。?br>...

2. 智能發(fā)現(xiàn):按需加載

Skill Loader會在多個位置搜索可用技能:

class SkillLoader:
? ? SKILL_DIRS = [
? ? ? ? ".claude/skills",? ?# 兼容Claude Code
? ? ? ? ".minion/skills",? ?# Minion原生
? ? ]


? ? def get_search_paths(self):
? ? ? ? paths = []
? ? ? ? # 項(xiàng)目級優(yōu)先
? ? ? ? for skill_dir in self.SKILL_DIRS:
? ? ? ? ? ? paths.append((self.project_root / skill_dir, "project"))
? ? ? ? # 用戶級次之
? ? ? ? for skill_dir in self.SKILL_DIRS:
? ? ? ? ? ? paths.append((self.home_dir / skill_dir, "user"))
? ? ? ? return paths

這種分層設(shè)計帶來了靈活性:

  • 項(xiàng)目級Skills:針對特定項(xiàng)目的專業(yè)能力
  • 用戶級Skills:跨項(xiàng)目的通用能力
  • 優(yōu)先級機(jī)制:項(xiàng)目級覆蓋用戶級,允許定制化
  • 兼容性:同時支持.claude/skills.minion/skills路徑
  • 3. 優(yōu)雅的注冊表:快速查找

    class SkillRegistry:
    ? ? def register(self, skill: Skill) -> bool:
    ? ? ? ? """注冊技能,高優(yōu)先級覆蓋低優(yōu)先級"""
    ? ? ? ? existing = self._skills.get(skill.name)
    ? ? ? ? if existing:
    ? ? ? ? ? ? priority = {"project": 0, "user": 1, "managed": 2}
    ? ? ? ? ? ? if priority[skill.location] >= priority[existing.location]:
    ? ? ? ? ? ? ? ? return False? # 已有更高優(yōu)先級的同名技能


    ? ? ? ? self._skills[skill.name] = skill
    ? ? ? ? return True


    ? ? def generate_skills_prompt(self, char_budget=10000):
    ? ? ? ? """生成可用技能列表,控制context消耗"""
    ? ? ? ? # 智能截斷,確保不超預(yù)算
    ? ? ? ? ...

    4. Skill Tool:執(zhí)行入口

    class SkillTool(BaseTool):
    ? ? name = "Skill"
    ? ? description = "動態(tài)加載并執(zhí)行專業(yè)技能"


    ? ? def execute_skill(self, skill: str) -> Dict[str, Any]:
    ? ? ? ? skill_obj = self.registry.get(skill)


    ? ? ? ? if skill_obj is None:
    ? ? ? ? ? ? return {
    ? ? ? ? ? ? ? ? "success": False,
    ? ? ? ? ? ? ? ? "error": f"Unknown skill: {skill}",
    ? ? ? ? ? ? ? ? "available_skills": self.registry.list_all()[:10]
    ? ? ? ? ? ? }


    ? ? ? ? # 獲取技能的完整指令
    ? ? ? ? prompt = skill_obj.get_prompt()


    ? ? ? ? return {
    ? ? ? ? ? ? "success": True,
    ? ? ? ? ? ? "skill_name": skill_obj.name,
    ? ? ? ? ? ? "prompt": prompt,? # 注入到對話上下文
    ? ? ? ? }

    實(shí)際效果

    場景1:處理復(fù)雜PDF報告

    用戶:幫我分析這份財務(wù)報告 report.pdf,提取所有表格數(shù)據(jù)


    Agent:
    1. 識別需要PDF處理能力
    2. 調(diào)用 Skill("pdf") 加載PDF技能
    3. 獲得專業(yè)的PDF處理指令
    4. 使用pypdf2提取文本
    5. 使用tabula-py提取表格
    6. 返回結(jié)構(gòu)化數(shù)據(jù)

    場景2:批量處理Excel文件

    用戶:把這10個Excel文件合并,并生成匯總統(tǒng)計


    Agent:
    1. 調(diào)用 Skill("xlsx") 加載Excel技能
    2. 獲得pandas、openpyxl等庫的專業(yè)用法
    3. 批量讀取文件
    4. 合并數(shù)據(jù)、計算統(tǒng)計
    5. 生成新的Excel報告

    性能對比

    指標(biāo)傳統(tǒng)方式Skills方式基礎(chǔ)Context50K tokens10K tokensPDF任務(wù)Context50K tokens10K + 3K tokens首次響應(yīng)延遲較長較短專業(yè)任務(wù)質(zhì)量一般更精準(zhǔn)

    設(shè)計亮點(diǎn)

    1. 聲明式定義

    技能通過Markdown定義,非技術(shù)人員也能創(chuàng)建和維護(hù):

    ---
    name: data-analysis
    description: 數(shù)據(jù)分析技能
    ---


    ## 數(shù)據(jù)清洗步驟
    1. 檢查缺失值
    2. 處理異常值
    ...

    2. 資源綁定

    技能可以帶有參考資料、腳本等資源:

    skill_obj.get_prompt()
    # 返回:
    # Loading: pdf
    # Base directory: /Users/xxx/.minion/skills/pdf
    #
    # [技能內(nèi)容,可以引用 references/api_doc.md 等]

    3. 版本和來源追蹤

    @dataclass
    class Skill:
    ? ? name: str
    ? ? description: str
    ? ? content: str
    ? ? path: Path
    ? ? location: str? # project, user, managed
    ? ? license: Optional[str]
    ? ? metadata: Dict[str, Any]

    為什么做開源實(shí)現(xiàn)?

    Claude Code的Skills是一個出色的設(shè)計,但它是閉源的、與Claude生態(tài)綁定的。我實(shí)現(xiàn)開源版本的原因:

  • LLM無關(guān)性:Minion支持多種LLM后端(Claude、GPT-4、開源模型),Skills能力不應(yīng)被鎖定在單一供應(yīng)商
  • 可定制性:開源實(shí)現(xiàn)允許深度定制,滿足特殊需求
  • 社區(qū)貢獻(xiàn):開源讓更多人能夠貢獻(xiàn)Skills,形成技能生態(tài)
  • 學(xué)習(xí)價值:通過實(shí)現(xiàn),深入理解這一架構(gòu)的設(shè)計精髓
  • 未來方向

    1. 技能市場

    想象一個Skills Marketplace,開發(fā)者可以發(fā)布、分享專業(yè)技能:

    minion skill install data-science-toolkit
    minion skill install legal-document-analysis

    2. 智能推薦

    根據(jù)用戶歷史和當(dāng)前任務(wù),自動推薦相關(guān)技能:

    def recommend_skills(user_request, history):
    ? ? # 分析請求內(nèi)容
    ? ? # 匹配最相關(guān)的技能
    ? ? # 預(yù)加載可能需要的技能
    ? ? ...

    3. 技能組合

    多個技能協(xié)同工作:

    # 分析PDF中的數(shù)據(jù),生成Excel報告
    skills_used = ["pdf", "xlsx", "data-visualization"]

    4. 自學(xué)習(xí)技能

    Agent在完成復(fù)雜任務(wù)后,自動生成新技能供未來使用:

    async def learn_skill_from_session(session_log):
    ? ? # 分析成功的任務(wù)執(zhí)行過程
    ? ? # 提取可復(fù)用的模式和指令
    ? ? # 生成新的SKILL.md
    ? ? ...

    結(jié)語

    Claude Code的Skills系統(tǒng)體現(xiàn)了一個核心設(shè)計哲學(xué):

    不要試圖讓AI什么都懂,而是讓它知道在需要時去哪里找到答案。

    這種"專家系統(tǒng)"思維,讓AI Agent從"通才"進(jìn)化為"能快速變身專家的通才"。

    通過Minion的開源實(shí)現(xiàn),這一能力現(xiàn)在可以被更廣泛的開發(fā)者使用,不受限于特定的LLM供應(yīng)商或閉源生態(tài)。

    歡迎試用和貢獻(xiàn):

  • GitHub: https://github.com/femto/minion
  • 文檔: https://github.com/femto/minion/blob/main/docs/skills.md
  • 讓我們一起構(gòu)建更開放、更智能的AI Agent生態(tài)。


    關(guān)于作者:鄭炳南,畢業(yè)于復(fù)旦大學(xué)物理系。擁有20多年軟件開發(fā)經(jīng)驗(yàn),是開源社區(qū)的活躍貢獻(xiàn)者,參與貢獻(xiàn)metagpt、smolagents、mem0等項(xiàng)目,為ICLR 2025 oral paper《AFlow: Automating Agentic Workflow Generation》的作者之一。

    往期文章

  • 《Minion框架早已實(shí)現(xiàn)PTC:超越傳統(tǒng)Tool Calling的Agent架構(gòu)》
  • ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

    相關(guān)閱讀更多精彩內(nèi)容

    友情鏈接更多精彩內(nèi)容