202 lines
14 KiB
Markdown
202 lines
14 KiB
Markdown
# 灵隙协议实现规范:消息扩展字段
|
||
|
||
> 版本:1.0.0 | 层级:实现层
|
||
|
||
---
|
||
|
||
## 1. 消息扩展字段总览
|
||
|
||
统一消息信封 `UnifiedSynapseMessage` 在原始协议基础字段之上,扩充了以下扩展字段,用于支持会话关联、传输控制、群组精准投递及安全声明等高级功能。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `ConversationID` | `string` | 会话 ID,用于多轮对话关联 |
|
||
| `TTL` | `int` | 消息存活时间,单位秒;超时后由灵泊(Harbor)自动清理 |
|
||
| `Broadcast` | `bool` | 是否广播;为 `true` 时消息将发送至群组所有成员 |
|
||
| `Encrypt` | `bool` | 标识 payload 是否已加密;接收方据此决定是否解密 |
|
||
| `TargetType` | `GroupTargetType` | 群组目标类型,定义消息在群组内的投递范围 |
|
||
| `TargetIDs` | `[]string` | 目标 ID 列表,与 `TargetType` 配合使用 |
|
||
| `SignatureAlgorithm` | `string` | 签名算法声明,接收方据此选择验证方式 |
|
||
|
||
### 代码定义
|
||
|
||
```go
|
||
type UnifiedSynapseMessage struct {
|
||
// 基础字段(协议定义)
|
||
ID string `json:"id"`
|
||
Version string `json:"version"`
|
||
Type string `json:"type"`
|
||
Sender AgentEndpoint `json:"sender"`
|
||
Receiver *AgentEndpoint `json:"receiver,omitempty"`
|
||
CorrelationID string `json:"correlation_id,omitempty"`
|
||
ReplyTo string `json:"reply_to,omitempty"`
|
||
GroupID string `json:"group_id,omitempty"`
|
||
Payload json.RawMessage `json:"payload"`
|
||
Timestamp Timestamp `json:"timestamp"`
|
||
Signature string `json:"signature,omitempty"`
|
||
|
||
// 扩展字段(实现补充)
|
||
ConversationID string `json:"conversation_id,omitempty"`
|
||
TTL int `json:"ttl,omitempty"`
|
||
Broadcast bool `json:"broadcast,omitempty"`
|
||
Encrypt bool `json:"encrypt,omitempty"`
|
||
TargetType GroupTargetType `json:"target_type,omitempty"`
|
||
TargetIDs []string `json:"target_ids,omitempty"`
|
||
SignatureAlgorithm string `json:"signature_algorithm,omitempty"`
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 群组目标类型
|
||
|
||
`GroupTargetType` 枚举定义了消息在群组内的三种目标选择策略,用于精确控制消息的投递范围,避免向无关成员发送无关消息。
|
||
|
||
```go
|
||
type GroupTargetType string
|
||
|
||
const (
|
||
TargetTypeAll GroupTargetType = "all" // 所有成员
|
||
TargetTypeRole GroupTargetType = "role" // 按角色
|
||
TargetTypeSpecific GroupTargetType = "specific" // 指定成员
|
||
)
|
||
```
|
||
|
||
### 字段说明表
|
||
|
||
| 值 | 常量名 | 含义 | TargetIDs 用法 |
|
||
|----|--------|------|----------------|
|
||
| `"all"` | `TargetTypeAll` | 发送给群组内所有成员 | 忽略 `TargetIDs`,即使有值也不参与路由 |
|
||
| `"role"` | `TargetTypeRole` | 按角色筛选成员 | `TargetIDs` 填入角色名称列表(如 `["admin","operator"]`),仅匹配这些角色的成员会收到消息 |
|
||
| `"specific"` | `TargetTypeSpecific` | 发送给指定的若干成员 | `TargetIDs` 填入成员 AgentID 列表,精确投递 |
|
||
|
||
### 使用约束
|
||
|
||
- 仅在 `GroupID` 非空时生效。若 `GroupID` 为空,`TargetType` 和 `TargetIDs` 将被忽略。
|
||
- 默认值为空字符串,此时行为等同于 `"all"`(全量投递)。
|
||
- `TargetType` 与 `Broadcast` 的关系:当 `Broadcast` 为 `true` 时,`TargetType` 仍可进一步缩小广播范围;两者协同工作而非互斥。
|
||
|
||
---
|
||
|
||
## 3. 各字段用途说明表
|
||
|
||
| 字段名 | 类型 | 用途 | 使用场景 | 示例值 |
|
||
|--------|------|------|----------|--------|
|
||
| `ConversationID` | `string` | 关联同一会话的多条消息,形成对话上下文 | 多轮问答、连续任务编排、长对话跟踪 | `"conv-a1b2c3d4"` |
|
||
| `TTL` | `int` | 消息的存活时长,超时后由灵泊组件自动丢弃 | 临时通知、时效性指令、过期任务取消 | `300`(5 分钟) |
|
||
| `Broadcast` | `bool` | 标记消息是否为广播,指示接收方是否需要扩散 | 群组公告、系统通知、状态广播 | `true` |
|
||
| `Encrypt` | `bool` | 标记 payload 是否已加密,接收方据此触发解密流程 | 包含敏感数据的消息、跨信任域通信 | `true` |
|
||
| `TargetType` | `GroupTargetType` | 群组内的目标选择策略 | 按角色下发命令、定向通知指定成员 | `"role"` |
|
||
| `TargetIDs` | `[]string` | 配合 `TargetType` 提供目标标识列表 | 指定角色名列表或成员 ID 列表 | `["admin","operator"]` |
|
||
| `SignatureAlgorithm` | `string` | 声明消息签名所使用的算法,接收方选择对应验证逻辑 | 多算法共存场景、算法升级过渡期 | `"HMAC-SHA256"` |
|
||
|
||
---
|
||
|
||
## 4. 扩展字段与基础字段关系图
|
||
|
||
下图展示了包含扩展字段在内的完整 `UnifiedSynapseMessage` 结构层次。
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────┐
|
||
│ UnifiedSynapseMessage │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐│
|
||
│ │ 基础字段 ││
|
||
│ │ ││
|
||
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ ││
|
||
│ │ │ ID │ │ Version │ │ Type │ ││
|
||
│ │ └──────────┘ └──────────┘ └──────────────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌────────────────────────────────────────────────┐ ││
|
||
│ │ │ Sender (AgentEndpoint) │ ││
|
||
│ │ │ ┌─────────┐ ┌──────────┐ ┌────────────────┐ │ ││
|
||
│ │ │ │AgentID │ │AgentName │ │ Endpoint │ │ ││
|
||
│ │ │ └─────────┘ └──────────┘ └────────────────┘ │ ││
|
||
│ │ │ ┌─────────┐ ┌──────────┐ ┌────────────────┐ │ ││
|
||
│ │ │ │SystemID │ │Version │ │ Capabilities │ │ ││
|
||
│ │ │ └─────────┘ └──────────┘ └────────────────┘ │ ││
|
||
│ │ └────────────────────────────────────────────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ ││
|
||
│ │ │ Receiver │ │CorrelationID │ │ ReplyTo │ ││
|
||
│ │ │(optional)│ │ │ │ │ ││
|
||
│ │ └──────────┘ └──────────────┘ └──────────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌──────────┐ ┌──────────────────────────────────┐ ││
|
||
│ │ │ GroupID │ │ Payload │ ││
|
||
│ │ │ │ │ (json.RawMessage) │ ││
|
||
│ │ └──────────┘ └──────────────────────────────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌──────────┐ ┌──────────┐ ││
|
||
│ │ │Timestamp │ │Signature │ ││
|
||
│ │ └──────────┘ └──────────┘ ││
|
||
│ └─────────────────────────────────────────────────────┘│
|
||
│ │
|
||
│ ┌─────────────────────────────────────────────────────┐│
|
||
│ │ 扩展字段 ││
|
||
│ │ ││
|
||
│ │ ┌────────────────┐ ┌──────┐ ┌──────────┐ ││
|
||
│ │ │ ConversationID │ │ TTL │ │ Broadcast│ ││
|
||
│ │ └────────────────┘ └──────┘ └──────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌──────────┐ ┌──────────────────────────────────┐ ││
|
||
│ │ │ Encrypt │ │ TargetType + TargetIDs │ ││
|
||
│ │ │ │ │ (群组目标选择) │ ││
|
||
│ │ └──────────┘ └──────────────────────────────────┘ ││
|
||
│ │ ││
|
||
│ │ ┌────────────────────────────────────────────────┐ ││
|
||
│ │ │ SignatureAlgorithm │ ││
|
||
│ │ │ (签名算法声明) │ ││
|
||
│ │ └────────────────────────────────────────────────┘ ││
|
||
│ └─────────────────────────────────────────────────────┘│
|
||
└─────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 层次说明
|
||
|
||
| 层级 | 包含字段 | 职责 |
|
||
|------|----------|------|
|
||
| **标识层** | `ID`, `Version`, `Type` | 消息唯一标识与协议版本声明 |
|
||
| **源端层** | `Sender` (AgentEndpoint) | 发送方端点信息,含身份、能力与路由地址 |
|
||
| **目标层** | `Receiver`, `GroupID`, `TargetType`, `TargetIDs` | 点对点或群组目标寻址 |
|
||
| **控制层** | `CorrelationID`, `ReplyTo`, `ConversationID` | 消息关联、回复与会话跟踪 |
|
||
| **数据层** | `Payload` | 业务负载,JSON 格式 |
|
||
| **传输层** | `TTL`, `Broadcast`, `Priority`, `ExpiresAt` | 传输行为控制与生命周期管理 |
|
||
| **安全层** | `Signature`, `SignatureAlgorithm`, `Encrypt` | 完整性保护、算法声明与负载加密 |
|
||
| **时间层** | `Timestamp` | 消息产生时间,ISO 8601 格式 |
|
||
|
||
### 扩展字段与基础字段的协作关系
|
||
|
||
```
|
||
发送流程 接收流程
|
||
───────── ─────────
|
||
|
||
发方构造消息 收方解析消息
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ 填写基础字段 │ │ 校验基础字段 │
|
||
│ ID, Sender, │─────────▶ │ ID, Type, │
|
||
│ Type, Payload│ │ Signature │
|
||
└──────────────┘ └──────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌──────────────┐ ┌──────────────┐
|
||
│ 设置扩展字段 │ │ 读取扩展字段 │
|
||
│ │ │ │
|
||
│ • ConversationID ──────▶ │ • 恢复会话 │
|
||
│ • TTL ──────▶ │ • 设置超时 │
|
||
│ • Broadcast ──────▶ │ • 判断扩散 │
|
||
│ • Encrypt ──────▶ │ • 触发解密 │
|
||
│ • TargetType ──────▶ │ • 筛选成员 │
|
||
│ • TargetIDs ──────▶ │ • 精确投递 │
|
||
│ • SigAlgo ──────▶ │ • 选择验证 │
|
||
└──────────────┘ └──────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
**参考来源**
|
||
- [v0 实现细节 - 第 7 章:消息扩展字段](file:///e:/code/go/synapse/docs/v0/06-implementation-details.md#1088)
|
||
- [UnifiedSynapseMessage 类型定义](file:///e:/code/go/synapse/pkg/types/types.go#L197-L236)
|