规范
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:
- 在自己控制的域名下暴露 Well-Known URI(见第 5 章)
- 提供至少一个 Skill Descriptor JSON 文档
- 实现描述符中声明的调用端点(见第 6 章)
- 遵循描述符中声明的访问控制策略
技能提供者 SHOULD:
- 维护描述符的版本一致性
- 在描述符更新时同步更新
updated_at字段
3.2.2 技能消费者
技能消费者 MUST:
- 在调用任何技能前验证其描述符的合规性
- 遵守描述符中声明的认证要求
- 处理协议规定的所有错误响应类别
技能消费者 SHOULD:
- 缓存已发现的技能描述符以减少网络请求
- 实现退避重试策略以处理临时性故障
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} │
├──────────────────────────────────►│
│ 执行结果 │
│◄──────────────────────────────────┤
