“用到什么知识, 临时加载什么知识” – 通过 tool_result 注入, 不塞 system prompt。
第一层: 系统提示中放技能名称 (低成本)。第二层: tool_result 中按需放完整内容。

1
2
3
4
5
6
7
8
9
SYSTEM = f"""You are a coding agent at {WORKDIR}.
Skills available:
{SKILL_LOADER.get_descriptions()}"""
TOOL_HANDLERS = {
    # ...base tools...
    "load_skill": lambda **kw: SKILL_LOADER.get_content(kw["name"]),
}
TOOLS = [
    {"name": "load_skill", "description": "Load specialized knowledge by name.","input_schema": {"type": "object", "properties": {"name": {"type": "string", "description": "Skill name to load"}}, "required": ["name"]}},]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class SkillLoader:
    def __init__(self, skills_dir: Path):
        self.skills = {}
        for f in sorted(skills_dir.rglob("SKILL.md")):
            text = f.read_text()
            meta, body = self._parse_frontmatter(text)
            name = meta.get("name", f.parent.name)
            self.skills[name] = {"meta": meta, "body": body}
    def get_descriptions(self) -> str:
        lines = []
        for name, skill in self.skills.items():
            desc = skill["meta"].get("description", "")
            lines.append(f"  - {name}: {desc}")
        return "\n".join(lines)
    def get_content(self, name: str) -> str:
        skill = self.skills.get(name)
        if not skill:
            return f"Error: Unknown skill '{name}'."
        return f"<skill name=\"{name}\">\n{skill['body']}\n</skill>"

代码

  1. 每个技能是一个目录, 包含 SKILL.md 文件和 YAML frontmatter。
  2. SkillLoader 递归扫描 SKILL.md 文件, 用目录名作为技能标识。
  3. 第一层: 系统提示中放技能名称 (低成本)。第二层: tool_result 中按需放完整内容。