Files
synapse/docs/v0/06-implementation-details.md
2026-06-27 22:17:15 +08:00

43 KiB
Raw Blame History

灵隙 Synapse 协议实现细节文档

本文档描述 Synapse 协议栈的具体实现规范,作为核心协议文档的补充。

版本:1.0.0 | 更新日期:2026-06-27


目录

  1. 七大组件层详细规范
  2. 内容类型系统
  3. 能力声明系统
  4. gRPC 传输协议
  5. 人工介入(HiL)三级升级机制
  6. 数字分段错误码系统
  7. 消息扩展字段
  8. 传输模式定义

1. 七大组件层详细规范

灵隙协议栈的七大组件层构成了协议的核心基础设施。每层都有独立的职责和接口。

1.1 灵脉 Meridian - 寻址与路由层

定位:Agent 之间虽有空隙(灵隙),但暗中有能量流动的轨迹(脉)。此层负责维护全局路由表。

核心功能:

功能 方法 说明
Agent 注册 Register(endpoint) Agent "通脉"入网
Agent 注销 Unregister(agentID) Agent "断脉"离场
Agent 查询 GetAgent(agentID) 获取 Agent 端点信息
Agent 列表 ListAgents() 列出所有活跃 Agent
心跳保活 Heartbeat(agentID) 刷新 Agent TTL
按能力查找 FindByCapability(capability) 查找具备特定能力的 Agent

数据结构:

// AgentEndpoint - Agent 端点信息
type AgentEndpoint struct {
    AgentID     string            // Agent 唯一标识
    AgentName   string            // Agent 名称
    SystemID    string            // 所属系统 ID
    Endpoint    string            // 回调端点 URL
    Version     string            // Agent 版本
    Capabilities []string         // 能力标签列表
    Metadata    map[string]interface{} // 扩展元数据
}

// RegistryConfig - 注册表配置
type RegistryConfig struct {
    DefaultTTL time.Duration      // 默认存活时间(5分钟)
}

拓扑管理:

// 拓扑类型
type TopologyType string
const (
    TopologyStar     = "star"     // 星型拓扑(中心协调)
    TopologyMesh     = "mesh"     // 网状拓扑(全互联)
    TopologyRing     = "ring"     // 环形拓扑(环形传递)
    TopologyTree     = "tree"     // 树形拓扑(层级管理)
    TopologyHybrid   = "hybrid"   // 混合拓扑
)

// 拓扑管理接口
type TopologyManager interface {
    CreateTopology(id, name string, topologyType TopologyType) *NetworkTopology
    AddNode(topologyID, nodeID string) error
    AddEdge(topologyID, from, to string) error
    GetNeighbors(topologyID, nodeID string) ([]string, error)
}

1.2 灵玺 Sigil - 身份与凭证层

定位:皇帝的玉玺是最高凭证。每个 Agent 的初始身份都需经过"铸玺"过程,每一次交互都要"验玺"。

核心功能:

功能 方法 说明
创建身份 CreateIdentity(agentID, ...) "铸玺" - 创建身份凭证
获取身份 GetIdentity(agentID) 获取 Agent 身份信息
撤销身份 RevokeIdentity(agentID) "废玺" - 撤销身份
检查撤销 IsRevoked(agentID) 检查身份是否已撤销
签名消息 SignMessage(msg) 对消息签名
验证签名 VerifySignature(msg) 验证消息签名
颁发令牌 IssueToken(agentID, ...) 颁发认证令牌
验证令牌 ValidateToken(signedToken) 验证令牌有效性

身份结构:

// AgentIdentity - Agent 身份凭证
type AgentIdentity struct {
    AgentID      string              // Agent 唯一标识
    AgentName    string              // Agent 名称
    SystemID     string              // 所属系统 ID
    PublicKey    string              // 公钥(可选)
    PrivateKey   string              // 私钥(本地保存)
    AuthSecret   string              // HMAC 密钥
    Roles        []string            // 角色列表
    Permissions  []string            // 权限列表
    CreatedAt    time.Time           // 创建时间
    ExpiresAt    *time.Time          // 过期时间
    RevokedAt    *time.Time          // 撤销时间
}

// AuthToken - 认证令牌
type AuthToken struct {
    TokenID    string                // 令牌 ID
    AgentID    string                // 所属 Agent
    SystemID   string                // 所属系统
    Roles      []string              // 角色列表
    IssuedAt   time.Time             // 颁发时间
    ExpiresAt  time.Time             // 过期时间
}

签名算法:

// 支持的签名算法
type SignatureAlgorithm string
const (
    AlgHMACSHA256 SignatureAlgorithm = "HMAC-SHA256"  // 默认
    AlgHMACSHA512 SignatureAlgorithm = "HMAC-SHA512"  // 可选
)

// 签名内容格式
// signature_content = sender_id | receiver_id | timestamp | payload_json

1.3 灵鉴 Speculum - 共识与裁决层

定位:古有"以史为鉴",今有"以智为鉴"。此层通过对比推理链的严密性来达成共识,如青天明镜。

核心功能:

