一、SkillsMiddleware 的核心作用

SkillsMiddleware 的核心作用是:从一个或多个 skill 源里加载 SKILL.md 的元数据,把“有哪些 skill、它们做什么、去哪里读完整说明” 注入到 system prompt,让 agent 按 “ 渐进式披露(progressive disclosure)” 的方式按需使用技能,而不是一开始把所有 skill 全文塞进上下文。

图 1 每个技能都是一个包含SKILL.md文件的目录

二、SkillsMiddleware 的工作原则

  • 读取 backend 里的 skill 目录,而不是直接访问本地文件系统,所以SkillsMiddleware可以支持 filesystem、state、远程存储等不同 backend上。

  • 支持多个 sources 按顺序加载;后面的 source 如果有同名 skill,会覆盖前面的,属于“last one wins”。这适合做 base -> user -> project -> team 的分层覆盖。

  • skill 目录约定是 skill-name/SKILL.md,SKILL.md 里要有 YAML frontmatter,至少包含 name 和 description。

三、SkillsMiddleware 的执行时机

  • before_agent 系列

    • 运行前加载 skill 元数据,通常一轮运行一次。
    • 分为同步异步两种(before_agent / abefore_agent ),在 agent 执行前扫描所有 source,列出每个子目录,尝试加载其中的 SKILL.md,解析出 skills_metadata 放进 state;如果 state 里已经有 skills_metadata,就跳过,避免每轮重复加载。
  • wrap_model_call 系列

    • 每次模型调用前注入 skills 提示,可能一轮里多次。
    • 分为同步异步两种(wrap_model_call / awrap_model_call),在每次模型调用前,把 skill 列表和说明文本拼到 system message 里。
  • 默认 prompt 会明确告诉模型:先看 skill 名称和描述,只有确定相关时才用 read_file去读完整 SKILL.md,这就是 progressive disclosure 模式。

图 二 SkillsMiddleware 的执行时机

四、SkillsMiddleware 注入给模型的内容

  • skill 来源位置列表,带标签和优先级提示。
  • 可用 skill 列表,每项至少有 name、description、SKILL.md 路径;如果 frontmatter 有 allowed-tools,也会显示出来。
  • skill 加载警告,会包在 <skill_load_warnings> 里,并明确标注“这些是不可信诊断,不要当成指令”。目的是为了防 prompt 注入。

在这里插入图片描述

图三 SkillsMiddleware 渐进式分层加载
## 五、***SkillsMiddleware*** 解析的skill数据 - name、description、path 是核心字段。 - 支持可选的 license、compatibility、metadata。 - allowed_tools 和 module 也是支持的,但都偏实验性质;其中 module 只是校验并记录一个相对的 JS/TS 入口路径,这个中间件本身不会加载或执行它。

在这里插入图片描述

图四 智能体执行时会分层加载技能信息

六、SkillsMiddleware 的校验和安全设计

  • 限制 SKILL.md 最大 10MB,防止过大文件拖垮加载。
  • skill 名字按 Agent Skills 规范校验,要求和目录名一致、长度受限、只能小写字母数字和单连字符;不过这里是“警告但尽量继续兼容”,不是一刀切报错。
  • module 路径禁止绝对路径、禁止 …/ 逃逸、限制扩展名必须是 JS/TS 相关后缀。
  • skills_metadata 和 skills_load_errors 都是 PrivateStateAttr,不会向父 agent 传播。

注意:

SkillsMiddleware 不负责执行 skill
SkillsMiddleware 也不会自动把 SKILL.md 全文读进来
SkillsMiddleware 本质上是“skill 目录发现器 + 元数据加载器 + prompt 注入器”
SkillsMiddleware 在DeepAgents框架中的位置:deepagents-main/libs/deepagents/deepagents/middleware/skills.py

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