跳转至

Skills

Skill 提供一类任务的工作方法和资源路径。模型先看到摘要,需要时再读取详细说明。

创建一个 Skill

一个 Skill 至少包含 SKILL.md:

skills/
└── course-summary/
    ├── SKILL.md
    ├── scripts/       # 可选
    ├── references/    # 可选
    └── assets/        # 可选

SKILL.md 示例:

---
name: course-summary
description: 把课程笔记整理成简洁的复习提纲。
---

# 课程提纲

1. 先读取用户指定的笔记。
2. 按“核心概念、例子、易错点”整理。
3. 不确定的内容明确标注,不要猜测。

名称必须满足两个条件:

  • 使用小写字母、数字和连字符;
  • name 与目录名完全相同。

加载并启用 Skill

import os
from pathlib import Path

import bumblehive


config = bumblehive.RuntimeArguments(
    model=os.environ["BUMBLEHIVE_MODEL"],
    api_key=os.environ["BUMBLEHIVE_API_KEY"],
    base_url=os.environ["BUMBLEHIVE_BASE_URL"],
    workspace=".",
    skills_dir="./skills",
    skill_names=["course-summary"],
    tool_names=["read_file"],
)

skills_dir 指向包含各个 Skill 子目录的根目录。省略时默认使用 ~/.bumblehive/skills/;目录会在首次安装 Skill 时创建,单纯创建 Runtime 或列出空目录不会创建它。

SkillsManager.set_skills_dir() 可在运行前切换目录,并清空之前的加载缓存;目标目录会在首次安装 Skill 时创建:

manager = bumblehive.SkillsManager()
manager.set_skills_dir(Path("./other-skills"))

该方法适合独立使用 SkillsManager。Runtime 的 Skill 目录仍应通过 RuntimeArguments.skills_dir 在创建时确定,避免配置状态与实际目录不一致。

如果 Skill 位于外部目录,可在已创建的 runtime 中安装到配置的 skills_dir:

runtime.skills.install_skills([Path("./downloaded/course-summary")])

目标目录已存在同名 Skill 时,默认不会覆盖;需要替换时传入 replace=True。已直接放在 skills_dir 中的 Skill 无需重复安装。

模型最初只会看到 Skill 的名称、描述和文件路径。模型需要使用 read_file 打开 SKILL.md,因此启用 Skill 时通常也要开放 read_file。启用 exec 后可以运行其中的脚本,输出位置应明确指定。

在工作目录准备 notes.md,写入需要整理的课程笔记。该 Skill 已位于 skills_dir 下,可以直接加载;在 async main() 中创建 Runtime 并运行:

async with bumblehive.from_config(config) as runtime:
    result = await runtime.run("根据 notes.md 生成复习提纲")
    print(result.error.message if result.error else result.final_content)

开发时可以检查加载结果:

async with bumblehive.from_config(config) as runtime:
    catalog = runtime.skills.list_skills()

    print([skill.name for skill in catalog.skills])
    for error in catalog.errors:
        print(error.path, error.message)

skill_names=None 表示向模型提供全部已加载 Skill 的摘要,[] 表示不提供任何 Skill。正式项目建议明确列出名称。

运行与检查

完成模型配置,把以上配置和调用放入 async main()。调用 list_skills() 应能看到 course-summary;错误列表应为空。模型仍需实际读取 Skill,选中名称不代表脚本已经执行。

完整加载示例 · MCP 与 Skills API