技能系统

📎 引用文件

本文引用的文件 - agent/src/agent/skills.py - agent/src/agent/frontmatter.py - agent/src/tools/load_skill_tool.py - agent/src/tools/skill_writer_tool.py - agent/src/agent/context.py - agent/src/governance/manifest.py - agent/src/skills/eastmoney/SKILL.md - agent/src/skills/tushare/SKILL.md - agent/tests/test_agent_output_discipline.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件为 Vibe-Trading 的“技能系统”提供全面文档。内容涵盖: - 技能的定义格式、元数据结构与加载机制 - 技能的生命周期管理(安装、更新、卸载与版本控制) - 技能的发现机制(本地扫描、用户覆盖、动态加载) - 技能的执行框架(参数传递、上下文注入、结果处理) - 技能开发指南(SKILL.md 编写、脚本开发与测试验证) - 现有技能使用示例与自定义技能最佳实践

项目结构

技能系统围绕以下关键路径组织: - 内置技能目录:agent/src/skills//,每个技能包含 SKILL.md 及可选 references/templates/examples/assets/scripts - 用户技能目录:~/.vibe-trading/skills/user//,用于保存、覆盖和扩展内置技能 - 技能加载器:agent/src/agent/skills.py,负责从用户目录与内置目录扫描并合并技能 - 技能读取工具:agent/src/tools/load_skill_tool.py,提供大纲/章节/分页三种读取模式 - 技能写入与管理工具:agent/src/tools/skill_writer_tool.py,提供保存、补丁、删除与辅助文件管理 - 上下文构建:agent/src/agent/context.py,将技能摘要注入系统提示,驱动按需加载 - 元数据解析:agent/src/agent/frontmatter.py,解析 SKILL.md 的 frontmatter

graph TB A["ContextBuilder<br/>构建系统提示"] --> B["SkillsLoader<br/>扫描与合并技能"] B --> C["LoadSkillTool<br/>按名称/章节/分页读取"] B --> D["SkillWriterTools<br/>保存/补丁/删除/辅助文件"] B --> E["Frontmatter Parser<br/>解析元数据"] C --> F["SKILL.md 正文与 references"] D --> G["用户技能目录 ~/.vibe-trading/skills/user"] B --> H["内置技能目录 agent/src/skills"]

图表来源 - agent/src/agent/context.py:235-268 - agent/src/agent/skills.py:100-164 - agent/src/tools/load_skill_tool.py:150-307 - agent/src/tools/skill_writer_tool.py:48-370 - agent/src/agent/frontmatter.py:16-49

章节来源 - agent/src/agent/context.py:235-268 - agent/src/agent/skills.py:100-164 - agent/src/tools/load_skill_tool.py:150-307 - agent/src/tools/skill_writer_tool.py:48-370 - agent/src/agent/frontmatter.py:16-49

核心组件

章节来源 - agent/src/agent/skills.py:22-60 - agent/src/agent/skills.py:100-164 - agent/src/agent/frontmatter.py:16-49 - agent/src/tools/load_skill_tool.py:150-307 - agent/src/tools/skill_writer_tool.py:48-370 - agent/src/agent/context.py:235-268

架构总览

技能系统采用“渐进式披露”设计: - 系统提示仅注入技能一行摘要,减少上下文占用 - 完整文档通过 load_skill 按需加载,支持大纲导航与章节定位 - 超长文档自动转为“大纲+首段”,后续可按标题精确拉取章节 - 用户技能优先于内置技能,便于覆盖与热修复

sequenceDiagram participant U as "用户" participant C as "ContextBuilder" participant L as "SkillsLoader" participant T as "LoadSkillTool" participant FS as "文件系统" U->>C : 发起会话 C->>L : get_descriptions() L-->>C : 分类后的技能摘要 C-->>U : 系统提示(含技能列表) U->>T : load_skill(name, section?, offset?) T->>L : get_content(name) L->>FS : 读取 SKILL.md FS-->>L : 正文 L-->>T : XML包裹的正文 alt 超大文档且无显式offset T-->>U : mode=outline + 大纲 else 指定section T-->>U : mode=section + 分页 else 普通文档 T-->>U : mode=document + 分页 end

图表来源 - agent/src/agent/context.py:235-268 - agent/src/agent/skills.py:166-189 - agent/src/tools/load_skill_tool.py:196-307

详细组件分析

技能定义与元数据结构

