DeerFlow 2.0 · 从入门到精通 目录

§07 Skills 技能系统

DeerFlow 把「怎么做好某类事」外置成一个个 Skill 目录。这是它和很多框架最不一样的地方——能力不是写死在代码里的,是目录里读出来的。

一个 Skill 长什么样

每个 Skill 是自包含目录,典型结构:

skills/public/image-generation/
  SKILL.md          # frontmatter: name + description + 给代理的使用说明
  scripts/
    generate.py     # 纯 requests 调用外部 API 的 CLI(argparse)
  templates/        # 可选模板

SKILL.md 的 frontmatter 有 namedescription,后面是给 Agent 看的操作说明。运行时,公共技能挂在 /mnt/skills/public/<name>/,产物写到 /mnt/user-data/...

public 与 custom,靠组合键区分

Skill 分两类:public(仓库自带)和 custom(你自己装)。早期有个坑:同名 public 和 custom 技能会互相串门。2.0 的解法是组合键 {category}:{name}

配置里这么写:

{
  "skills": {
    "public:my-skill":  { "enabled": true },
    "custom:my-skill":  { "enabled": false }
  }
}

旧格式(只用 name)依然兼容——系统会自动识别。加载时还会在同一类别内查重,撞名直接抛 ValueError,把错误说在前面。

通过 API 管理技能

Gateway 暴露了技能管理端点:

端点 作用
GET /api/skills 列出技能
GET /api/skills/{skill_name} 查详情,可带 ?category=public
PUT /api/skills/{skill_name} 改启用状态,可带 ?category=
POST /api/skills/install .skill 归档安装

同名时,API 会要求你补 category 参数,否则返回 400,把「到底改哪个」抛回给你。

用 skill-creator 造新技能

仓库里自带一个 skill-creator 公共技能,提供 scripts/init_skill.py 脚手架。想加自己的能力,先用它生成骨架,再填 SKILL.mdscripts/

标叔的结论:Skill 目录化,是 DeerFlow 能「越用越聪明」的根本。你别急着改核心代码,先想「这事能不能做成一个 Skill」。能,就外置;外置了,就能热插拔、能隔离、能审计。

记忆是代理的「长期脑子」。下一章讲它怎么不丢历史。