Skip to content

Skills 技能架构文档

历史路径说明

文中部分代码路径来自历史阶段,保留它们是为了说明演进关系。

真正继续实现时,请以当前 desktop/ 工作区中的技能实现为准。

这篇文档暂时保留作架构整理参考,还没有进入首批正式导航。

概述

Skills(技能)系统是 Agent 的能力扩展模块,允许为 Agent 绑定特定的技能配置,以增强 Agent 在特定场景下的能力。技能可以是工作流、工具集或自定义脚本。

功能特性

1. 技能管理

功能说明
技能列表获取所有可用技能
技能详情获取指定技能的详细信息
技能校验验证技能配置的有效性

2. Agent 技能绑定

功能说明
绑定技能为 Agent 绑定技能
解绑技能移除 Agent 的技能绑定
绑定模式支持多种绑定模式

3. 绑定模式

模式说明
summary_only仅在摘要中使用
on_demand按需调用
always始终启用
full完全模式
summary摘要模式

技术架构

目录结构

archive/desktop-legacy/src-tauri/src/
├── runtime/
│   └── skills.rs              # Skills 运行时核心
├── commands/
│   └── skills.rs             # Tauri 命令接口
archive/desktop-legacy/src/
├── services/
│   └── skillApi.ts           # 前端 API 服务
└── pages/
    └── Agent/
        └── SkillsPage.tsx    # 技能管理页面

核心模块

RuntimeState (Rust)

负责技能管理:

rust
// 主要方法
list_skills(search?)           // 获取技能列表
get_skill(name_or_path)       // 获取技能详情
validate_skill(name_or_path)  // 校验技能有效性
bind_agent_skill()            // 绑定技能到 Agent
unbind_agent_skill()           // 解绑 Agent 技能

SkillApiService (TypeScript)

前端技能 API 服务封装:

typescript
// 主要方法
listSkills(search?)           // 获取技能列表
getSkill(nameOrPath)          // 获取技能详情
validateSkill(nameOrPath)     // 校验技能
bindAgentSkill(payload)       // 绑定技能
unbindAgentSkill(payload)     // 解绑技能

API 接口

Tauri Commands

命令参数返回值
skill_listsearch?{ success: boolean, skills: SkillItem[] }
skill_getskill_name_or_pathSkill
skill_validateskill_name_or_path{ valid: boolean, errors?: string[] }
skill_bind_agentagent_id, skill_name, binding_mode?{ success: boolean }
skill_unbind_agentagent_id, skill_name{ success: boolean }
skill_list_behavior_tracesagent_id?, limit?{ success: boolean, traces: BehaviorTrace[] }
skill_list_gap_analysesagent_id?, run_id?, limit?{ success: boolean, gaps: SkillGapAnalysis[] }
skill_list_recommendationsagent_id?, run_id?, limit?{ success: boolean, recommendations: SkillRecommendation[] }
skill_get_recommendationrecommendation_id{ success: boolean, recommendation, gap }
skill_list_versionsskill_name?, recommendation_id?, limit?{ success: boolean, versions: SkillVersion[] }
skill_generate_recommendation_draftrecommendation_id{ success: boolean, status, draft_skill_path }
skill_validate_recommendationrecommendation_id{ success: boolean, status, validation }
skill_prepare_recommendation_shadowrecommendation_id{ success: boolean, status, shadow_contract }
skill_apply_recommendation_shadowrecommendation_id{ success: boolean, status }
skill_prepare_recommendation_canaryrecommendation_id{ success: boolean, status, canary_contract }
skill_apply_recommendation_canaryrecommendation_id{ success: boolean, status }
skill_promote_recommendation_to_liverecommendation_id, binding_mode?{ success: boolean, status, version, binding }
skill_rollback_recommendationrecommendation_id, reason?{ success: boolean, status }
skill_retire_recommendationrecommendation_id, reason?{ success: boolean, status }

数据结构

typescript
interface SkillItem {
  name: string;          // 技能名称
  description: string;   // 技能描述
  path: string;          // 技能路径
  source: string;        // 技能来源
}

interface SkillBindPayload {
  agentId: string;       // Agent ID
  skillName: string;     // 技能名称
  bindingMode?: string;  // 绑定模式
}

interface BehaviorTrace {
  id: string;            // 行为轨迹 ID
  run_id: string;        // 来源 run
  agent_id: string;      // 归属 Agent
  task_kind: string;     // 任务类型摘要
  repeat_count: number;  // 相同模式累计次数
  tool_sequence: Array<{ tool_id: string; status: string; retry_count: number }>;
}

interface SkillGapAnalysis {
  id: string;
  run_id: string;
  gap_type: 'knowledge_gap' | 'workflow_gap' | 'skill_gap' | 'policy_gap';
  severity: 'low' | 'medium' | 'high';
  summary: string;
}

interface SkillRecommendation {
  id: string;
  gap_id: string;
  recommendation_kind: 'skill' | 'workflow';
  title: string;
  target_skill_name: string;
  status:
    | 'recommended'
    | 'draft_pending'
    | 'draft_generated'
    | 'validated'
    | 'shadow_ready'
    | 'shadow_active'
    | 'canary_ready'
    | 'canary_applied'
    | 'live'
    | 'rolled_back'
    | 'retired';
  confidence: number;
}

interface SkillVersion {
  id: string;
  recommendation_id: string;
  skill_name: string;
  version_number: number;
  lifecycle_stage: 'live' | 'rolled_back' | 'retired' | 'draft';
  bound_agent_id: string;
  binding_mode: string;
}

前端页面

技能管理页面

路径:/pages/Agent/SkillsPage.tsx

功能:

  • 浏览可用技能列表
  • 搜索过滤技能
  • 查看技能详情
  • 验证技能有效性

Agent 表单集成

在 Agent 创建/编辑页面中:

  • 选择要绑定的技能
  • 设置绑定模式
  • 管理已绑定的技能

使用示例

获取技能列表

typescript
// 获取所有技能
const skills = await skillApi.listSkills();

// 搜索特定技能
const searchResults = await skillApi.listSkills('workflow');

校验技能

typescript
const result = await skillApi.validateSkill('my-skill');
if (!result.valid) {
  console.error('技能验证失败:', result.errors);
}

绑定技能到 Agent

typescript
await skillApi.bindAgentSkill({
  agentId: 'agent-123',
  skillName: 'data-processing',
  bindingMode: 'on_demand'
});

解绑技能

typescript
await skillApi.unbindAgentSkill({
  agentId: 'agent-123',
  skillName: 'data-processing'
});

错误处理

错误码说明处理建议
agent_id cannot be emptyAgent ID 为空提供有效的 Agent ID
skill_name cannot be empty技能名称为空提供有效的技能名称
skill not found技能不存在检查技能名称或路径
binding failed绑定失败检查 Agent 状态和权限

相关文件

  • archive/desktop-legacy/src-tauri/src/runtime/skills.rs - Skills 运行时核心
  • archive/desktop-legacy/src-tauri/src/commands/skills.rs - Tauri 命令
  • archive/desktop-legacy/src/services/skillApi.ts - 前端 API
  • archive/desktop-legacy/src/pages/Agent/SkillsPage.tsx - 前端页面

内容通过 Markdown 维护,适合持续迭代。