Claw[ ]

硬件助手产品系统架构 — AI Agent 方向升级(端·云·第三方 API 分层设计) #

面向职位:传音集团 · 资深后端开发 — 大模型算法部 核心职责 #1:研发硬件助手产品系统架构的智能体(AI Agent)方向升级,考虑端、云、第三方 API 的分层设计 背景:传音 TECNO AI 助手 Ella、覆盖 70+ 国家/地区、2025 年 5 亿+ AI 请求


一、现状与升级目标 #

1.1 当前架构痛点 #

痛点 表现
能力孤岛 Ella 的各功能(语音/翻译/写作/课业辅导)是独立模块,缺乏统一智能体调度
端云割裂 端侧推理与云端推理各自为战,任务路由依赖硬编码规则
第三方接入难 外部服务(如豆包图像生成)通过胶水代码接入,无标准化协议
扩展成本高 每新增一个能力,需要 Ella 端 + 云端同步改造
弱网体验差 新兴市场网络不稳定,云端不可用时降级策略粗糙

1.2 升级目标 #

升级前:Ella = 功能模块集合(语音 + 翻译 + 视觉 + 写作 ...)
升级后:Ella = AI Agent(意图理解 → 任务规划 → 端/云/三方能力编排 → 结果交付)

核心转变:从"功能调用"到"智能体编排"


二、端·云·第三方 API 三层架构 #

2.1 总体分层 #

┌─────────────────────────────────────────────────────────────────┐
│                        用户交互层                                │
│  语音交互 │ 文本对话 │ 视觉交互 │ 手势/触控 │ 多设备(OneLeap)   │
├─────────────────────────────────────────────────────────────────┤
│                    【端侧层 — On-Device】                         │
│                                                                 │
│  ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐   │
│  │ 端侧 Agent    │ │ 端侧能力     │ │ 端侧 Memory            │   │
│  │ (轻量编排)  │ │ ├─ 离线翻译  │ │ ├─ 短期对话上下文       │   │
│  │              │ │ ├─ 离线语音  │ │ ├─ 本地偏好设置         │   │
│  │ ├─ 意图路由  │ │ ├─ 轻量 OCR  │ │ └─ 缓存知识             │   │
│  │ ├─ 端云调度  │ │ ├─ AI 降噪   │ │                        │   │
│  │ └─ 离线降级  │ │ ├─ 端侧 AIGC │ │                        │   │
│  └──────────────┘ │ └─ 端侧生图  │ └────────────────────────┘   │
│                   │  (30fps)    │                                │
│                   └──────────────┘                                │
│                   推理引擎:NPU/DSP 量化模型                       │
├─────────────────────────────────────────────────────────────────┤
│                    【云端层 — Cloud Platform】                    │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              Agent 编排引擎(核心)                        │   │
│  │                                                          │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐  │   │
│  │  │ 任务规划  │ │ 工具选择  │ │ 状态管理  │ │ 安全拦截   │  │   │
│  │  │ Planner  │ │ Selector │ │ State    │ │ Guardrail  │  │   │
│  │  └──────────┘ └──────────┘ └──────────┘ └────────────┘  │   │
│  └──────────────────┬───────────────────────────────────────┘   │
│                     │                                           │
│  ┌──────────────────┼──────────────────┬────────────────────┐   │
│  │                  │                  │                    │   │
│  ▼                  ▼                  ▼                    ▼   │
│ ┌────────┐  ┌──────────────┐  ┌──────────────┐  ┌────────────┐ │
│ │ 自研   │  │ 大模型推理   │  │ 记忆/检索    │  │ 数据/业务  │ │
│ │ 能力   │  │ (Gemini等)   │  │ (RAG+向量库) │  │ 服务       │ │
│ │ 服务   │  │              │  │              │  │            │ │
│ │·语音   │  │              │  │              │  │            │ │
│ │·翻译   │  │              │  │              │  │            │ │
│ │·视觉   │  │              │  │              │  │            │ │
│ └────────┘  └──────────────┘  └──────────────┘  └────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│                  【第三方 API 层 — Third-Party】                 │
│                                                                 │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐          │
│  │ 图像生成 │ │ 视频生成 │ │ 地图/    │ │ 生活服务 │ ...       │
│  │ (豆包)   │ │ (Veo)    │ │ 天气     │ │ API      │          │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘          │
│                                                                 │
│  统一接入:MCP Server 协议 / A2A Agent 协议                     │
│  统一治理:限流 / 熔断 / 降级 / 计量 / 计费                     │
└─────────────────────────────────────────────────────────────────┘

2.1.1 架构说明 #

(1)三层职责与数据流向

┌─────────┐     请求上行      ┌─────────┐     能力调用      ┌────────────┐
│  端侧   │ ─────────────────→ │  云端   │ ────────────────→ │ 第三方 API  │
│ (决策层) │ ←───────────────── │ (编排层) │ ←─────────────── │ (能力层)    │
└─────────┘     结果下行      └─────────┘     结果返回      └────────────┘

数据流向说明:
• 上行:端侧 → 云端(携带意图分类结果、网络状态、设备能力、用户输入)
• 编排:云端 Agent 编排引擎接收请求,进行任务规划 + 工具选择
• 外调:云端按需调用第三方 API(MCP/A2A 协议),获取垂类专业能力
• 下行:结果经云端聚合/格式化后返回端侧渲染
• 端侧直出:部分请求在端侧即可闭环,不经过云端

(2)各层关键组件说明

