Skills角色分配:让多个Skill像团队一样协作

想象你不是一个”全能选手”在工作,而是一个”团队”在工作:

  • 有人负责接收问题
  • 有人负责分析问题
  • 有人负责执行任务
  • 有人负责把结果返回给你

这就是”角色分配”要解决的问题:让多个Skill像一个团队一样分工合作。


0. 从一个问题开始

先来看一个常见的场景:

你写了一个”智能助手”S kill,它需要:

  • 理解用户说的话
  • 调用合适的工具
  • 生成回复

如果你把这些都塞进一个Skill,会发生什么?

# 一个"全能"但混乱的Skill
instructions: |
  你是一个智能助手,需要:
  1. 理解用户意图
  2. 调用天气API查天气
  3. 调用日历API看日程
  4. 调用邮件API发邮件
  5. 生成自然语言回复
  ...

这个Skill会变得:

  • 太大太复杂
  • 难以维护
  • 难以测试
  • 难以扩展

更好的做法:把这个”全能选手”拆成多个专业角色。


1. 角色系统的核心理念

1.1 什么是角色

角色(Role)定义了一个人在团队中的位置和职责。在Skills系统中,角色就是一组相关能力的封装。

类比一下现实世界:

现实团队Skills角色系统
团队成员Role/Agent
岗位职责职责边界(Scope)
工作技能Skills
协作方式通信协议
汇报关系依赖关系

1.2 为什么需要角色

没有角色有角色
一个Skill做所有事每个角色做一件事
代码臃肿难维护职责清晰易维护
测试困难独立测试容易
扩展困难添加新角色简单
单点故障角色可独立替换

1.3 角色 vs Skills vs Agents

这三个概念经常被混用,但它们有区别:

Agent = Role + Memory + Tools + Autonomy
Role = Persona + Skills + Context
Skill = Capability + Instructions
概念说明类比
Agent完整的AI实体,有自主决策能力一个完整的员工
RoleAgent的职责定义,不包含执行能力岗位描述
Skill具体的能力单元员工掌握的技能

实际理解

  • 你可以把Role理解为一个”岗位”
  • Agent是有人来担任这个岗位
  • Skills是这个人掌握的技能

2. 角色的构成要素

2.1 完整角色定义

一个完整的角色定义应该包含这些要素:

# SKILL.code-reviewer-role.md
---
name: code-reviewer
type: role
version: 1.0.0
---
 
# 代码审查员角色
 
## 身份标识
- **名称**:代码审查员
- **人设**:严谨、专业、注重细节
- **专长**:代码质量、安全审计、性能优化
 
## 职责边界
 
### 我负责的(in_scope)
1. 代码语法检查
2. 代码风格审查
3. 安全漏洞检测
4. 性能问题识别
 
### 我不负责的(out_of_scope)
1. 需求变更
2. 架构设计决策
3. 直接修改代码
 
## 工作方式
- **沟通风格**:直接、简洁、技术性强
- **决策方式**:证据驱动、数据支撑
- **协作模式**:请求-响应
 
## 生命周期
- **就绪**:等待任务
- **执行**:处理审查任务
- **等待**:等待用户反馈
- **终止**:完成任务

2.2 职责边界的定义原则

单一职责原则(SRP)

每个角色应该只有一个核心职责:

# ✅ 好的职责定义
responsibilities:
  in_scope:
    - 代码审查    # 只负责审查
  out_of_scope:
    - 修改代码    # 不做修改
 
# ❌ 糟糕的职责定义
responsibilities:
  in_scope:
    - 代码审查
    - 代码修改    # 职责混杂
    - 架构设计    # 职责混杂

最小权限原则

角色只应该拥有完成职责所必需的最小权限:

# ✅ 好的权限定义
permissions:
  filesystem:
    read: true      # 需要读代码
    write: false    # 不需要写代码
  network:
    api_calls: false  # 不需要调用外部API

明确的输入输出

每个角色应该明确:

  • 它接受什么输入
  • 它产生什么输出
  • 它与其他角色的接口

3. 角色的生命周期

3.1 生命周期阶段

┌─────────────────────────────────────────────────────────────┐
│                      角色生命周期                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│    ┌───────┐                                              │
│    │ 初始化 │ → 加载定义、初始化状态                         │
│    └───────┘                                              │
│         ↓                                                  │
│    ┌───────┐                                              │
│    │ 就绪   │ → 等待任务                                   │
│    └───────┘                                              │
│         ↓                                                  │
│    ┌───────┐                                              │
│    │ 执行中 │ → 处理任务                                   │
│    └───────┘                                              │
│         ↓                                                  │
│    ┌───────┐                                              │
│    │ 等待中 │ → 等待资源/响应                              │
│    └───────┘                                              │
│         ↓                                                  │
│    ┌───────┐                                              │
│    │ 终止   │ → 保存状态、清理资源                          │
│    └───────┘                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3.2 生命周期配置