功能 方法 说明
发起投票 InitiateVote(...) 创建投票议题
提交投票 SubmitVote(voteID, voterID, optionID, reasoning) 提交投票
关闭投票 CloseVote(voteID) 关闭并统计结果
获取投票 GetVote(voteID) 获取投票信息
仲裁争议 Arbitrate(ctx, dispute) 仲裁争议
提交推理链 SubmitReasoning(chain) 提交推理链到镜面
比较推理链 CompareReasonings(chainIDs) 比较推理链严密性

共识类型:

type ConsensusType string
const (
    ConsensusMajority      = "majority"       // 多数投票(>50%)
    ConsensusSupermajority = "supermajority"  // 绝对多数(>67%)
    ConsensusUnanimity     = "unanimity"      // 一致同意(100%)
    ConsensusWeighted      = "weighted"       // 加权投票
    ConsensusRanked        = "ranked"         // 排序投票
)

投票结构:

// Vote - 投票
type Vote struct {
    VoteID       string              // 投票 ID
    Question     string              // 投票问题
    Options      []VoteOption        // 投票选项
    Type         ConsensusType       // 共识类型
    Initiator    string              // 发起者
    Participants []string            // 参与者列表
    Votes        map[string]string   // voter_id -> option_id
    Weights      map[string]float64  // voter_id -> 权重
    Status       VoteStatus          // 投票状态
    Deadline     time.Time           // 截止时间
    Result       *VoteResult         // 投票结果
    Reasoning    map[string]string   // voter_id -> 推理理由
}

// VoteResult - 投票结果
type VoteResult struct {
    Winner     string              // 获胜选项
    WinOption  VoteOption          // 获胜选项详情
    VoteCounts map[string]int      // 选项 -> 票数
    Passed     bool                // 是否通过
    Margin     float64             // 得票率
}

推理镜面:

// ReasoningChain - 推理链
type ReasoningChain struct {
    ChainID     string              // 推理链 ID
    AgentID     string              // Agent ID
    Topic       string              // 推理主题
    Steps       []ReasoningStep     // 推理步骤
    Score       float64             // 推理得分
    SubmittedAt time.Time           // 提交时间
}

// ReasoningStep - 推理步骤
type ReasoningStep struct {
    StepID      string              // 步骤 ID
    Description string              // 步骤描述
    Evidence    []string            // 证据列表
    Confidence  float64             // 置信度(0-1)
    Next        []string            // 下一步 ID 列表
}

1.4 灵泊 Harbor - 异步队列与暂存层

定位:"泊"为船舶停靠。数据包遇风浪(网络抖动)时暂泊于此,待风平浪静再启航。

核心功能:

功能 方法 说明
消息入队 Enqueue(msg, target, priority) 消息入队(支持优先级)
消息出队 Dequeue() 消息出队
标记送达 MarkDelivered(msgID) 标记消息已送达
标记失败 MarkFailed(msgID, err) 标记消息失败(触发重试)
缓冲消息 BufferMessage(agentID, msg) 为离线 Agent 缓冲消息
清空缓冲 FlushBuffer(agentID) Agent 上线后清空缓冲
添加重试 AddRetry(msg, target) 添加重试条目

队列配置:

// QueueConfig - 队列配置
type QueueConfig struct {
    MaxSize           int           // 最大队列大小(10000)
    DefaultMaxRetries int           // 默认最大重试次数(5)
    DefaultRetryDelay time.Duration // 默认重试延迟(30s)
}

// 队列消息状态
type QueuedStatus string
const (
    QueuedPending    = "pending"     // 待处理
    QueuedProcessing = "processing"  // 处理中
    QueuedDelivered  = "delivered"   // 已送达
    QueuedFailed     = "failed"      // 失败
    QueuedDead       = "dead"        // 死信
)

重试机制:

// RetryConfig - 重试配置
type RetryConfig struct {
    MaxRetries   int                 // 最大重试次数(5)
    BaseDelay    time.Duration       // 基础延迟(1s)
    MaxDelay     time.Duration       // 最大延迟(5min)
    JitterFactor float64             // 抖动因子(0.1)
}

// 重试延迟算法:指数退避 + 抖动
// delay = min(BaseDelay * 2^(retryCount-1), MaxDelay) * (1 ± JitterFactor)

缓冲配置:

// BufferConfig - 缓冲配置
type BufferConfig struct {
    MaxPerAgent     int              // 每个 Agent 最大缓冲数(1000)
    MaxAge          time.Duration    // 消息最大存活时间(24h)
    CleanupInterval time.Duration    // 清理间隔(1h)
}

1.5 灵瞰 Panorama - 可观测与度量层

定位:居高临下,俯瞰全局。如"天眼"般记录每一帧交互的耗时、置信度与资源消耗。

核心功能:

功能 方法 说明
开始追踪 StartTrace(traceID, name, agentID) 创建追踪链路
开始跨度 StartSpan(traceID, parentSpanID, name, agentID) 创建子跨度
结束跨度 EndSpan(traceID, spanID, status, err) 结束跨度
添加日志 AddSpanLog(traceID, spanID, message, fields) 添加跨度日志
记录指标 RecordMetric(name, type, value, labels) 记录指标
递增计数 IncrementCounter(name, labels, delta) 递增计数器
设置计量 SetGauge(name, labels, value) 设置计量值
健康检查 CheckAll(ctx) 检查所有组件健康状态