层级 组件 说明 技术选型建议
端侧 意图分类器 轻量 NLP 模型,对用户输入做意图路由 MobileBERT / TinyLLM(< 100M 参数),NPU 推理
能力注册表 端侧已部署能力的清单 + 版本 + 状态 本地 SQLite + 热更新
端云调度器 根据意图/网络/隐私决定路由策略 规则引擎 + 轻量决策树
本地 Memory 对话上下文、用户偏好、缓存知识 SQLite + 轻量向量索引(Qdrant-lite)
云端 Agent 编排引擎 核心中枢:任务规划 + 工具选择 + 状态管理 Go 微服务 + LLM(Gemini/Claude)驱动 Planning
RAG 引擎 文档检索 + 知识增强 Milvus/Weaviate + Embedding 模型
Guardrail 内容安全 + 权限校验 多层过滤(关键词 + 分类模型 + 人工规则)
全局 Memory 跨会话用户画像 + 长期记忆 分布式 KV + 向量数据库
第三方 MCP Server 统一工具注册 + JSON-RPC 调用 MCP SDK + 自建 Proxy
A2A Gateway Agent 间发现 + 任务委托 A2A 协议栈 + Agent Card Registry
治理网关 限流 + 熔断 + 计量 + 计费 API Gateway(Kong/APISIX)+ 自定义中间件

(3)层级间通信协议

通信路径 协议 格式 说明
端侧 ↔ 云端 gRPC / Protobuf 二进制 低延迟、弱网友好、强类型
云端 ↔ 第三方(工具) MCP(JSON-RPC 2.0) JSON 标准化工具描述与调用
云端 ↔ 第三方(Agent) A2A JSON + HTTP Agent 能力发现 + 任务级协作
端侧内部 IPC(Binder/MessageQueue) 二进制 Android 端内组件通信

(4)端云部署拓扑

                        ┌──────────────────┐
                        │   CDN / Edge     │
                        │  (静态资源缓存)   │
                        └────────┬─────────┘
                                 │
                        ┌────────▼─────────┐
                        │  API Gateway     │
                        │  (鉴权/限流/路由) │
                        └────────┬─────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              ▼                  ▼                  ▼
        ┌──────────┐      ┌──────────┐      ┌──────────┐
        │  Agent    │      │  业务    │      │  数据    │
        │  编排引擎  │      │  服务    │      │  服务    │
        │          │      │          │      │          │
        │·Planner  │      │·语音服务 │      │·RAG检索  │
        │·Selector │      │·翻译服务 │      │·Memory   │
        │·State    │      │·视觉服务 │      │·Analytics│
        └────┬─────┘      └────┬─────┘      └────┬─────┘
             │                 │                  │
             └─────────────────┼──────────────────┘
                               │
                        ┌──────▼──────┐
                        │  MCP/A2A   │
                        │  治理网关    │
                        └──────┬──────┘
                               │
                    ┌──────────┼──────────┐
                    ▼          ▼          ▼
                 ┌────┐   ┌────┐   ┌────┐
                 │豆包│   │Veo │   │... │
                 └────┘   └────┘   └────┘

(5)资源预算约束

维度 端侧约束 云端约束
内存 < 500MB(端侧模型 + Memory) 弹性扩缩(K8s HPA)
CPU/NPU NPU/DSP 优先,CPU 兜底 GPU 集群(A100/H100/L4)
存储 < 2GB(模型 + 缓存) 分布式存储(PB 级)
网络 2G/3G/4G/WiFi 均要可用 专线 + 多区域
功耗 单次推理 < 1% 电量 不考虑

2.2 三层边界与职责划分 #

2.2.1 核心职责矩阵 #

层级 核心职责 典型场景 技术要求 失败策略
端侧 意图初判、快速响应、离线可用、隐私保护 离线翻译、语音唤醒、简单问答、AI 降噪 NPU/DSP 量化模型、< 500MB 内存、< 100ms 响应 降级到缓存 / 友好提示
云端 复杂推理、多步任务规划、大模型调用、全局记忆 AI Writing、多步任务执行、跨设备协同 高并发微服务、GPU 集群、向量数据库 切备用模型 / 降级到端侧
第三方 垂类专业能力补充 图像/视频生成、地图导航、外卖/打车 MCP/A2A 协议、API 网关、统一鉴权 切备用供应商 / 异步队列

2.2.2 边界判定原则 #

三层之间不是随意分工,而是有明确的边界判定原则,确保每个请求都能被最合适的层级处理:

判定维度:

① 算力需求
   低算力(文本分类、简单翻译、规则匹配)
     → 端侧

   中高算力(多轮对话、逻辑推理、代码生成)
     → 云端

   专业算力(图像/视频生成、3D 渲染)
     → 第三方

② 数据敏感性
   高敏感(健康数据、通讯录、密码、生物特征)
     → 优先端侧

   中敏感(位置信息、个人偏好)
     → 端侧 or 云端(用户授权)

   低敏感(天气、新闻、公开知识)
     → 云端 or 第三方

③ 实时性要求
   强实时(< 200ms:语音通话、实时翻译)
     → 端侧

   弱实时(< 3s:问答、写作)
     → 云端

   非实时(> 3s:生图、生视频、搜索)
     → 云端 + 第三方(可异步)

④ 网络依赖
   离线可用
     → 端侧

   需要联网但弱网可接受
     → 云端(带降级策略)

   必须联网
     → 云端 + 第三方(带熔断保护)

2.2.3 能力分层清单 #