lifecycle:
  # 初始化阶段
  init:
    - load_definitions          # 加载角色定义
    - initialize_memory         # 初始化记忆
    - establish_connections     # 建立连接
    
  # 就绪阶段
  ready:
    - wait_for_tasks           # 等待任务
    - monitor_dependencies     # 监控依赖
    
  # 执行阶段
  executing:
    - process_task            # 处理任务
    - call_tools              # 调用工具
    - communicate             # 与其他角色通信
    
  # 等待阶段
  waiting:
    - block_on_resource       # 等待资源
    - timeout_handling        # 超时处理
    
  # 终止阶段
  terminate:
    - save_state              # 保存状态
    - release_resources       # 释放资源
    - cleanup_connections      # 清理连接

4. 角色间的通信协议

4.1 为什么需要通信协议

多个角色要协作,就必须通信。如果每个角色用自己的方式说话,就会鸡同鸭讲。

没有协议

角色A:发了条消息
角色B:收到,但看不懂
结果:协作失败

有协议

角色A:按协议格式发送消息
角色B:按协议格式解析消息
结果:协作成功

4.2 消息格式定义

# 标准消息格式
message_format:
  header:                    # 消息头
    message_id: string       # 唯一标识
    timestamp: datetime      # 发送时间
    sender: role_id         # 发送者
    receiver: role_id       # 接收者
    message_type: enum       # 消息类型
    correlation_id: string   # 关联ID(用于追踪)
    
  body:                      # 消息体
    intent: string           # 意图
    content: object          # 内容
    parameters: object       # 参数
    
  footer:                    # 消息尾
    priority: enum           # 优先级
    ttl: integer            # 生存时间
    metadata: object         # 元数据

4.3 消息类型

消息类型方向说明典型场景
REQUESTA→B请求执行任务分配任务
RESPONSEB→A返回任务结果完成任务
NOTIFICATION任意通知事件发生状态变更
QUERYA→B查询信息获取数据
COMMANDA→B发出命令流程控制
EVENT发布者→订阅者发布事件事件驱动
# 消息类型定义
message_types:
  REQUEST:
    fields: [task, parameters, deadline, priority]
    expected_response: RESPONSE
    timeout: 30000
    
  RESPONSE:
    fields: [status, result, error, metadata]
    
  NOTIFICATION:
    fields: [event_type, event_data, source]
    delivery: at_most_once
    
  EVENT:
    fields: [event_name, payload, timestamp]
    subscription: role_ids

4.4 通信模式

模式说明适用场景
同步通信发送方等待响应需要即时结果
异步通信发送方不等待耗时任务
广播通信一对多状态变更通知
组播通信一对组多角色协作
# 通信模式配置
communication_modes:
  synchronous:
    pattern: request-response
    timeout: 30000
    retry_on_timeout: false
    
  asynchronous:
    pattern: fire-and-forget
    queue: true
    delivery_guarantee: at_least_once
    
  broadcast:
    pattern: publish-subscribe
    subscribers: [role_1, role_2, role_3]
    filter: event_type

5. 能力矩阵:让任务找到合适的角色

5.1 什么是能力矩阵

能力矩阵是系统中所有角色能力的结构化表示,帮助系统了解每个角色能做什么,便于任务分配。

5.2 能力定义格式

# 代码审查员的能力矩阵
capability_matrix:
  role: code-reviewer
  
  capabilities:
    - name: syntax_check
      description: 代码语法检查
      level: expert                    # novice/competent/proficient/expert
      input_types: [source_code]
      output_types: [issue_list]
      performance:
        avg_duration: 500             # 平均耗时(毫秒)
        max_duration: 2000           # 最大耗时
        
    - name: security_scan
      description: 安全漏洞扫描
      level: proficient
      input_types: [source_code, dependencies]
      output_types: [vulnerability_report]
      tools: [security_scanner]
      
    - name: performance_analysis
      description: 性能分析
      level: competent
      input_types: [source_code, profiler_output]
      output_types: [performance_report]
      
  constraints:
    max_concurrent_tasks: 3           # 最大并发任务数
    supported_languages: [javascript, python, java, go]
    max_file_size: 10485760          # 10MB

5.3 任务分配策略

