摘要:技能(Skills)是可复用、可插拔的能力单元,让智能体按名称或描述发现、选择、加载、使用外部能力,而不是把逻辑写死在代码里。本文说明 Skills 的动机、业界标准 Agent Skills(SKILL.md + 文件夹),以及最佳实践:在 中通过 skills_library/(技能库)、skill_loader(发现→选择→加载→使用)、main.py 演示如何按规范接入 SkillMD、Anthropic 官方等技能库。文中给出技能库下载与放置说明,以及典型 skill(Summarize、Launch Brief Builder、PR Review Guard)的对照参考。
关键词:技能;Skills;Agent Skills;SKILL.md;发现;加载;使用;LangGraph;Agentic Design Patterns
源代码下载链接:Langgraph 7. Skills 案例源代码。
智能体往往需要多种专门能力:汇总信息、写文档、做评审等。若每种能力都写死在节点或 prompt 里,会带来:
- 难以复用:同一类能力无法在不同图或产品中共享。
- 难以扩展:每加一种能力就要改图、改状态。
- 与生态脱节:业界已有基于 Agent Skills、SKILL.md 的技能平台(如 SkillMD.ai、SkillCreator.ai),按标准实现便于发现、安装、替换技能。
Skills(技能) 把能力抽象成可发现的单元:每个技能以文件夹 + SKILL.md 形式存在,包含元数据(name、description)与使用说明;智能体先发现(读元数据)、再选择(按任务匹配)、再加载(读完整说明)、最后使用(按说明执行或调 LLM)。这样,能力与主流程解耦,便于对接外部技能库与多智能体产品。
💡 理解要点:Skills = 可发现、可加载、可使用的能力单元;标准流程为 Agent 智能体 发现 → 选择 → 加载 → 使用,符合 Agent Skills 规范即可与生态对接。
- 能力写死在代码里:研究、写作、评审等若都内联在节点中,难以单独测试、替换或复用到其他项目。
- 扩展要改图、改状态:每加一种新能力就要改状态定义和边,图会越来越臃肿。
- 与外部技能生态脱节:按 Agent Skills 规范实现后,可直接使用 SkillMD、Anthropic 官方等技能库中的技能,或将自己的技能发布到同一生态。
把能力做成标准格式的技能(SKILL.md + 文件夹)后:发现阶段只读元数据(约 100 tokens/技能),选择后再按需加载完整说明(Progressive disclosure);新增或替换能力只需增删技能文件夹,无需改主流程代码。
业界标准 Agent Skills 规定:
- 技能形态:一个技能 = 一个文件夹,至少包含 SKILL.md(YAML frontmatter + Markdown 正文);可选 、、。
- Frontmatter:必须包含 、,便于发现与选择;可选 、 等。
- 使用流程:发现(Discovery) → 选择(Select) → 加载(Load) → 使用(Use)。
- 发现:扫描技能库目录,仅读取每个 SKILL.md 的 frontmatter,得到技能列表(低 token 开销)。
- 选择:根据用户任务或名称,从已发现列表中选出一个或多个技能。
- 加载:仅对选中的技能读取完整 SKILL.md 正文(按需加载)。
- 使用:将技能说明作为上下文交给 Agent(如 LLM)执行,或执行技能目录下的脚本。
这里,我们给出一个示例。其严格按上述流程实现,作为 Skills 用法的 Best Practice:技能存放在 skills_library/,通过 skill_loader.py 提供 、、、,入口为 main.py。
4.1 典型 Skill 与平台
4.2 从哪里下载、放到哪里
运行本示例前,需在 下放置至少一个符合 Agent Skills 规范的技能(即包含 SKILL.md 的子文件夹)。详细说明见 demo_codes/skills_library/README.md,简要如下:
放置完成后在 下执行: 或 即可体验「发现 → 选择 → 加载 → 使用」的标准流程。
本示例仅保留标准 Agent Skills 一种用法,代码结构如下。
5.1 技能库(skills_library/)
- 路径:。
- 约定:每个子文件夹为一个技能,且必须包含 SKILL.md(YAML frontmatter + Markdown 正文);技能文件需按 4.2 节从 SkillMD 或 Anthropic 官方下载并放入。
- 说明:见 skills_library/README.md。
实现标准流程的四个步骤:
5.2 发现 Skills (discover_skills)
discover_skills(skills_root):扫描技能库,解析每个 SKILL.md 的 frontmatter,返回 。源代码如下:
我们在 中运行:
返回:
5.3 选择 Skills (select_skill_for_task)
select_skill_for_task(task, discovered):根据用户任务从已发现列表中选出一个技能名(本示例为简单关键词匹配;生产可用 LLM 或更复杂策略)。源代码如下:
我们在 中运行:
返回:
5.3 读取 Skills (load_skill)
在系统基于手头上已有的skills,选择了与用户问题相关的skills之后,我们就需要让系统读取对应 skills 文件里面的完整内容了。load_skill(skill_name, skills_root):读取指定技能的完整 SKILL.md,返回 ,其中 为去掉 frontmatter 的正文,供 LLM 使用。源代码如下:
我们在 中运行:
返回:
5.4 输出最终结果 (use_skill_with_llm)
我们会把上面步骤中选定的 skills 内容加载到 prompt 中,来生成最终的结果。use_skill_with_llm(skill_name, skill_instructions, user_input, …):将技能说明与用户输入交给 LLM,按技能要求执行并返回结果。源代码如下:
我们在 中运行:
返回:
5.3 入口(main.py)
依次调用:发现 → 选择 → 加载 → 使用,并打印结果。支持命令行传入任务,例如:
5.4 其他文件
代码建议与 demo_codes/README.md 对照阅读。
- 进入 目录,创建并激活虚拟环境,安装依赖:。
- 在目录下配置 (如 或 ,可选 、)。
- 按 4.2 节在 skills_library/ 下放置至少一个技能(如 summarize 或 pdf)。
- 运行: 或 。
- 也可打开 main.ipynb 逐步运行,查看发现、选择、加载、使用的输出。
- Skills 将能力抽象为可发现、可加载、可使用的单元(SKILL.md + 文件夹),通过 发现 → 选择 → 加载 → 使用 与主流程解耦,便于复用与对接外部技能库。
- 本示例严格按 Agent Skills 规范实现,作为 Skills 用法的 Best Practice:技能库在 skills_library/,加载与使用逻辑在 skill_loader.py,入口为 main.py。
- 延伸方向:用 LLM 做技能选择、支持多技能组合、在 LangGraph 图中将「使用技能」作为节点(节点内调用 / / ),或接入 MCP、私有技能库等。
发布者:Ai探索者,转载请注明出处:https://javaforall.net/278112.html原文链接:https://javaforall.net