将 Ella 的核心能力按层级归类,形成清晰的能力清单:

能力 归属层级 部署位置 是否可离线 说明
语音唤醒 端侧 NPU 轻量模型 始终在端侧,无需网络
离线翻译(5 语言) 端侧 NPU 量化翻译模型 覆盖非洲/东南亚主要语言
AI 降噪 端侧 DSP 音频处理 通话/会议实时降噪
轻量 OCR 端侧 NPU 视觉模型 文字提取、二维码识别
简单问答(FAQ) 端侧 本地向量库 + 轻量模型 高频问题本地回答
语音识别(完整) 云端 ASR 微服务 高精度、多语种
语音合成(自然音) 云端 TTS 微服务 多情感、多音色
AI 写作/续写 云端 LLM(Gemini/Claude) 长文本生成、润色
多步任务规划 云端 Agent 编排引擎 意图拆解、工具编排
RAG 知识检索 云端 向量数据库 + Embedding 本地知识 + 互联网知识
跨设备协同 云端 路由服务 + 推送服务 OneLeap 设备间同步
AI 图像生成 第三方 豆包 / SD(MCP 协议) 文生图、图生图
AI 视频生成 第三方 Veo / Runway(MCP 协议) 文生视频
地图/导航 第三方 Google Maps / 高德(API) 路线规划、POI 查询
天气查询 第三方 OpenWeather / 天气网(API) 实时天气、预报
生活服务 第三方 外卖/打车/快递(A2A) Agent 间任务委托

2.2.4 数据流转边界 #

三层之间的数据流动遵循最小必要原则

数据流转规则:

┌─────────────┐      最小必要数据       ┌─────────────┐
│             │ ──────────────────────→ │             │
│   端侧       │                        │   云端       │
│             │ ←────────────────────── │             │
└─────────────┘     处理结果 / 配置      └─────────────┘

规则:
• 端侧 → 云端:仅上传任务所需最小数据(意图类型 + 输入内容 + 设备上下文)
• 云端 → 第三方:经 Agent 编排引擎过滤后的结构化请求,不暴露用户原始输入
• 云端 → 端侧:返回聚合/格式化后的结果,不暴露内部处理细节
• 敏感数据默认不出端,除非用户明确授权

隐私保护分级:
┌──────┬──────────────────┬──────────────┬───────────────┐
│ 级别 │ 数据类型          │ 处理位置      │ 传输方式       │
├──────┼──────────────────┼──────────────┼───────────────┤
│ L0   │ 公开信息(天气等) │ 云端/第三方   │ 明文/HTTPS     │
│ L1   │ 个人偏好          │ 云端(授权)  │ 加密传输       │
│ L2   │ 位置/通讯录       │ 优先端侧      │ 加密传输 + 脱敏│
│ L3   │ 生物特征/密码     │ 仅端侧        │ 不出端         │
└──────┴──────────────────┴──────────────┴───────────────┘

2.2.5 端云能力的协同与互补 #

三层不是孤立存在,而是协同互补的关系:

协同模式:

1. 串联协同(Pipeline)
   端侧预处理 → 云端推理 → 第三方能力补充 → 端侧渲染
   例:拍照解题 = 端侧 OCR → 云端 LLM 解题 → 端侧展示

2. 并行协同(Parallel)
   云端同时调用多个第三方能力,汇总结果
   例:行程规划 = 天气 API + 地图 API + 餐饮 API → LLM 整合

3. 竞争协同(Fallback)
   主能力不可用时,自动切换到备选能力
   例:豆包不可用 → SD 自建 → 返回缓存

4. 增强协同(Augmentation)
   端侧轻量模型 + 云端大模型协同推理
   例:端侧意图初判 → 云端深度理解 → 结果回灌端侧模型

2.3 端云智能调度策略 #

2.3.1 端侧 Agent 轻量编排 #

端侧 Agent 是 Ella 的"第一道关卡",负责在 50ms 内做出路由决策。其核心是一个轻量级意图分类器 + 规则调度引擎,不依赖大模型。

┌─────────────────────────────────────────────────────────┐
│                  端侧 Agent 轻量编排                      │
│                                                         │
│  ┌───────────┐    ┌───────────┐    ┌──────────────────┐ │
│  │ 输入解析   │───→│ 意图分类  │───→│ 路由决策引擎      │ │
│  │ (文本/音频 │    │ (LiteModel│    │                  │ │
│  │  /图像)    │    │  <100M)   │    │ 5 维决策因子:     │ │
│  └───────────┘    └───────────┘    │                  │ │
│                   ┌───────────┐    │ ① 意图复杂度      │ │
│  ┌───────────┐    │ 能力注册表 │    │ ② 网络质量        │ │
│  │ 网络探针   │───→│ (Capability│    │ ③ 能力可用性      │ │
│  │ (RTT/BW)  │    │  Registry) │    │ ④ 隐私分级        │ │
│  └───────────┘    └───────────┘    │ ⑤ 延迟预算        │ │
│                   ┌───────────┐    │                  │ │
│  ┌───────────┐    │ 本地 Memory│    │ 输出: 路由目标    │ │
│  │ 隐私分级器 │───→│ (上下文/   │    │ DEVICE/CLOUD/    │ │
│  │ (数据敏感度│    │  偏好/缓存) │    │ HYBRID/DEGRADED  │ │
│  │  判定)     │    └───────────┘    │                  │ │
│  └───────────┘                     └──────────────────┘ │
└─────────────────────────────────────────────────────────┘