task_allocation:
  algorithm: capability_matching
  
  matching_criteria:
    - capability_match_score     # 能力匹配度
    - current_workload          # 当前工作负载
    - historical_performance   # 历史表现
    - availability             # 可用性
    
  allocation_strategy:
    best_match:
      enabled: true
      min_match_score: 0.8     # 最低匹配分数
      
    load_balancing:
      enabled: true
      threshold: 0.7          # 负载超过70%时尝试分配其他角色
      
    fallback:
      enabled: true
      on_no_match: escalate_to_human

5.4 分配流程图

任务输入
    ↓
分析任务需求
    ↓
┌─────────────────────────────────┐
│     能力匹配                      │
│  ┌─────────┐    ┌─────────┐   │
│  │角色A     │    │角色B     │   │
│  │匹配度80% │    │匹配度95% │   │
│  │负载60%   │    │负载30%   │   │
│  └─────────┘    └─────────┘   │
│       ↓                               │
│  选择角色B(匹配度高+负载低)         │
└─────────────────────────────────┘
    ↓
分配任务给角色B
    ↓
执行任务
    ↓
返回结果

6. 角色冲突解决

6.1 冲突的类型

在多角色系统中,冲突可能发生在多个层面:

冲突类型说明示例
资源冲突竞争同一资源多个角色争用同一数据库连接
输出冲突对同一问题给出不同答案两个角色对代码质量评分不一致
边界冲突职责边界不清晰某个任务不知道该谁来做
优先级冲突对同一任务优先级判断不同两个角色都认为自己应该先处理

6.2 优先级策略

最简单的冲突解决方式:谁优先级高听谁的。

conflict_resolution:
  strategy: priority_based
  
  priority_levels:
    admin: 100              # 管理员
    security_officer: 90    # 安全官
    quality_assurance: 80   # 质量保障
    regular_role: 50        # 普通角色
    
  resolution_rules:
    - higher_priority_wins        # 优先级高的获胜
    - tiebreaker: most_relevant_role  # 平局时选最相关的

6.3 仲裁机制

引入专门的”法官”角色来解决冲突:

conflict_resolution:
  strategy: arbitration
  
  arbitrator: SKILL.conflict-arbitrator
  
  arbitration_process:
    - collect_conflicting_positions    # 收集各方立场
    - analyze_conflict_type          # 分析冲突类型
    - apply_resolution_rules          # 应用解决规则
    - generate_resolution            # 生成解决方案
    - notify_all_parties             # 通知各方

6.4 协商机制

让冲突双方自己商量:

conflict_resolution:
  strategy: negotiation
  
  negotiation_steps:
    - role_a_proposes              # A提出方案
    - role_b_responds              # B回应
    - compromise_generated          # 生成折中方案
    - check_acceptance             # 检查是否接受
    - iterate_or_finalize          # 迭代或确定

6.5 投票机制

多个角色投票决定:

conflict_resolution:
  strategy: voting
  
  voting_rules:
    eligible_voters: [role_1, role_2, role_3, role_4]
    quorum: 0.6           # 60%参与率
    decision_threshold: 0.5  # 简单多数
    weighted_votes: true  # 加权投票

6.6 冲突预防

比解决冲突更重要的是预防冲突:

conflict_prevention:
  - clear_boundary_definitions   # 清晰的边界定义
  - explicit_ownership          # 明确的所有权
  - regular_boundary_review      # 定期边界审查
  - cross_role_training         # 跨角色培训

7. 角色进化机制

7.1 为什么要进化

AI系统的角色不是一成不变的。随着业务发展、用户反馈和性能数据的积累,角色需要不断进化。

7.2 进化的维度

进化类型说明例子
能力增强学习新技能新增Python代码审查能力
行为优化改进工作方式调整输出格式提高可读性
边界调整调整职责范围从”只审查”变成”审查+修复建议”

7.3 能力增强

evolution:
  type: capability_enhancement
  
  sources:
    - explicit_feedback   # 显式反馈(用户评分)
    - implicit_learning   # 隐式学习(行为分析)
    - knowledge_transfer  # 知识转移(从其他角色学习)
    
  mechanisms:
    skill_acquisition:
      trigger: repeated_failure_with_hint   # 反复失败+有提示
      process:
        - identify_missing_capability       # 识别缺失能力
        - search_knowledge_base            # 搜索知识库
        - acquire_new_skill               # 获取新技能
        - validate_effectiveness           # 验证效果

7.4 行为优化

evolution:
  type: behavior_optimization
  
  optimization_targets:
    - response_accuracy      # 响应准确率
    - processing_speed      # 处理速度
    - user_satisfaction     # 用户满意度
    
  methods:
    - reinforcement_learning              # 强化学习
    - behavior_cloning                   # 行为克隆
    - human_feedback_integration         # 人类反馈整合

7.5 进化管理