追踪结构:

// Trace - 追踪链路
type Trace struct {
    TraceID   string                 // 追踪 ID
    RootSpan  *Span                  // 根跨度
    Spans     map[string]*Span       // 跨度集合
    StartTime time.Time              // 开始时间
    EndTime   *time.Time             // 结束时间
    Metadata  map[string]interface{} // 元数据
}

// Span - 追踪跨度
type Span struct {
    SpanID     string                 // 跨度 ID
    TraceID    string                 // 所属追踪 ID
    ParentID   string                 // 父跨度 ID
    Name       string                 // 跨度名称
    Service    string                 // 服务名
    AgentID    string                 // Agent ID
    StartTime  time.Time              // 开始时间
    EndTime    *time.Time             // 结束时间
    Duration   time.Duration          // 持续时间
    Status     SpanStatus             // 跨度状态
    Tags       map[string]string      // 标签
    Logs       []SpanLog              // 日志
    Attributes map[string]interface{} // 属性
}

// SpanStatus - 跨度状态
type SpanStatus string
const (
    SpanStatusPending   = "pending"    // 待定
    SpanStatusRunning   = "running"    // 运行中
    SpanStatusSuccess   = "success"    // 成功
    SpanStatusFailed    = "failed"     // 失败
    SpanStatusCancelled = "cancelled"  // 已取消
)

指标类型:

type MetricType string
const (
    MetricCounter   = "counter"    // 计数器(累加)
    MetricGauge     = "gauge"      // 计量器(瞬时值)
    MetricHistogram = "histogram"  // 直方图(分布)
)

健康状态:

type HealthStatus string
const (
    HealthStatusHealthy   = "healthy"     // 健康
    HealthStatusDegraded  = "degraded"    // 降级
    HealthStatusUnhealthy = "unhealthy"   // 不健康
    HealthStatusUnknown   = "unknown"     // 未知
)

1.6 灵衡 Libra - 价值结算与激励层

定位:权衡利弊,计量公平。将 Agent 间的"智力贡献"与"资源消耗"通证化,动态定价。

核心功能:

功能 方法 说明
创建账户 CreateAccount(agentID) 为 Agent 创建账户
获取余额 GetBalance(agentID) 查询账户余额
转账 Transfer(from, to, amount, ...) 执行转账
设置价格 SetPrice(taskType, capability, price) 设置任务价格
获取价格 GetPrice(taskType) 获取任务价格
计算成本 CalculateCost(taskType, complexity, duration) 计算任务成本
结算任务 SettleTask(taskID, ...) 结算单个任务
结算群组任务 SettleGroupTask(taskID, ...) 结算群组任务(分摊费用)
奖励 Reward(agentID, amount, reason) 发放奖励

账户与交易:

// Account - 账户
type Account struct {
    AgentID   string                  // Agent ID
    Balance   map[string]float64      // 余额(currency -> amount)
    CreatedAt time.Time               // 创建时间
    Metadata  map[string]interface{}  // 元数据
}

// Transaction - 交易记录
type Transaction struct {
    TxID        string                // 交易 ID
    Type        TransactionType       // 交易类型
    FromAgentID string                // 发送方
    ToAgentID   string                // 接收方
    Amount      float64               // 金额
    Currency    string                // 货币("SYN")
    Description string                // 描述
    TaskID      string                // 关联任务 ID
    Timestamp   time.Time             // 时间戳
    Status      TransactionStatus     // 交易状态
}

// TransactionType - 交易类型
type TransactionType string
const (
    TxTaskExecution    = "task_execution"      // 任务执行
    TxDataSharing      = "data_sharing"        // 数据共享
    TxAPIInvocation    = "api_invocation"      // API 调用
    TxGroupContribution = "group_contribution" // 群组贡献
    TxDeposit          = "deposit"             // 充值
    TxWithdraw         = "withdraw"            // 提现
    TxReward           = "reward"              // 奖励
    TxPenalty          = "penalty"             // 惩罚
)

定价规则:

// 基础价格(默认)
var BasePrice = map[string]float64{
    "text_generation":   1.0,
    "image_generation":  5.0,
    "video_generation":  20.0,
    "audio_generation":  3.0,
    "analysis":          2.0,
    "translation":       1.5,
}

// 成本计算公式
// cost = basePrice * complexityFactor + durationFactor
// complexityFactor = complexity * 0.5
// durationFactor = duration_seconds * 0.01

1.7 灵枢 Pivot - 紧急制动与治理层

定位:取自《灵枢经》。这是整个协议的"总闸"与"方向盘",不轻易触发,但触发时能以最小代价重置网络状态。

核心功能:

功能 方法 说明
允许请求 Allow() 检查熔断器是否允许请求
记录成功 RecordSuccess() 记录成功(用于恢复)
记录失败 RecordFailure() 记录失败(触发熔断)
获取状态 State() 获取熔断器状态
重置 Reset() 重置熔断器
设置治理级别 SetLevel(level) 设置治理级别
封禁 Agent BanAgent(agentID, reason) 封禁 Agent
解封 Agent UnbanAgent(agentID) 解封 Agent
紧急停止 EmergencyStop(reason) 一键熔断所有
恢复正常 Resume() 恢复正常模式
应用升级 ApplyUpgrade(version) 应用协议升级
回滚升级 RollbackUpgrade(version) 回滚协议升级