五大决策因子详解

因子 检测方式 权重 说明
① 意图复杂度 LiteModel 意图分类(单标签/多标签/开放域) 最高 简单意图(翻译/闹钟)→ 端侧;复杂意图(写作/解题)→ 云端
② 网络质量 端侧探针:RTT + 带宽估算 + 丢包率 RTT > 500ms 或带宽 < 100Kbps → 弱网模式
③ 能力可用性 CapabilityRegistry 查询端侧能力状态 端侧无对应能力 → 必须上云
④ 隐私分级 输入数据分类(公开/个人/敏感/机密) 敏感数据(健康/通讯录/密码)→ 优先端侧
⑤ 延迟预算 任务类型绑定的最大可接受延迟 实时场景(语音通话)→ 端侧优先

决策伪代码

// 端侧路由决策(Go 伪代码)
func (d *DeviceDispatcher) Route(req Request) RouteTarget {
    // 1. 意图分类
    intent := d.intentClassifier.Predict(req.Input)
    complexity := intent.Complexity  // SIMPLE / MEDIUM / COMPLEX
    
    // 2. 隐私分级
    privacyLevel := d.privacyScorer.Score(req.Input)  // PUBLIC / PERSONAL / SENSITIVE
    
    // 3. 网络探测
    netStatus := d.networkProbe.Measure()  // GOOD / FAIR / POOR / OFFLINE
    
    // 4. 能力匹配
    capMatch := d.capRegistry.Match(intent)
    capOnDevice := capMatch != nil && capMatch.IsAvailableOnDevice()
    
    // 5. 路由决策
    switch {
    case netStatus == OFFLINE && capOnDevice:
        return DEVICE  // 离线 + 端侧有能力 → 端侧处理
    case netStatus == OFFLINE:
        return DEGRADED  // 离线 + 无能力 → 降级
    
    case privacyLevel == SENSITIVE && capOnDevice:
        return DEVICE  // 敏感数据 + 端侧有能力 → 端侧处理(数据不出端)
    
    case complexity == SIMPLE && capOnDevice && netStatus != GOOD:
        return DEVICE  // 简单任务 + 端侧有能力 + 弱网 → 端侧处理
    
    case complexity == COMPLEX:
        return HYBRID  // 复杂任务 → 混合处理(端侧预处理 + 云端推理 + 端侧渲染)
    
    case netStatus == GOOD:
        return CLOUD  // 网络好 → 云端处理(体验最佳)
    
    default:
        return CLOUD  // 兜底:云端
    }
}

2.3.2 端云调度场景矩阵 #

以下列举 Ella 产品的典型场景,展示不同条件下端云调度的差异化路径:

场景 1:实时翻译(端侧直出)

用户:"这句话用斯瓦希里语怎么说?"

┌──────────┐    意图: 翻译    ┌──────────┐
│  端侧    │ ──────────────→ │  端侧    │
│  输入    │                  │ 离线翻译  │
│          │ ←─────────────── │  引擎    │
│  输出    │    翻译结果       │ (NPU)    │
└──────────┘                  └──────────┘

• 路由: DEVICE(端侧直出)
• 延迟: < 100ms
• 网络: 不需要
• 特点: 高频、低复杂度、端侧能力成熟

场景 2:拍照解题(混合处理 — 端侧预处理 + 云端推理 + 端侧渲染)

用户:拍摄数学题照片,请求解答

端侧预处理                    云端推理                      端侧渲染
┌──────────┐               ┌──────────┐               ┌──────────┐
│ 图像采集  │               │          │               │          │
│ 图像增强  │───压缩上传───→│ OCR 提取 │───解题请求───→│ LLM 解题 │
│ 端侧 OCR  │               │ 文本理解  │←──解题结果────│          │
│ (轻量)    │               │ (Gemini) │               │          │
│          │               │          │               │ 结果展示  │
│          │               │          │               │ 图文排版  │
│          │               │          │               │ 语音播报  │
└──────────┘               └──────────┘               └──────────┘

• 路由: HYBRID(端云混合)
• 延迟: 端侧预处理 < 200ms + 云端推理 < 2s + 渲染 < 100ms
• 特点: 端侧完成计算密集型预处理,云端负责复杂推理

场景 3:AI 写作(云端主导)

用户:"帮我写一封英文求职信"

┌──────────┐              ┌──────────────────────┐              ┌──────────┐
│  端侧    │───文本请求───→│       云端            │              │          │
│  输入    │              │  Agent 编排引擎       │              │  第三方   │
│          │              │  ├─ Planner: 写作规划  │───MCP调用───→│ 词典/语料 │
│          │←──长文本返回──│  ├─ Gemini: 内容生成   │←──结果──────│ API      │
│          │              │  └─ Guardrail: 安全检查│              │          │
│  输出    │              │  Memory: 写入用户画像  │              │          │
└──────────┘              └──────────────────────┘              └──────────┘

• 路由: CLOUD(云端主导)
• 延迟: 首 Token < 500ms,完整回复 < 3s
• 特点: 需要大模型推理 + 知识增强 + 可能的第三方 API

场景 4:AI 图像生成(云端 + 第三方 API)

用户:"帮我生成一张非洲日落的水彩画"

端侧                  云端编排                  MCP Server              第三方
┌──────┐           ┌──────────┐             ┌──────────┐            ┌──────┐
│ 文本  │───请求───→│ Agent    │───选择工具──→│ 图像生成  │───API 调用──→│ 豆包  │
│ 输入  │           │ 编排引擎  │             │ MCP Server│             │ API  │
│      │←──图片────│          │←──图片URL────│           │←──生成结果───│      │
│ 展示  │           │          │             │           │             │      │
└──────┘           └──────────┘             └──────────┘            └──────┘

