"""
Skill System 基础使用示例
演示 Skill System 的基本功能:
1. 加载 Skills
2. 使用 Registry 管理
3. 查询和过滤
4. 查看 Skill 内容
运行方式:
cd /path/to/akg_agents
conda activate akg_agents
source env.sh
python examples/run_skill/01_basic_usage.py
"""
from pathlib import Path
from akg_agents.core_v2.skill import (
SkillMetadata, SkillRegistry
)
def example_1_load_and_register():
"""示例1:加载并注册 Skills"""
print("=" * 70)
print("示例1:加载并注册 Skills")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
count = registry.load_from_directory(skills_dir)
print(f"成功加载 {count} 个 Skills\n")
stats = registry.get_statistics()
print("Registry 统计:")
print(f" 总数: {stats['total']}")
print(f" 按分类:")
for cat, cnt in stats['by_category'].items():
print(f" {cat}: {cnt} 个")
print(f" 包含层级结构: {stats['with_structure']} 个")
print()
def example_2_query_skills():
"""示例2:查询 Skills"""
print("=" * 70)
print("示例2:查询 Skills")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
print("[1] 按名称查询:")
skill = registry.get("cuda-basics")
if skill:
print(f" 名称: {skill.name}")
print(f" 描述: {skill.description}")
print(f" 分类: {skill.category or 'N/A'}")
print(f" 版本: {skill.version}")
print(f" 内容长度: {len(skill.content)} 字符")
print()
print("[2] 获取所有 Skills:")
all_skills = registry.get_all()
print(f" 总共: {len(all_skills)} 个")
for skill in sorted(all_skills, key=lambda s: s.name)[:5]:
cat_str = f"[{skill.category}]" if skill.category else "[--]"
print(f" {cat_str} {skill.name}")
print()
print("[3] 检查 Skill 是否存在:")
print(f" cuda-basics 存在: {registry.exists('cuda-basics')}")
print(f" non-existent 存在: {registry.exists('non-existent')}")
print()
def example_3_filter_by_category():
"""示例3:按分类过滤"""
print("=" * 70)
print("示例3:按分类过滤")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
for category in ["workflow", "agent", "guide", "dsl"]:
skills = registry.get_by_category(category)
if skills:
print(f"\n[{category}] {len(skills)} 个 Skills:")
for skill in skills:
print(f" - {skill.name}: {skill.description[:50]}...")
def example_4_filter_by_pattern():
"""示例4:按名称模式过滤"""
print("\n" + "=" * 70)
print("示例4:按名称模式过滤")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
print("\n[1] 名称包含 'agent' 的 Skills:")
agent_skills = registry.filter(name_pattern="*agent*")
for skill in agent_skills:
cat_str = f"[{skill.category}]" if skill.category else "[--]"
print(f" {cat_str} {skill.name}")
print("\n[2] 名称包含 'triton' 的 Skills:")
triton_skills = registry.filter(name_pattern="*triton*")
for skill in triton_skills:
cat_str = f"[{skill.category}]" if skill.category else "[--]"
print(f" {cat_str} {skill.name}")
print("\n[3] 包含层级结构的 Skills:")
struct_skills = registry.filter(has_structure=True)
for skill in struct_skills:
print(f" - {skill.name}")
if skill.structure and skill.structure.child_skills:
print(f" 子 Skills: {', '.join(skill.structure.child_skills)}")
print()
def example_5_view_content():
"""示例5:查看 Skill 内容"""
print("=" * 70)
print("示例5:查看 Skill 内容")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
skill = registry.get("cuda-basics")
if skill:
print(f"\nSkill: {skill.name}")
print(f"描述: {skill.description}")
print(f"分类: {skill.category or 'N/A'}")
print(f"版本: {skill.version}")
print(f"文件路径: {skill.skill_path}")
print(f"\n内容预览(前 500 字符):")
print("-" * 70)
print(skill.content[:500])
if len(skill.content) > 500:
print("...")
print("-" * 70)
print(f"\n完整内容长度: {len(skill.content)} 字符")
print()
def example_6_combined_filters():
"""示例6:组合过滤条件"""
print("=" * 70)
print("示例6:组合过滤条件")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
print("\n[1] agent 分类且名称包含 'agent':")
agent_skills = registry.filter(category="agent", name_pattern="*agent*")
for skill in agent_skills:
print(f" - {skill.name}: {skill.description[:40]}...")
print("\n[2] guide 分类且包含层级结构:")
guide_structured = registry.filter(category="guide", has_structure=True)
for skill in guide_structured:
print(f" - {skill.name}")
if skill.structure:
print(f" 子 Skills: {skill.structure.child_skills}")
print()
def example_7_metadata_inspection():
"""示例7:检查 Skill 元数据"""
print("=" * 70)
print("示例7:检查 Skill 元数据")
print("=" * 70)
registry = SkillRegistry()
skills_dir = Path(__file__).parent / "skills"
registry.load_from_directory(skills_dir)
skills_to_inspect = ["standard-workflow", "coder-agent", "cuda-basics"]
for skill_name in skills_to_inspect:
skill = registry.get(skill_name)
if skill:
print(f"\n[{skill.name}]")
print(f" 描述: {skill.description}")
print(f" 分类: {skill.category or 'N/A'}")
print(f" 版本: {skill.version}")
print(f" 许可证: {skill.license if skill.license else 'N/A'}")
if skill.metadata:
print(f" 自定义元数据: {skill.metadata}")
if skill.structure and skill.structure.child_skills:
print(f" 子 Skills: {', '.join(skill.structure.child_skills)}")
print()
def run_all_examples():
"""运行所有示例"""
print("\n")
print("=" * 70)
print("Skill System 基础使用示例")
print("=" * 70)
print()
examples = [
example_1_load_and_register,
example_2_query_skills,
example_3_filter_by_category,
example_4_filter_by_pattern,
example_5_view_content,
example_6_combined_filters,
example_7_metadata_inspection,
]
for example in examples:
try:
example()
except Exception as e:
print(f"[错误] {example.__name__}: {e}")
import traceback
traceback.print_exc()
print()
print("=" * 70)
print("所有示例运行完成")
print("=" * 70)
if __name__ == "__main__":
run_all_examples()