熔断器:

// CircuitBreaker - 熔断器
type CircuitBreaker struct {
    name         string            // 熔断器名称
    state        CircuitState      // 状态
    failureCount int               // 失败计数
    successCount int               // 成功计数(半开状态)
    threshold    int               // 失败阈值(5)
    timeout      time.Duration     // 熔断超时(30s)
}

// CircuitState - 熔断器状态
type CircuitState string
const (
    CircuitClosed   = "closed"     // 关闭:正常流通
    CircuitOpen     = "open"       // 打开:熔断,拒绝请求
    CircuitHalfOpen = "half_open"  // 半开:尝试恢复
)

// 状态转换规则:
// Closed -> Open:失败次数 >= threshold
// Open -> HalfOpen:超过 timeout 时间
// HalfOpen -> Closed:连续成功 3 次
// HalfOpen -> Open:再次失败

治理级别:

type GovernanceLevel int
const (
    GovLevelNormal    = iota  // 正常运行
    GovLevelWatch             // 观察模式(记录但不限制)
    GovLevelRestricted        // 受限模式(限流)
    GovLevelEmergency         // 紧急模式(仅白名单)
    GovLevelShutdown          // 停机模式(全部拒绝)
)

2. 内容类型系统

Synapse 协议支持多种内容类型的传输,适用于不同场景的数据交互。

2.1 传输模式

type TransferMode string
const (
    TransferInline    = "inline"    // 内嵌传输(base64 编码)
    TransferURL       = "url"       // URL 引用传输
    TransferStreaming = "streaming" // 流式传输
    TransferMultipart = "multipart" // Multipart 表单传输
)

// 文件大小阈值判断
// size <= 1MB → inline
// size > 1MB → url 或 streaming

2.2 内容编码

type ContentEncoding string
const (
    EncodingNone    = "none"      // 无编码
    EncodingBase64  = "base64"    // Base64 编码
    EncodingGzip    = "gzip"      // Gzip 压缩
    EncodingDeflate = "deflate"   // Deflate 压缩
)

2.3 内容类型定义

文本内容:

type TextContent struct {
    ContentBase
    Charset  string  `json:"charset"`             // 字符集("utf-8")
    Language string  `json:"language,omitempty"`  // 语言
    Data     string  `json:"data"`                // 文本数据
}

JSON 内容:

type JSONContent struct {
    ContentBase
    Schema    string `json:"schema,omitempty"`     // Schema 标识
    SchemaURL string `json:"schema_url,omitempty"` // Schema URL
    Data      any    `json:"data"`                 // JSON 数据
}

代码内容:

type CodeContent struct {
    ContentBase
    Language     string   `json:"language"`              // 编程语言
    Version      string   `json:"version,omitempty"`     // 语言版本
    Dependencies []string `json:"dependencies,omitempty"` // 依赖列表
    Data         string   `json:"data"`                  // 代码内容
}

文件内容:

type FileContent struct {
    ContentBase
    Name        string     `json:"name"`                  // 文件名
    Role        string     `json:"role,omitempty"`        // 角色("reference", "result", "attachment")
    Description string     `json:"description,omitempty"` // 描述
    
    // Inline 传输
    Data string `json:"data,omitempty"`         // base64 编码
    
    // URL 传输
    URL            string     `json:"url,omitempty"`          // URL
    URLExpiresAt   *Timestamp `json:"url_expires_at,omitempty"` // 过期时间
    DownloadMethod string     `json:"download_method,omitempty"` // GET/POST/signed_url
    RangeSupported bool       `json:"range_supported,omitempty"` // 是否支持范围请求
    
    // 元数据
    Width        int     `json:"width,omitempty"`        // 宽度(图片/视频)
    Height       int     `json:"height,omitempty"`       // 高度
    Duration     float64 `json:"duration,omitempty"`     // 时长(音视频)
    Resolution   string  `json:"resolution,omitempty"`   // 分辨率
    ThumbnailURL string  `json:"thumbnail_url,omitempty"` // 缩略图 URL
}

内容包(多文件):

type ContentBundle struct {
    ID          string              `json:"id"`                   // 包 ID
    Name        string              `json:"name,omitempty"`       // 包名
    Description string              `json:"description,omitempty"` // 描述
    Items       []ContentBundleItem `json:"items"`                // 内容项列表
    TotalSize   int64               `json:"total_size,omitempty"` // 总大小
    CreatedAt   Timestamp           `json:"created_at"`           // 创建时间
}

type ContentBundleItem struct {
    ID      string `json:"id"`      // 项 ID
    Role    string `json:"role"`    // 角色(main, reference, attachment, thumbnail)
    Content any    `json:"content"` // 内容对象
}

2.4 MIME 类型常量