• 路由: CLOUD + Third-Party
• 延迟: 3-8s(依赖第三方生成速度)
• 降级: 豆包不可用 → 切 Stable Diffusion(自建)→ 返回缓存示例图

场景 5:跨设备协同(云端主导 + 端侧分发)

用户:在手机语音说"把我的会议日程同步到手表"

手机(发起端)                  云端                      手表(目标端)
┌──────────┐               ┌──────────┐               ┌──────────┐
│ 语音唤醒  │               │          │               │          │
│ 语音识别  │───请求───────→│ Agent    │───查询日历───→│ 推送日程  │
│ 意图:同步 │               │ 编排引擎  │←──日程数据────│ 卡片渲染  │
│          │               │          │               │          │
│ 确认提示  │←──执行结果────│ 路由结果  │───写入日历───→│ 震动提醒  │
└──────────┘               └──────────┘               └──────────┘

• 路由: CLOUD(多设备协同需要云端中转)
• 延迟: < 1s(端到端)
• 特点: 涉及多个设备,必须云端统一调度

场景 6:弱网下的简单问答(端侧降级)

用户在 2G 网络下:"明天天气怎么样?"

┌──────────┐                              ┌──────────┐
│  端侧    │                              │  端侧    │
│  输入    │── 意图:天气 ──→ ┌──────────┐ │  降级    │
│          │                 │ 端侧缓存  │ │ "当前网络 │
│          │                 │ 中有最近  │ │  不佳,显 │
│          │←── 展示缓存数据 │ 一次结果  │ │ 示最近一次 │
│  输出    │    + "数据可能  │ (30min前) │ │ 查询结果" │
│          │    非最新"提示   │          │ │          │
└──────────┘                 └──────────┘ └──────────┘

• 路由: DEGRADED(降级)
• 延迟: < 200ms(直接读缓存)
• 特点: 弱网场景下,用旧数据 + 友好提示,优于直接报错

场景 7:多步任务规划(云端 Agent 编排)

用户:"帮我规划明天去内罗毕的行程,查天气、找路线、预订餐厅"

                        云端 Agent 编排引擎
                    ┌──────────────────────────┐
                    │ Planner:                  │
                    │  Step 1: 查内罗毕天气      │────→ 天气 API
                    │  Step 2: 查询路线          │────→ 地图 API
                    │  Step 3: 推荐当地餐厅      │────→ 本地生活 API
                    │  Step 4: 整合生成行程方案   │────→ Gemini 整合
                    └──────────────────────────┘
                          │
                    ┌─────▼─────┐
                    │  端侧渲染  │
                    │ 行程卡片展示│
                    │ 语音播报概要│
                    └───────────┘

• 路由: CLOUD(云端多步编排)
• 延迟: 5-10s(多个 API 调用 + LLM 整合)
• 特点: 典型的 Agent 场景——理解复杂意图 → 拆解步骤 → 多工具调用 → 整合输出

2.3.3 调度决策矩阵(汇总) #

条件组合 路由决策 典型场景
离线 + 端侧有能力 DEVICE 离线翻译、语音唤醒
离线 + 端侧无能力 DEGRADED 离线下请求生图、查天气
弱网 (RTT>500ms) + 简单任务 DEVICE 简单问答、闹钟、计算器
弱网 + 复杂任务 HYBRID 拍照解题(端侧OCR → 云端推理)
弱网 + 无端侧能力 DEGRADED + 异步队列 生图、搜索(入队列,稍后推送)
正常网络 + 简单任务 CLOUD(优先)/ DEVICE 视端侧能力决定
正常网络 + 复杂任务 CLOUD AI 写作、多步任务
正常网络 + 需要第三方能力 CLOUD + Third-Party 生图、视频、地图
敏感数据(健康/密码) DEVICE(优先) 本地健康记录、密码管理
跨设备操作 CLOUD 多设备协同、OneLeap

三、第三方 API 统一接入层 #

3.1 MCP 协议接入 #

第三方能力                    MCP Server                    Agent 编排引擎
┌──────────┐                ┌──────────────┐               ┌──────────────┐
│ 豆包生图  │────JSON-RPC───→│ MCP Server   │───工具描述────→│              │
│          │                │ (Registry)   │               │   工具选择器  │
│ 天气 API  │────JSON-RPC───→│ MCP Server   │───工具描述────→│              │
│          │                │              │               │   调用执行器  │
│ 地图服务  │────JSON-RPC───→│ MCP Server   │───工具描述────→│              │
└──────────┘                └──────────────┘               └──────────────┘

MCP 接入流程

  1. 第三方能力封装为 MCP Server
  2. 自动向 Agent 编排引擎注册工具描述(JSON Schema)
  3. 编排引擎将工具描述注入 LLM 的 Function Calling
  4. LLM 根据用户意图选择工具 → 编排引擎调用对应 MCP Server

3.2 A2A 协议接入(Agent 间协作) #

当第三方能力本身是一个 Agent(需要自主决策、多轮交互),使用 A2A 协议:

Ella Agent                          第三方 Agent
┌─────────────┐                    ┌─────────────┐
│             │─── Agent Card ────→│             │
│  发现能力    │                    │  能力声明     │
│             │←── Agent Card ─────│             │
│             │                    │             │
│             │─── Task Request ──→│             │
│  发起任务    │                    │  自主执行     │
│             │←── Task Result ────│             │
└─────────────┘                    └─────────────┘