evolution_management:
  # 进化频率控制
  frequency:
    min_interval: 7d          # 至少7天
    max_changes: 3             # 每次最多3个变更
    
  # 变更验证
  validation:
    automated_tests: true
    shadow_mode: true          # 影子模式验证
    rollout_percentage: 10      # 灰度发布10%
    
  # 回滚机制
  rollback:
    enabled: true
    trigger: performance_drop > 10%
    automatic: false           # 需要人工确认

8. 实际案例:构建一个客服团队

8.1 团队结构

┌─────────────────────────────────────────────────────────────┐
│                      客服团队                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│    ┌─────────────┐                                        │
│    │  调度员      │ ← 接收用户问题,分发给专人处理          │
│    └──────┬──────┘                                        │
│           ↓                                                │
│    ┌──────┴──────┬────────────┐                          │
│    ↓             ↓            ↓                            │
│ ┌──────┐   ┌──────────┐  ┌──────┐                       │
│ │ 技术 │   │  业务    │  │ 投诉 │                       │
│ │ 客服  │   │  客服    │  │ 客服  │                       │
│ └──────┘   └──────────┘  └──────┘                       │
│                                                             │
│    ┌─────────────┐                                        │
│    │  质检员      │ ← 检查回复质量                          │
│    └─────────────┘                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

8.2 角色定义

调度员

# SKILL.dispatcher.md
---
name: dispatcher
description: 问题调度员
---
 
# 问题调度员
 
## 职责
接收用户问题,分析问题类型,分发给合适的客服。
 
## 能力
- 意图识别:判断问题属于技术/业务/投诉
- 紧急识别:判断是否紧急需要优先处理
- 路由分配:把问题分配给合适的客服
 
## 边界
- 我负责:分析、分发
- 我不负责:直接回答用户问题

技术客服

# SKILL.tech-support.md
---
name: tech-support
description: 技术客服
---
 
# 技术客服
 
## 职责
处理技术相关问题,包括使用问题、Bug、功能咨询。
 
## 能力
- 技术问题诊断
- 使用指导
- Bug记录和反馈
 
## 边界
- 我负责:技术问题
- 我不负责:退款请求、业务咨询

业务客服

# SKILL.business-support.md
---
name: business-support
description: 业务客服
---
 
# 业务客服
 
## 职责
处理业务相关问题,包括订单、付款、合同等。
 
## 能力
- 业务规则解答
- 订单处理
- 退款请求
 
## 边界
- 我负责:业务问题
- 我不负责:技术问题

8.3 协作流程

用户:我的订单还没到
    ↓
┌─────────────┐
│ 调度员      │ → 判断为"业务问题"
└──────┬──────┘
       ↓
┌─────────────┐
│ 业务客服    │ → 查询订单状态
└──────┬──────┘
       ↓
┌─────────────┐
│ 质检员      │ → 检查回复质量
└──────┬──────┘
       ↓
用户:收到回复"您的订单正在配送中,预计明天送达"

8.4 冲突解决案例

场景:用户同时问了技术问题和业务问题。

冲突:技术客服和业务客服都觉得对方应该处理。

解决

  1. 调度员识别出两个问题
  2. 技术问题分配给技术客服
  3. 业务问题分配给业务客服
  4. 两个客服分别处理各自的问题
  5. 质检员合并检查

9. 常见问题

Q1: 角色越多越好吗?

:不是。角色太多会导致:

  • 系统复杂度增加
  • 协作开销增大
  • 难以维护

建议:先从2-3个核心角色开始,根据需要逐步拆分。

Q2: 角色之间应该直接通信还是通过中介?

:看场景:

  • 直接通信:角色之间关系紧密,需要频繁交互
  • 通过中介(消息队列):角色之间解耦,不需要实时交互

Q3: 怎么避免角色之间的循环依赖?

  1. 使用单向依赖原则
  2. 引入协调者角色
  3. 使用事件驱动而非直接调用

Q4: 角色能动态创建和销毁吗?

:可以,但需要:

  1. 生命周期管理
  2. 状态迁移机制
  3. 资源清理

10. 总结

  1. 角色是职责的封装:每个角色负责一块职责
  2. 角色有生命周期:初始化→就绪→执行→等待→终止
  3. 角色靠协议通信:标准化的消息格式让协作成为可能
  4. 能力矩阵帮助分配:让合适的角色做合适的事
  5. 冲突需要解决:优先级、仲裁、协商、投票
  6. 角色可以进化:随着时间学习和改进

记住:角色系统的目标是让协作更顺畅,而不是增加复杂度。


下一步


相关文档


本文档介绍了Skills系统中角色分配的设计理念、协议定义和实现机制。