const (
    MIMEJSON          = "application/json"
    MIMETextPlain     = "text/plain"
    MIMETextMarkdown  = "text/markdown"
    MIMETextHTML      = "text/html"
    MIMETextCSV       = "text/csv"
    MIMEImageJPEG     = "image/jpeg"
    MIMEImagePNG      = "image/png"
    MIMEImageWebP     = "image/webp"
    MIMEImageGIF      = "image/gif"
    MIMEImageSVG      = "image/svg+xml"
    MIMEVideoMP4      = "video/mp4"
    MIMEVideoWebM     = "video/webm"
    MIMEAudioMP3      = "audio/mpeg"
    MIMEAudioWAV      = "audio/wav"
    MIMEAudioAAC      = "audio/aac"
    MIMEPDF           = "application/pdf"
    MIMEOctetStream   = "application/octet-stream"
    MIMEMultipartForm = "multipart/form-data"
)

3. 能力声明系统

每个 Agent 必须实现 CapabilitiesProvider 接口,以便其他 Agent 查询其能力。

3.1 核心接口

type CapabilitiesProvider interface {
    GetCapabilities(ctx context.Context) (*AgentCapabilities, error)
    GetSupportedInterfaces() []ImplementedInterface
    GetTaskTypeCapabilities(taskType string) (*SupportedTaskType, error)
}

3.2 能力描述结构

type AgentCapabilities struct {
    AgentID         string            `json:"agent_id"`
    AgentName       string            `json:"agent_name"`
    SystemID        string            `json:"system_id"`
    ProtocolVersion string            `json:"protocol_version"`
    
    SupportedTaskTypes      []SupportedTaskType `json:"supported_task_types"`
    SupportedContentTypes   []string            `json:"supported_content_types"`
    SupportedTransportModes []TransportMode     `json:"supported_transport_modes"`
    
    // 限制
    MaxFileSize        int64 `json:"max_file_size"`
    MaxConcurrentTasks int   `json:"max_concurrent_tasks"`
    MaxTaskDuration    int   `json:"max_task_duration_seconds"`
    
    // 特性支持
    SupportProgressUpdates bool `json:"support_progress_updates"`
    SupportStreaming       bool `json:"support_streaming"`
    SupportHiL             bool `json:"support_hil"`
    SupportGroups          bool `json:"support_groups"`
}

type SupportedTaskType struct {
    Type          string   `json:"type"`
    Name          string   `json:"name"`
    Description   string   `json:"description"`
    EstimatedTime string   `json:"estimated_time"`  // 如 "30s-2min"
    InputSchema   string   `json:"input_schema,omitempty"`
    OutputSchema  string   `json:"output_schema,omitempty"`
    Capabilities  []string `json:"capabilities,omitempty"`
}

3.3 接口分类与合规级别

接口分类:

type InterfaceCategory string
const (
    CategoryCore       = "core"       // 核心接口(身份、消息处理)
    CategoryP2P        = "p2p"        // P2P 接口(任务处理、回调)
    CategoryGroup      = "group"      // 群组接口(子任务、投票)
    CategoryHiL        = "hil"        // HiL 接口(人工决策、升级)
    CategoryTransport  = "transport"  // 传输接口(HTTP、流式)
    CategorySecurity   = "security"   // 安全接口(认证、幂等)
    CategoryManagement = "management" // 管理接口(配置、监控)
)

合规级别:

// basic:必须实现
// complete:推荐实现
// advanced:可选实现

const (
    ComplianceBasic    = "basic"
    ComplianceComplete = "complete"
    ComplianceAdvanced = "advanced"
)

3.4 标准接口注册表

系统预定义的标准接口列表(详见 capabilities/provider.go):

接口名 分类 合规级别 说明
AgentIdentity core basic Agent 身份信息
MessageHandler core basic 消息处理
CapabilitiesProvider core basic 能力声明
P2PTaskHandler p2p basic P2P 任务处理
CallbackSender p2p complete 回调发送
CallbackReceiver p2p basic 回调接收端点
TaskStatusProvider p2p complete 任务状态查询
GroupTaskHandler group advanced 群组任务处理
GroupManager group advanced 群组管理
VotingHandler group advanced 投票处理
HILHandler hil complete HiL 决策处理
EscalationHandler hil advanced 升级处理
HTTPTransport transport basic HTTP 传输
MultipartTransport transport complete Multipart 文件传输
HybridTransport transport complete 混合传输(回调+轮询)
StreamingTransport transport advanced 流式传输
Authenticator security basic 认证签名
IdempotencyHandler security basic 幂等性处理

4. gRPC 传输协议

Synapse 协议支持 HTTP REST 和 gRPC 双传输模式,通过 gRPC Gateway 实现 HTTP/gRPC 双端点。

4.1 Proto 定义位置

proto/synapse.proto

4.2 服务定义

任务服务 TaskService:

service TaskService {
  rpc SubmitTask(SubmitTaskRequest) returns (SubmitTaskResponse);
  rpc SubmitTaskWithFiles(SubmitTaskWithFilesRequest) returns (SubmitTaskResponse);
  rpc GetTask(GetTaskRequest) returns (TaskStatusResponse);
  rpc GetTaskStatus(GetTaskRequest) returns (TaskStatusResponse);
  rpc ListTasks(ListTasksRequest) returns (ListTasksResponse);
  rpc CancelTask(CancelTaskRequest) returns (CancelTaskResponse);
  rpc StreamTaskStatus(stream TaskStatusStreamRequest) returns (stream TaskStatusUpdate);
}

消息服务 SynapseMessageService:

service SynapseMessageService {
  rpc SendMessage(SendMessageRequest) returns (SendMessageResponse);
  rpc StreamMessages(stream SynapseMessage) returns (stream SynapseMessage);
  rpc ReceiveCallback(google.protobuf.Empty) returns (stream SynapseMessage);
}

能力服务 CapabilitiesService:

service CapabilitiesService {
  rpc GetCapabilities(google.protobuf.Empty) returns (CapabilitiesResponse);
  rpc QueryAgent(QueryAgentRequest) returns (CapabilitiesResponse);
  rpc ListAgents(google.protobuf.Empty) returns (ListAgentsResponse);
}

群组服务 GroupService:

service GroupService {
  rpc CreateGroup(CreateGroupRequest) returns (CreateGroupResponse);
  rpc JoinGroup(JoinGroupRequest) returns (JoinGroupResponse);
  rpc LeaveGroup(LeaveGroupRequest) returns (LeaveGroupResponse);
  rpc DisbandGroup(DisbandGroupRequest) returns (DisbandGroupResponse);
  rpc ListGroupMembers(ListGroupMembersRequest) returns (ListGroupMembersResponse);
  rpc StreamGroupMessages(stream SynapseMessage) returns (stream SynapseMessage);
}

健康服务 HealthService:

service HealthService {
  rpc HealthCheck(google.protobuf.Empty) returns (HealthCheckResponse);
}

4.3 HTTP 路由映射

通过 google.api.http 注解实现 REST API:

gRPC 方法 HTTP 路由
SubmitTask POST /api/v1/synapse/task
SubmitTaskWithFiles POST /api/v1/synapse/task/multipart
GetTask GET /api/v1/synapse/task/{task_id}
GetTaskStatus GET /api/v1/synapse/task/{task_id}/status
ListTasks GET /api/v1/synapse/tasks
CancelTask POST /api/v1/synapse/task/{task_id}/cancel
GetCapabilities GET /api/v1/synapse/capabilities
QueryAgent GET /api/v1/synapse/agents/{agent_id}
ListAgents GET /api/v1/synapse/agents
CreateGroup POST /api/v1/synapse/group
JoinGroup POST /api/v1/synapse/group/{group_id}/join
LeaveGroup POST /api/v1/synapse/group/{group_id}/leave
DisbandGroup POST /api/v1/synapse/group/{group_id}/disband
ListGroupMembers GET /api/v1/synapse/group/{group_id}/members
HealthCheck GET /api/v1/synapse/health

5. 人工介入(HiL)三级升级机制

Synapse 协议支持三级人工介入升级机制,根据决策的重要性和紧急程度分级处理。

5.1 升级级别定义

级别 名称 默认超时 适用场景
Level 1 Agent 建议 + 人确认 24 小时 信息缺失、创意方向、用户主动请求
Level 2 必须人工决策 12 小时(紧急 2 小时) 品牌风格、合规、能力不足、高风险
Level 3 专家/管理层决策 72 小时 战略决策、重大争议、跨系统冲突

5.2 HiL 状态流转

type HILStatus string
const (
    HILStatusPending   = "pending"    // 待处理
    HILStatusWaiting   = "waiting"    // 等待人工响应
    HILStatusDeciding  = "deciding"   // 人工正在决策
    HILStatusApproved  = "approved"   // 已批准
    HILStatusRejected  = "rejected"   // 已拒绝
    HILStatusTimeout   = "timeout"    // 超时
    HILStatusEscalated = "escalated"  // 已升级
)

5.3 HiL 请求结构

type HILRequest struct {
    ID              string        // 请求 ID
    TaskID          string        // 关联任务 ID
    EscalationType  string        // P2P, GROUP, INTER_GROUP
    EscalationLevel int           // 1, 2, 3
    Reason          HILReason     // 介入原因
    Context         HILContext    // 决策上下文
    Options         []HILOption   // 可选方案
    SuggestedValue  any           // Agent 建议值
    Deadline        time.Time     // 截止时间
    Status          HILStatus     // 当前状态
    Response        *HILResponse  // 人工响应
}

type HILReason struct {
    Code    string  // 原因代码
    Message string  // 原因描述
}

type HILOption struct {
    Field      string  // 字段名
    Value      any     // 候选值
    Label      string  // 显示标签
    ProsCons   string  // 优缺点分析
    Confidence int     // Agent 置信度(0-100)
}

5.4 升级判定规则

// 需要人工介入的原因代码
var hilRequiredCodes = map[string]bool{
    "BRAND_STYLE":        true,   // 品牌风格
    "CREATIVE_DIRECTION": true,   // 创意方向
    "COMPLIANCE":         true,   // 合规要求
    "CAPABILITY_LACKING": true,   // 能力不足
    "USER_REQUESTED":     true,   // 用户请求
    "HIGH_COST_RISK":     true,   // 高成本风险
}

// 升级级别判定
var levelMap = map[string]int{
    "INFO_MISSING":       1,      // Level 1
    "CREATIVE_DIRECTION": 1,
    "BRAND_STYLE":        2,      // Level 2
    "COMPLIANCE":         2,
    "CAPABILITY_LACKING": 2,
    "HIGH_COST_RISK":     2,
    "RESOURCE_DEADLOCK":  2,
    "STRATEGIC_DECISION": 3,      // Level 3
}