3.3 统一治理 #

治理项 实现方式
认证 API Key + OAuth 2.0 + SPIFFE/SPIRE(服务间)
限流 令牌桶算法,按开发者/按能力维度
熔断 第三方服务不可用时自动熔断,切换到备用服务
降级 云端不可用时降级到端侧能力
计量 按 Token/按次/按时长多维度计量
计费 开发者账单 + 内部成本核算

四、核心技术实现 #

4.1 端侧 Agent 运行时 #

// 端侧 Agent 轻量编排(Go 伪代码)
type DeviceAgent struct {
    intentClassifier  *LiteModel    // 轻量意图分类模型
    capabilityRegistry map[string]Capability  // 端侧能力注册表
    cloudRouter       *CloudRouter  // 云端路由器
    localMemory       *LocalMemory  // 本地 Memory
}

func (a *DeviceAgent) HandleRequest(req Request) Response {
    // 1. 意图分类
    intent := a.intentClassifier.Predict(req.Input)
    
    // 2. 能力匹配
    cap := a.capabilityRegistry.Match(intent)
    
    // 3. 调度决策
    switch {
    case cap != nil && cap.IsAvailableOnDevice():
        return cap.ExecuteOnDevice(req)
    case a.shouldOffloadToCloud(req, intent):
        return a.cloudRouter.Offload(req, intent)
    default:
        return a.offlineFallback(req)
    }
}

4.2 云端 Agent 编排引擎 #

// 云端 Agent 编排(Go 伪代码)
type AgentOrchestrator struct {
    planner       *TaskPlanner      // 任务规划器
    toolSelector *ToolSelector     // 工具选择器
    memory       *MemoryManager    // 全局 Memory
    ragEngine    *RAGEngine        // RAG 引擎
    guardrails   *GuardrailEngine  // 安全拦截
}

func (o *AgentOrchestrator) Execute(userInput string, sessionID string) Response {
    // 1. 安全拦截
    if !o.guardrails.Check(userInput) {
        return RejectResponse
    }
    
    // 2. 检索增强
    context := o.ragEngine.Retrieve(userInput, sessionID)
    
    // 3. 记忆注入
    memory := o.memory.Get(sessionID)
    
    // 4. 任务规划(LLM 驱动的 Planning)
    plan := o.planner.Plan(userInput, context, memory)
    
    // 5. 工具选择与执行
    for _, step := range plan.Steps {
        tool := o.toolSelector.Select(step)
        result := tool.Execute(step)
        plan.Update(step, result)
    }
    
    // 6. 记忆更新
    o.memory.Update(sessionID, plan)
    
    return plan.Finalize()
}

4.3 端云协同通信协议 #

// 端云通信 Protobuf 定义
message AgentRequest {
  string session_id = 1;
  string user_input = 2;
  InputModality modality = 3;       // TEXT / AUDIO / IMAGE / VIDEO
  bytes payload = 4;                 // 实际输入数据
  DeviceInfo device_info = 5;        // 设备能力信息
  NetworkStatus network = 6;         // 网络状态
  repeated string device_capabilities = 7;  // 端侧可用能力列表
  PriorityLevel priority = 8;        // 优先级
}

message AgentResponse {
  string session_id = 1;
  ResponseModality modality = 2;
  bytes payload = 3;
  ResponseSource source = 4;         // DEVICE / CLOUD / HYBRID
  bool is_cached = 5;
  LatencyMetrics latency = 6;
}

五、性能与稳定性保障 #

5.1 关键性能指标 #

指标 目标值 说明
端侧意图分类延迟 < 50ms 轻量模型(< 10M 参数)
端侧响应(离线场景) < 200ms 语音/翻译/简单问答
云端首 Token 延迟 < 500ms Ella 当前 230ms(Gemini 1.5 Flash)
云端 P99 延迟 < 3s 复杂任务(多步工具调用)
第三方 API 熔断阈值 错误率 > 5% / 30s 自动熔断 + 降级
端云通信可靠性 > 99.9% 弱网重试 + 断点续传

5.2 高可用架构 #

                          ┌─────────────┐
                          │  全球流量调度 │
                          │  (GFE/Anycast)│
                          └──────┬──────┘
                                 │
              ┌──────────────────┼──────────────────┐
              ▼                  ▼                  ▼
        ┌──────────┐      ┌──────────┐      ┌──────────┐
        │ 区域 A    │      │ 区域 B    │      │ 区域 C    │
        │ (非洲)    │      │ (东南亚)  │      │ (拉美)    │
        │          │      │          │      │          │
        ├──────────┤      ├──────────┤      ├──────────┤
        │ 多实例    │      │ 多实例    │      │ 多实例    │
        │ 负载均衡  │      │ 负载均衡  │      │ 负载均衡  │
        │ 数据本地  │      │ 数据本地  │      │ 数据本地  │
        └──────────┘      └──────────┘      └──────────┘

六、云端 API 与第三方 API 不可用/不稳定的应对方案 #

6.1 核心原则:多级降级,逐级兜底 #

Level 0 ── 主云 API(正常态)
   │  异常
   ▼
Level 1 ── 备用云 API(同厂商不同 region / 同能力不同 model)
   │  异常
   ▼
Level 2 ── 端侧轻量模型 / 本地缓存
   │  异常
   ▼
