3. 协议架构

3.1 架构模型

本协议采用 Provider-Consumer 双角色模型,运行于去中心化网络拓扑之上:

                    互联网
                      │
        ┌─────────────┼─────────────┐
        │             │             │
        ▼             ▼             ▼
┌──────────────┐ ┌──────────┐ ┌──────────┐
│ Provider 域 A │ │Provider B │ │ Registry │
│              │ │          │ │ (可选)    │
│ Skill Index  │ │Skill Index│ │          │
│ Descriptors  │ │Descriptors│ │ Index Refs│
│ Endpoints    │ │Endpoints  │ │          │
└──────────────┘ └──────────┘ └──────────┘
        ▲             ▲             ▲
        │             │             │
        └─────────────┼─────────────┘
                      │
                      ▼
              ┌───────────────┐
              │ Skill Consumer │
              │   (e.g. iFay)  │
              └───────────────┘

3.2 角色职责

3.2.1 技能提供者

技能提供者 MUST:

  1. 在自己控制的域名下暴露 Well-Known URI(见第 5 章)
  2. 提供至少一个 Skill Descriptor JSON 文档
  3. 实现描述符中声明的调用端点(见第 6 章)
  4. 遵循描述符中声明的访问控制策略

技能提供者 SHOULD:

  1. 维护描述符的版本一致性
  2. 在描述符更新时同步更新 updated_at 字段

3.2.2 技能消费者

技能消费者 MUST:

  1. 在调用任何技能前验证其描述符的合规性
  2. 遵守描述符中声明的认证要求
  3. 处理协议规定的所有错误响应类别

技能消费者 SHOULD:

  1. 缓存已发现的技能描述符以减少网络请求
  2. 实现退避重试策略以处理临时性故障

3.2.3 技能注册表(可选角色)

技能注册表 MAY 提供以下功能以加速发现:

  • 跨域名技能索引聚合
  • 按能力类型、标签的检索能力
  • 描述符 URL 的缓存与代理

技能注册表 MUST NOT 成为协议运作的必要条件。

3.3 协议交互流程

完整的协议交互包含两个阶段:

阶段一:发现(Discovery)

Consumer                            Provider
   │                                   │
   │  GET /.well-known/skill-sharing  │
   ├──────────────────────────────────►│
   │                                   │
   │           Skill Index             │
   │◄──────────────────────────────────┤
   │                                   │
   │  GET {descriptor_url}             │
   ├──────────────────────────────────►│
   │                                   │
   │           Skill Descriptor        │
   │◄──────────────────────────────────┤
   │                                   │
   │  [本地:Schema 验证]               │
   │                                   │

阶段二:调用(Invocation)

Consumer                            Provider
   │                                   │
   │  POST {invocation_endpoint}       │
   │  + 调用请求                        │
   ├──────────────────────────────────►│
   │                                   │
   │  202 Accepted                     │
   │  + execution_id                   │
   │◄──────────────────────────────────┤
   │                                   │
   │  GET {status_url}/{execution_id}  │
   ├──────────────────────────────────►│
   │  状态: running                     │
   │◄──────────────────────────────────┤
   │  ...(轮询)                        │
   │  状态: completed                   │
   │◄──────────────────────────────────┤
   │                                   │
   │  GET {result_url}/{execution_id}  │
   ├──────────────────────────────────►│
   │  执行结果                          │
   │◄──────────────────────────────────┤