SkillsMiddleware解析

SkillsMiddleware-中间件形式让平台集成skill能力

概述

SkillsMiddleware 是 DeepAgents 框架中用于加载和暴露 agent 技能到系统提示的中间件。它实现了 Anthropic 的 agent skills 模式,支持渐进式披露(progressive disclosure),从可配置的后端存储源加载技能。

架构设计

技能加载机制

技能从一个或多个源(sources)加载 – 后端中组织技能的路径。源按顺序加载,当技能名称相同时,后面的源会覆盖前面的源(last one wins)。这支持分层架构:base -> user -> project -> team skills。

中间件完全使用后端 API(不直接访问文件系统),使其可移植到不同的存储后端(文件系统、状态、远程存储等)。

技能结构

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

/skills/user/web-research/
├── SKILL.md          # 必需:YAML前置数据 + markdown指令
└── helper.py         # 可选:支持文件
SKILL.md 格式
---
name: web-research
description: Structured approach to conducting thorough web research
license: MIT
---

# Web Research Skill

## When to Use
- User asks you to research a topic

核心组件

SkillMetadata

从 YAML 前置数据解析的技能元数据:

字段 类型 说明
name str 技能标识符(最多64字符,小写字母数字和连字符)
description str 技能功能描述(最多1024字符)
path str SKILL.md 文件的后端路径
license str | None 许可证名称或捆绑许可证文件引用
compatibility str | None 环境要求(最多500字符)
metadata dict 附加元数据的键值映射
allowed_tools list 预批准工具列表(实验性)

SkillsState

技能中间件的状态定义:

class SkillsState(AgentState):
skills_metadata: NotRequired[Annotated[list[SkillMetadata], PrivateStateAttr]]

SkillsMiddleware

主要的中间件类,继承自 AgentMiddleware。

初始化参数
参数 类型 说明
backend BACKEND_TYPES 后端实例或工厂函数
sources list[str] 技能源路径列表

核心方法
before_agent(state, runtime, config) – 同步版本,在 agent 执行前加载技能元数据
abefore_agent(state, runtime, config) – 异步版本
wrap_model_call(request, handler) – 同步版本,将技能文档注入系统提示
awrap_model_call(request, handler) – 异步版本
modify_request(request) – 将技能文档注入模型请求的系统消息

使用示例

from deepagents.backends.state import StateBackend
from deepagents.middleware.skills import SkillsMiddleware

# 使用后端实例
middleware = SkillsMiddleware(
    backend=my_backend,
    sources=[
        "/skills/base/",
        "/skills/user/",
        "/skills/project/",
    ],
)

# 使用工厂函数(适用于 StateBackend)
middleware = SkillsMiddleware(
    backend=lambda rt: StateBackend(rt),
    sources=["/skills/user/"],
)

系统提示模板

中间件会将以下内容注入系统提示:

## Skills System

You have access to a skills library that provides specialized capabilities...

**Available Skills:**
- **web-research**: Structured approach to conducting thorough web research
  -> Read `/skills/user/web-research/SKILL.md` for full instructions

**How to Use Skills (Progressive Disclosure):**
1. Recognize when a skill applies
2. Read the skill's full instructions
3. Follow the skill's instructions
4. Access supporting files

技能名称验证规则

根据 Agent Skills 规范:
最多64个字符
仅限小写字母数字和连字符(a-z, 0-9, -)
不能以连字符开头或结尾
不能有连续连字符
必须与父目录名称匹配

安全限制

SKILL.md 文件最大大小:10MB(防止 DoS 攻击)
技能名称最大长度:64字符
描述最大长度:1024字符

路径约定

所有路径使用 POSIX 约定(正斜杠)通过 PurePosixPath:

后端路径:”/skills/user/web-research/SKILL.md”
虚拟、平台无关
后端根据需要处理平台特定的转换

渐进式披露模式

技能遵循渐进式披露模式:
首先看到名称和描述
仅在需要时读取完整指令

SKILL.md 包含分步工作流程、最佳实践和示例
可使用绝对路径访问支持文件

0条留言