章节来源 - agent/src/agent/frontmatter.py:16-49 - agent/src/agent/skills.py:22-60 - agent/src/skills/eastmoney/SKILL.md:1-99 - agent/src/skills/tushare/SKILL.md:1-284

技能发现与加载机制

flowchart TD Start(["启动"]) --> ScanUser["扫描用户技能目录"] ScanUser --> ScanBuilt["扫描内置技能目录"] ScanBuilt --> Merge{"是否重复name?"} Merge --> |是| Skip["跳过内置项"] Merge --> |否| Add["加入技能列表"] Skip --> End(["完成"]) Add --> End

图表来源 - agent/src/agent/skills.py:120-136 - agent/src/agent/skills.py:143-164

章节来源 - agent/src/agent/skills.py:120-164

技能读取与执行框架

sequenceDiagram participant Agent as "Agent" participant Tool as "LoadSkillTool" participant Loader as "SkillsLoader" Agent->>Tool : execute(name, section?, offset?) Tool->>Loader : get_content(name) alt 未知技能 Loader-->>Tool : Error : Unknown skill Tool-->>Agent : status="error" else 有section Tool->>Tool : split_sections/find_sections Tool-->>Agent : mode="section", 分页 else 无section且超大 Tool-->>Agent : mode="outline", 大纲+首段 else 普通文档 Tool-->>Agent : mode="document", 分页 end

图表来源 - agent/src/tools/load_skill_tool.py:196-307 - agent/src/agent/skills.py:229-387

章节来源 - agent/src/tools/load_skill_tool.py:196-307 - agent/src/agent/skills.py:229-387

生命周期管理(安装、更新、卸载、版本控制)

classDiagram class SaveSkillTool { +execute(name, content, category) } class PatchSkillTool { +execute(name, find, replace) } class DeleteSkillTool { +execute(name) } class SkillFileTool { +execute(action, skill_name, path, content) } SaveSkillTool --> "写入" Filesystem : "~/.vibe-trading/skills/user" PatchSkillTool --> "复制/覆盖" Filesystem DeleteSkillTool --> "删除" Filesystem SkillFileTool --> "读写/列举" Filesystem

图表来源 - agent/src/tools/skill_writer_tool.py:48-370

章节来源 - agent/src/tools/skill_writer_tool.py:48-370

上下文注入与执行流程

sequenceDiagram participant CB as "ContextBuilder" participant SL as "SkillsLoader" participant AG as "Agent" participant LT as "LoadSkillTool" CB->>SL : get_descriptions() SL-->>CB : 分类摘要 CB-->>AG : 系统提示(含技能列表) AG->>LT : load_skill(name, section?) LT-->>AG : 大纲/章节/分页

图表来源 - agent/src/agent/context.py:235-268 - agent/src/tools/load_skill_tool.py:196-307

章节来源 - agent/src/agent/context.py:235-268 - agent/src/governance/manifest.py:24-45

现有技能使用示例

章节来源 - agent/src/skills/eastmoney/SKILL.md:1-99 - agent/src/skills/tushare/SKILL.md:1-284

自定义技能开发最佳实践

章节来源 - agent/src/tools/skill_writer_tool.py:48-111 - agent/tests/test_agent_output_discipline.py:515-545

依赖关系分析

graph LR FM["frontmatter.py"] --> SK["skills.py"] SK --> LST["load_skill_tool.py"] SK --> SWT["skill_writer_tool.py"] CTX["context.py"] --> SK LST --> SK SWT --> SK

图表来源 - agent/src/agent/frontmatter.py:16-49 - agent/src/agent/skills.py:100-164 - agent/src/tools/load_skill_tool.py:150-307 - agent/src/tools/skill_writer_tool.py:48-370 - agent/src/agent/context.py:235-268

章节来源 - agent/src/agent/skills.py:100-164 - agent/src/tools/load_skill_tool.py:150-307 - agent/src/tools/skill_writer_tool.py:48-370 - agent/src/agent/context.py:235-268

性能考虑

[本节为通用指导,无需特定文件来源]

故障排查指南

章节来源 - agent/src/tools/load_skill_tool.py:213-273 - agent/src/agent/skills.py:166-189

结论

Vibe-Trading 的技能系统通过“渐进式披露 + 大纲导航 + 章节定位 + 用户覆盖”的设计,实现了高效、可扩展、可维护的技能生态。开发者可基于 SKILL.md 与辅助目录快速构建领域知识包,并通过标准化工具链进行全生命周期管理。

[本节为总结性内容,无需特定文件来源]

附录

[本节为补充信息,无需特定文件来源]