Level 3 ── 优雅降级(友好提示 + 异步队列 + 稍后推送)

设计原则

  • 每一级都明确触发条件和降级路径
  • 降级对用户尽可能透明,最差体验也是"友好的失败提示"
  • 自动恢复:上游恢复后自动切回,无需人工介入

6.2 云端 API 不可用应对 #

6.2.1 多模型/多厂商冗余 #

能力 主供应商 备用供应商 切换触发 切换方式
大语言模型 Gemini 1.5 Flash Claude Haiku / 通义千问 连续 3 次超时或错误率 > 5% Agent 编排引擎自动路由
语音识别 Google Speech Whisper(端侧/自建) 服务不可用或延迟 > 2s 降级到端侧 Whisper
语音合成 Google TTS 端侧轻量 TTS 服务不可用 降级到端侧 TTS
图像理解 Gemini Vision Qwen-VL(自建) 错误率 > 5% 路由到自建服务
// 云端 API 多供应商路由(Go 伪代码)
type CloudAPIRouter struct {
    primary   APIClient
    secondary APIClient
    fallback  APIClient
    circuit   *CircuitBreaker
}

func (r *CloudAPIRouter) Call(req APIRequest) APIResponse {
    // 1. 优先主供应商
    if r.circuit.PrimaryOK() {
        resp, err := r.primary.Call(req)
        if err == nil {
            return resp
        }
        r.circuit.RecordFailure("primary")
    }
    
    // 2. 切备用供应商
    if r.circuit.SecondaryOK() {
        resp, err := r.secondary.Call(req)
        if err == nil {
            return resp
        }
        r.circuit.RecordFailure("secondary")
    }
    
    // 3. 降级到端侧 / 本地缓存
    return r.fallback.Call(req)
}

6.2.2 区域级容灾 #

正常态:                          区域故障态:

  ┌──────────┐                     ┌──────────┐  ✗ 不可用
  │ 非洲节点  │── 服务非洲用户 ───→ │ 非洲节点  │
  └──────────┘                     └──────────┘
  ┌──────────┐                     ┌──────────┐
  │ 东南亚节点│── 服务东南亚用户 ──→│ 东南亚节点│── 接管非洲流量
  └──────────┘                     └──────────┘
  ┌──────────┐                     ┌──────────┐
  │ 拉美节点  │── 服务拉美用户 ───→ │ 拉美节点  │
  └──────────┘                     └──────────┘
  • GSLB(全局负载均衡):DNS 级 + Anycast 自动切换
  • 数据同步:跨区域异步复制,RPO < 5 分钟
  • 切换策略:健康检查失败 3 次 → 流量切到最近健康区域

6.2.3 云端完全不可用(极端场景) #

场景 应对方案
云厂商大面积宕机 切到备用云厂商 / 自建 IDC(如有)
全球网络中断 端侧完全离线模式:本地意图分类 + 端侧模型 + 本地缓存
API Key 过期/额度耗尽 自动切换到备用 Key / 通知运维 + 端侧降级
GPU 资源不足 动态切换到更小模型 + 请求排队 + 优先级调度

6.3 第三方 API 不可用应对 #

6.3.1 多供应商策略 #

针对关键第三方能力,至少接入 2 家供应商:

能力 供应商 A 供应商 B 降级策略
图像生成 豆包 Stable Diffusion(自建) A 不可用时切 B,B 不可用时返回缓存/提示
视频生成 Veo Runway 都不可用时提示"当前繁忙,请稍后重试"
地图导航 Google Maps 高德/Mapbox A 超时 → 切 B
天气查询 OpenWeather 中国天气网 任意一个可用即可
翻译(补充) Google Translate DeepL 自动切换

6.3.2 结果缓存 + 异步队列 #

请求流程:

用户请求 ──→ 检查缓存 ──→ 命中? ──YES──→ 返回缓存结果(标记 "可能非最新")
                    │
                    NO
                    │
                    ▼
              调用第三方 API ──→ 成功? ──YES──→ 缓存结果 + 返回
                                    │
                                    NO
                                    │
                                    ▼
                              加入异步队列
                                    │
                                    ▼
                              返回 "处理中,稍后推送"
                              (后台重试,最多 3 次,指数退避)
  • 热缓存:Redis 缓存高频查询结果(天气、汇率等),TTL 5-30 分钟
  • 持久缓存:用户历史请求结果持久化,第三方不可用时返回最近一次结果
  • 异步队列:非实时需求的请求进入队列,后台自动重试

6.3.3 功能降级矩阵 #

功能 正常态 第三方不可用 完全不可用
AI 生图 豆包高清生成 切 Stable Diffusion 返回模板图 + 提示
AI 视频 Veo 生成 切 Runway 提示"服务繁忙"
地图导航 实时路线规划 切高德/Mapbox 返回离线地图包
天气查询 实时数据 返回缓存(< 30min) 提示"暂无法获取"
网页搜索 Google/Bing 切备选搜索引擎 返回本地知识 + 提示
新闻推送 RSS + API 返回缓存新闻 提示

6.4 熔断 · 重试 · 限流机制 #

6.4.1 熔断器设计 #