5.5 人工响应结构

type HILResponse struct {
    DecisionID string       // 决策 ID
    UserID     string       // 决策用户 ID
    UserName   string       // 用户名
    UserRole   string       // 用户角色
    Action     string       // approve/reject/modify/select
    Decision   HILDecision  // 决策内容
    Notes      string       // 备注
    Timestamp  time.Time    // 时间戳
}

type HILDecision struct {
    ApprovedFields  map[string]interface{}  // 批准的字段
    ModifiedFields  map[string]interface{}  // 修改的字段
    SelectedOption  any                     // 选择的选项
    RejectionReason string                  // 拒绝原因
}

6. 数字分段错误码系统

Synapse 协议使用数字分段错误码,便于程序化处理和国际化。

6.1 错误码分段

分段范围 类别 说明
1000-1999 SYSTEM_ERROR 系统错误
2000-2999 TASK_ERROR 任务错误
3000-3999 INFO_ERROR 信息错误
4000-4999 CAPABILITY_ERROR 能力错误
5000-5999 SECURITY_ERROR 安全错误
6000-6999 COMMUNICATION_ERROR 通信错误
7000-7999 GROUP_ERROR 群组错误
8000-8999 HIL_ERROR HiL 错误
9000-9999 VALIDATION_ERROR 验证错误

6.2 具体错误码定义

系统错误(1000-1999):

错误码 名称 说明
1000 ErrSystemError 系统错误
1001 ErrInternalError 内部错误
1002 ErrMaintenance 系统维护中

任务错误(2000-2999):

错误码 名称 说明
2001 ErrTaskNotFound 任务不存在
2002 ErrTaskAlreadyCompleted 任务已完成
2003 ErrTaskCancelled 任务已取消
2004 ErrTaskTimeout 任务超时
2005 ErrTaskInvalidParams 任务参数无效

信息错误(3000-3999):

错误码 名称 说明
3001 ErrRequiredFieldMissing 必填字段缺失
3002 ErrInvalidFieldFormat 字段格式无效
3003 ErrInfoNotProvided 信息未提供

能力错误(4000-4999):

错误码 名称 说明
4001 ErrUnsupportedTaskType 不支持的任务类型
4002 ErrCapabilityLacking 能力不足
4003 ErrResourceBusy 资源繁忙
4004 ErrQuotaExceeded 配额超限

安全错误(5000-5999):

错误码 名称 说明
5001 ErrAuthFailed 认证失败
5002 ErrSignatureInvalid 签名无效
5003 ErrPermissionDenied 权限不足
5004 ErrPolicyViolation 策略违规

通信错误(6000-6999):

错误码 名称 说明
6001 ErrEndpointUnreachable 端点不可达
6002 ErrCallbackFailed 回调失败
6003 ErrMessageFormatInvalid 消息格式无效
6004 ErrTTLExpired TTL 过期

群组错误(7000-7999):

错误码 名称 说明
7001 ErrGroupNotFound 群组不存在
7002 ErrGroupNotActive 群组未激活
7003 ErrMemberNotFound 成员不存在
7004 ErrNotGroupMember 不是群组成员
7005 ErrConsensusNotReached 未达成共识
7006 ErrRoleNotFound 角色不存在
7007 ErrAlreadyMember 已是成员
7008 ErrGroupFull 群组已满

HiL 错误(8000-8999):

错误码 名称 说明
8001 ErrHumanTimeout 人工决策超时
8002 ErrHumanDeclined 人工拒绝
8003 ErrEscalationLevel 升级级别错误

验证错误(9000-9999):

错误码 名称 说明
9001 ErrInvalidParams 参数无效

6.3 错误响应结构

type SynapseError struct {
    Code       SynapseErrorCode `json:"code"`              // 数字错误码
    Category   string           `json:"category"`          // 错误类别
    Message    string           `json:"message"`           // 错误描述
    Details    any              `json:"details,omitempty"` // 详情
    RetryAfter *int             `json:"retry_after,omitempty"` // 重试等待(秒)
    Timestamp  Timestamp        `json:"timestamp"`         // 时间戳
}

type ErrorResponse struct {
    Success bool          `json:"success"`
    Error   *SynapseError `json:"error"`
}

7. 消息扩展字段

统一消息信封 UnifiedSynapseMessage 包含扩展字段,用于支持高级功能。

7.1 扩展字段定义

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"` // 会话 ID
    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"`      // 目标 ID 列表
    SignatureAlgorithm string        `json:"signature_algorithm,omitempty"` // 签名算法
}

7.2 群组目标类型

type GroupTargetType string
const (
    TargetTypeAll      GroupTargetType = "all"       // 所有成员
    TargetTypeRole     GroupTargetType = "role"      // 按角色
    TargetTypeSpecific GroupTargetType = "specific"  // 指定成员
)

7.3 字段用途说明

字段 用途
conversation_id 关联同一会话的多条消息,用于多轮对话场景
ttl 消息存活时间,过期后由灵泊(Harbor)清理
broadcast 广播标识,用于群组消息广播
encrypt 加密标识,指示 payload 已加密
target_type + target_ids 精确控制群组消息的目标范围
signature_algorithm 明确签名算法,默认 HMAC-SHA256