状态机:

  ┌──────────┐   连续失败 ≥ N    ┌──────────┐   冷却时间到期    ┌──────────┐
  │  CLOSED  │ ────────────────→ │  OPEN    │ ────────────────→ │ HALF_OPEN│
  │ (正常)   │                   │ (熔断)   │                   │ (试探)   │
  └──────────┘                   └──────────┘                   └────┬─────┘
       ▲                                                             │
       │                     ┌──────────┐                            │
       │                     │  CLOSED  │ ←── 试探成功 ──────────────┘
       │                     │ (恢复)   │
       │                     └──────────┘
       │                     ┌──────────┐
       └──────────────────── │  OPEN    │ ←── 试探失败
                             │ (继续熔断)│
                             └──────────┘
参数 推荐值 说明
失败阈值 N 3-5 次 连续失败次数
时间窗口 30 秒 统计窗口
熔断时长 60 秒 首次熔断冷却时间
半开试探 1 个请求 试探成功 → 恢复,失败 → 继续熔断

6.4.2 重试策略 #

// 指数退避 + 抖动(Go 伪代码)
func RetryWithBackoff(fn func() error, maxRetries int) error {
    for i := 0; i <= maxRetries; i++ {
        err := fn()
        if err == nil {
            return nil
        }
        if !isRetryable(err) {
            return err  // 非可重试错误,直接返回
        }
        // 指数退避: 1s → 2s → 4s → 8s + 随机抖动
        backoff := (1 << i) * time.Second
        jitter := time.Duration(rand.Int63n(int64(backoff / 2)))
        time.Sleep(backoff + jitter)
    }
    return ErrMaxRetriesExceeded
}
  • 可重试错误:超时、5xx、连接拒绝、限流(429)
  • 不可重试:4xx(参数错误)、认证失败、业务拒绝
  • 最大重试:3 次,总超时不超过用户可接受延迟

6.4.3 限流与优先级 #

优先级 场景 限流策略
P0 - 核心 语音通话、实时翻译 不限流,保证可用
P1 - 重要 问答、写作、翻译 正常限流,保障 99%
P2 - 增强 生图、生视频、搜索 严格限流,可降级
P3 - 闲时 新闻推送、个性化推荐 资源紧张时直接跳过

6.5 监控与告警 #

监控维度:
┌───────────────────────────────────────────────────────┐
│  实时监控                                             │
│  ├─ API 错误率(按供应商 / 按能力 / 按区域)            │
│  ├─ P50/P95/P99 延迟                                  │
│  ├─ 熔断器状态(OPEN/CLOSED/HALF_OPEN)               │
│  ├─ 降级次数与类型                                     │
│  ├─ 缓存命中率                                         │
│  └─ 队列积压量                                         │
├───────────────────────────────────────────────────────┤
│  告警规则                                             │
│  ├─ 单 API 错误率 > 5% 持续 1 分钟 → P2 告警           │
│  ├─ 单 API 错误率 > 20% 持续 1 分钟 → P1 告警          │
│  ├─ 熔断器进入 OPEN 状态 → P2 告警                     │
│  ├─ 多 API 同时异常 → P0 告警(可能区域故障)           │
│  └─ 降级率 > 30% → P1 告警                             │
├───────────────────────────────────────────────────────┤
│  自动恢复                                             │
│  ├─ API 恢复后自动切回主供应商                          │
│  ├─ 熔断器 HALF_OPEN 试探成功 → 自动关闭               │
│  └─ 队列中积压请求自动重放                             │
└───────────────────────────────────────────────────────┘

6.6 降级决策流程图 #

用户请求
    │
    ▼
┌─────────────────────┐
│ 端侧能否处理?       │
└─────────┬───────────┘
     YES  │  NO
     │    ▼
     │  ┌─────────────────────┐
     │  │ 云端主 API 可用?    │
     │  └─────────┬───────────┘
     │       YES  │  NO
     │       │    ▼
     │       │  ┌─────────────────────┐
     │       │  │ 云端备用 API 可用?  │
     │       │  └─────────┬───────────┘
     │       │       YES  │  NO
     │       │       │    ▼
     │       │       │  ┌─────────────────────┐
     │       │       │  │ 缓存中有结果?       │
     │       │       │  └─────────┬───────────┘
     │       │       │       YES  │  NO
     │       │       │       │    ▼
     │       │       │       │  ┌─────────────────────┐
     │       │       │       │  │ 加入异步队列         │
     │       │       │       │  │ + 返回"处理中"      │
     │       │       │       │  └─────────────────────┘
     │       │       │       ▼
     │       │       │   返回缓存(标记"非最新")
     │       ▼       ▼
     │    路由到备用供应商
     ▼
  端侧处理(离线/降级模型)

七、落地路线 #

阶段 时间 关键交付
Phase 1 M1-M2 端侧 Agent 轻量编排原型 + 端云调度策略
Phase 2 M3-M4 云端 Agent 编排引擎 + MCP 工具接入
Phase 3 M5-M6 第三方 API 统一网关 + A2A 协议支持
Phase 4 M7-M9 端云混合场景全覆盖 + 性能优化
Phase 5 M10-M12 全球化部署 + 多区域容灾

七、总结 #

端·云·第三方 API 分层设计的核心价值

  1. 端侧 — 快(< 50ms)、省(离线可用)、安全(隐私数据不出端)
  2. 云端 — 强(大模型推理)、全(多步任务编排)、智(全局记忆 + RAG)
  3. 第三方 — 活(MCP/A2A 标准接入)、丰(生态能力补充)、稳(统一治理)

这三层不是替代关系,而是互补关系 — 端侧覆盖高频低复杂度场景,云端覆盖低频高复杂度场景,第三方覆盖垂类专业场景。最终统一通过 Agent 编排引擎,给 Ella 用户一个一致的智能体验。