8. 传输模式定义

Synapse 协议支持多种传输模式,适配不同的网络环境和业务场景。

8.1 传输模式枚举

type TransportMode string
const (
    TransportModeCallback TransportMode = "callback" // 异步回调(Webhook)
    TransportModePolling  TransportMode = "polling"  // 异步轮询
    TransportModeSync     TransportMode = "sync"     // 同步等待
    TransportModeHybrid   TransportMode = "hybrid"   // 回调 + 轮询兜底
)

8.2 传输偏好配置

type TransportPreferences struct {
    Preferred        TransportMode `json:"preferred"`              // 首选模式
    Fallback         TransportMode `json:"fallback,omitempty"`     // 兜底模式
    CallbackEndpoint string        `json:"callback_endpoint,omitempty"` // 回调地址
    PollingInterval  int           `json:"polling_interval,omitempty"`  // 轮询间隔(秒)
    ProgressUpdates  bool          `json:"progress_updates"`            // 是否接收进度更新
    ProgressInterval int           `json:"progress_interval,omitempty"` // 进度更新间隔(秒)
}

// 默认传输偏好
func DefaultTransportPreferences() *TransportPreferences {
    return &TransportPreferences{
        Preferred:        TransportModeCallback,
        Fallback:         TransportModePolling,
        PollingInterval:  5,
        ProgressUpdates:  true,
        ProgressInterval: 10,
    }
}

8.3 轮询 API 类型

// 任务状态响应
type TaskStatusResponse struct {
    Success bool          `json:"success"`
    Task    *TaskInfo     `json:"task,omitempty"`
    Error   *SynapseError `json:"error,omitempty"`
}

// 任务信息
type TaskInfo struct {
    ID        string        `json:"id"`
    Type      string        `json:"type"`
    Status    string        `json:"status"`
    Progress  int           `json:"progress"`       // 0-100
    Message   string        `json:"message,omitempty"`
    CreatedAt Timestamp     `json:"created_at"`
    UpdatedAt Timestamp     `json:"updated_at"`
    ETA       *Timestamp    `json:"eta,omitempty"`
    Result    any           `json:"result,omitempty"`
    Error     *SynapseError `json:"error,omitempty"`
    ETag      string        `json:"etag,omitempty"` // 用于增量查询
}

// 任务列表响应
type TaskListResponse struct {
    Success bool       `json:"success"`
    Tasks   []TaskInfo `json:"tasks"`
    Total   int        `json:"total"`
    Limit   int        `json:"limit"`
    Offset  int        `json:"offset"`
    HasMore bool       `json:"has_more"`
}

// 任务事件
type TaskEvent struct {
    ID        string    `json:"id"`
    Type      string    `json:"type"` // status_update, progress, log, error, complete
    Timestamp Timestamp `json:"timestamp"`
    Data      any       `json:"data"`
}

// 任务事件流响应
type TaskEventsResponse struct {
    Success bool        `json:"success"`
    Since   string      `json:"since"`
    Events  []TaskEvent `json:"events"`
    HasMore bool        `json:"has_more"`
    Next    string      `json:"next_cursor,omitempty"`
}

8.4 流式传输类型

// 流数据块
type StreamChunk struct {
    TaskID    string    `json:"task_id"`
    Sequence  int64     `json:"sequence"`
    ChunkType string    `json:"chunk_type"` // text, binary, audio, video
    Data      string    `json:"data"`       // base64(二进制)
    Final     bool      `json:"final"`
    Timestamp Timestamp `json:"timestamp"`
}

// 流完成通知
type StreamComplete struct {
    TaskID              string `json:"task_id"`
    TotalChunks         int64  `json:"total_chunks"`
    FullContentChecksum string `json:"full_content_checksum"`
    Result              any    `json:"result,omitempty"`
}

附录:SDK 结构

SDK 统一为一个包,包含三个子包对应三种协议:

sdk/
├── doc.go           # SDK 包文档
├── p2a/             # P2A 协议客户端(外部调用)
│   └── client.go
├── a2a/             # A2A 协议客户端(点对点)
│   └── client.go
└── a2n/             # A2N 协议客户端(群组)
│   └── client.go

SDK 使用示例:

// P2A:外部调用方
import "synapse/sdk/p2a"

client := p2a.NewClient("http://agent-endpoint")
resp, err := client.SubmitTask(ctx, &p2a.TaskRequest{
    TaskType: "text_generation",
    Payload:  payload,
})

// A2A:Agent 点对点通信
import "synapse/sdk/a2a"

client := a2a.NewClient(myEndpoint, config)
err := client.SendTaskRequest(ctx, targetEndpoint, taskPayload)

// A2N:Agent 群组协作
import "synapse/sdk/a2n"

client := a2n.NewClient(myEndpoint, config)
err := client.JoinGroup(ctx, groupID)
err := client.SubmitVote(ctx, voteID, optionID)

文档结束

本实现细节文档与核心协议文档共同构成 Synapse 协议的完整规范。 核心协议文档:01-synapse-raw-protocol.md、02-p2p-protocol.md、03-group-protocol.md、04-caller-protocol.md