Files
boss/docs/source-material/设备直连方舟方案提炼与备选落地方案.md
2026-03-26 23:16:56 +08:00

13 KiB
Raw Blame History

设备直连方舟方案提炼与备选落地方案

1. 文档目的

这份文档用于沉淀此前关于“设备端直连火山方舟 API / RTC 时,如何做授权、配额、监测、续授权、风控和服务端落地”的讨论结果,并补充几套可执行的备选方案,便于后续做产品决策、技术评审和开发拆分。

适用范围:

  • 设备端直接访问大模型或实时交互云服务
  • 希望按照用户、设备、套餐做差异化限制
  • 既关心用户体感,也关心成本、风控和可运营性

2. 前面对话的核心结论

2.1 已经基本达成共识的判断

  1. 云厂商的 API Key、平台 token 或 RTC 入房 token,都不能直接当“每台设备的额度控制器”。
  2. 设备端是天然不可信环境,不能把长期主密钥或可无限调用的真实能力长期保存在设备里。
  3. 真正的控制应该拆成两层:
    • 云厂商鉴权层:只解决“能不能调云服务”。
    • 业务授权层:由你自己的服务端控制“这台设备、这个用户、这个套餐此刻还能用多少”。
  4. 精确用量不能只靠设备心跳、事件上报或会话时长估算,最终必须用云厂商侧的 usage、任务事件、账单或回流数据闭环。
  5. 如果续授权做成同步阻塞,长内容生成时一定会卡;如果做成低水位异步预取,用户体感可以做到接近无感。

2.2 前面对话里识别出的主要漏洞

  1. Token 泄露后,在有效期内可能被滥用。
  2. 设备固件可被逆向,设备上报数据可伪造。
  3. 如果不做单设备单活会话限制,同一设备可能并发开多个会话。
  4. 如果 /token/request 一类接口不做风控和限流,容易被刷爆。
  5. 如果所有设备在同一时刻续授权,容易产生惊群。
  6. 如果授权与真实计费脱钩,会导致账单不可控。
  7. 如果把“估算用量”直接拿来做结算,财务和用户侧都会出争议。

2.3 前面对话里形成的推荐主方向

推荐的基础方向是:

  • 控制面在你自己的服务端
  • 推理面或媒体面尽量直连云厂商
  • 设备只拿短期业务授权,不拿长期主密钥
  • 服务端做配额预占、风控、续权、用量回收和最终结算

这套方向的核心思想可以概括为一句话:

设备直连推理面,服务端掌控授权面。


3. 推荐主方案:控制面在服务端,推理面尽量直连

3.1 方案概述

设备在发起一次会话前,先向你的服务端申请“业务授权切片”。
服务端完成设备校验、用户校验、套餐校验、预算预占和风控检查后,再给设备发一个短期授权。
设备拿着这份短期授权去直连方舟 API 或 RTC 服务。
会话过程中,设备根据本次切片预算和实时用量做低水位预警,在快耗尽时后台静默申请下一片。
最终结算不以设备上报为准,而以云侧用量数据回流为准。

3.2 为什么推荐这套方案

优点:

  • 延迟低,首包和流式输出更接近设备直连
  • 服务端带宽压力小,不用全量转发模型输出
  • 更容易扩容到 1000 台、1 万台甚至更多设备
  • 风控和套餐控制权仍然在你自己手里

缺点:

  • 系统设计复杂度高于“纯代理”
  • 授权切片、用量回流、续授权、会话状态管理都要自己做
  • 不能把设备上报当真,需要额外做闭环和审计

3.3 推荐的数据模型

建议至少有下面几类核心表:

  1. device_registry
    • 设备基础信息、激活状态、固件版本、设备指纹、公钥或签名信息
  2. user_subscription
    • 用户订阅档位、有效期、套餐预算、超额策略
  3. device_binding
    • 用户和设备的归属关系、多设备限制、共享规则
  4. session_grant
    • 一次业务授权切片,记录授权预算、过期时间、状态、续权关系
  5. device_session
    • 设备会话生命周期,包含开始时间、最后心跳、关闭原因、会话状态
  6. quota_ledger
    • 预算预占、释放、回补、扣减、人工修正的流水账
  7. vendor_usage_raw
    • 云厂商原始回流数据,按任务、请求或账单粒度保存
  8. device_usage_derived
    • 归因后的设备级、用户级、套餐级统计结果

3.4 推荐的授权流程

  1. 设备启动会话,请求 /session/grants/issue
  2. 服务端校验:
    • 设备身份
    • 用户身份
    • 设备归属关系
    • 套餐剩余额度
    • 当前是否已有活跃会话
    • 风控规则是否触发
  3. 服务端预占一笔预算
  4. 服务端签发短期业务授权切片
  5. 设备带切片去直连云服务
  6. 设备在低水位时后台请求 /session/grants/renew
  7. 云侧回流真实用量
  8. 服务端做最终扣减、释放未用完的预占额度、落账和统计

3.5 推荐的额度控制方式

建议不要只做“单一 token 池”,而是同时做三层配额:

  1. 用户总额度
    • 代表这个用户在一个计费周期内的总预算
  2. 设备子额度
    • 防止同一用户多台设备把总额度瞬间打穿
  3. 单会话切片额度
    • 防止单次长会话在短时间内无限消耗

推荐同时限制以下维度:

  • 日预算
  • 月预算
  • 单次会话最大预算
  • 单分钟最大请求次数
  • 单设备并发会话数
  • 单用户并发设备数

3.6 推荐的续授权策略

续授权不要等到额度耗尽再做,建议采用“低水位异步预取”:

  1. 初次只发一小片预算
  2. 设备本地维护剩余额度估算
  3. 当剩余额度低于阈值时,后台静默续片
  4. 当前生成链路继续跑,不等待续权结果
  5. 下一片到账后无缝衔接

建议阈值:

  • 文本生成:剩余 20% 到 30% 时触发
  • 语音对话:剩余 30% 到 40% 时触发
  • 长故事、长文本类任务:按分段生成边界提前预取

3.7 推荐的风控策略

至少做以下规则:

  • 单设备单活会话限制
  • 单用户同时在线设备数限制
  • 单 IP / 单设备 / 单账号的授权请求速率限制
  • 异常高频续权检测
  • 授权后未消费比例过高告警
  • 设备版本黑名单
  • 签名失败或时间戳异常直接拒绝
  • 同一授权切片重复使用检测

4. 服务端和设备端的开发边界

4.1 服务端应该负责什么

服务端负责:

  • 设备注册与激活
  • 用户和设备绑定关系
  • 套餐和额度管理
  • 业务授权切片签发
  • 会话生命周期管理
  • 用量回流接收和结算
  • 风控和审计
  • 运营报表和客服排障

服务端不应该依赖设备端做最终结算。

4.2 设备端应该负责什么

设备端负责:

  • 安全保存设备身份证明和短期授权
  • 会话发起和会话结束
  • 低水位续授权预取
  • 本地缓存当前切片剩余额度估算
  • 断网重连和授权失效的兜底逻辑
  • 心跳和状态上报

设备端可以做“估算”和“提示”,但不应该成为最终计费真相来源。


5. 其他有效落地方案

下面这些方案都能落地,只是权衡不同。

方案 A全量代理网关方案

方案定义

设备不直连方舟。所有模型请求先到你的网关,由你的网关统一转发到云厂商。

适用场景

  • 你最在意配额控制和审计
  • 你需要做内容审核、提示词裁剪、统一缓存、统一日志
  • 设备数量暂时不大,或者可以接受增加服务端带宽成本

优点

  • 控制力最强
  • 真实用量和业务扣费天然更容易对齐
  • 最容易做黑名单、限流、熔断和回放审计
  • 不需要把云厂商调用能力直接暴露给设备

缺点

  • 服务端流量和带宽成本明显上升
  • 首包和流式链路会多一跳
  • 需要处理更多高并发连接和转发问题

推荐度

如果你当前最担心的是“被刷爆”和“账单不可控”,这是最稳的方案。


方案 B双通道混合方案

方案定义

短请求、常规请求走设备直连。
长故事、长文本、长语音、多轮复杂任务走你的代理网关。

适用场景

  • 想兼顾用户体感和强控制
  • 任务类型差异很大
  • 部分任务天然更容易超预算或更需要审计

优点

  • 兼顾速度和控制
  • 高风险场景可切到可控链路
  • 能把最贵、最不稳定的任务单独隔离

缺点

  • 路由逻辑变复杂
  • 设备端和服务端都要知道“什么时候切换通道”
  • 运营和排障会比分单一路径稍复杂

推荐做法

可以把以下任务默认走代理:

  • 长故事生成
  • 长时语音陪伴
  • 需要强审计的企业客户任务
  • 高价值套餐用户的高级功能

方案 C边缘接入节点方案

方案定义

设备不直接连中心控制服务,而是先连最近的区域接入节点。
接入节点负责授权校验、会话保持、低延迟续权和短期缓存;中心服务负责总账和全局策略。

适用场景

  • 设备分布地域广
  • 网络质量不稳定
  • 对低延迟和高在线率要求高

优点

  • 授权和续权时延更低
  • 对弱网和抖动更友好
  • 可缓解中心服务压力

缺点

  • 系统复杂度更高
  • 要做多节点状态同步
  • 部署和运维成本增加

什么时候值得上

当你设备规模较大,且终端网络质量参差不齐时,这个方案很有价值。


方案 D套餐桶包方案

方案定义

不是每次都按精细 token 去分,而是先把套餐设计成“桶包”。

例如:

  • 基础版:每月 300 次短对话
  • 标准版:每月 1000 次中等对话
  • 高级版:每月 300 次长故事生成

服务端内部再把每类任务映射成预算扣减规则。

适用场景

  • 你现在还不想让用户看到复杂的 token 概念
  • 你希望先快速商业化
  • 你的业务更适合卖“能力包”而不是卖“token”

优点

  • 产品表达清晰
  • 用户更容易理解
  • 客服和销售更容易沟通

缺点

  • 需要你自己维护任务到成本的映射
  • 某些边界场景会有估算误差

推荐度

如果你短期内更想先做商业闭环,这是非常有效的落地方案。


方案 E企业租户隔离方案

方案定义

针对 B 端、渠道商或大客户,给每个租户单独做配额池、单独风控策略,必要时单独接入点、单独结算域。

适用场景

  • 有渠道商、OEM、品牌合作方
  • 需要租户级对账
  • 需要更强的安全隔离和 SLA

优点

  • 财务和运营边界清晰
  • 某租户异常不会拖垮全部业务
  • 易于做分账和差异化商务策略

缺点

  • 配置和运维复杂度增加
  • 需要更好的控制台和运维体系

推荐度

如果未来会走 B2B2C这是很值得提前预留的架构方向。


6. 各方案对比

方案 用户体感 控制力 实施复杂度 服务端成本 推荐场景
控制面在服务端,推理面直连 中高 低到中 当前最平衡的主方案
全量代理网关 很高 中到高 最重视安全和结算闭环
双通道混合 想同时兼顾体感和强控制
边缘接入节点 很高 很高 中到高 多地域、大规模、弱网
套餐桶包 低到中 先做商业闭环
企业租户隔离 中到高 很高 中到高 B 端或渠道业务

7. 我对落地顺序的建议

如果要尽快做出第一版可上线系统,建议按下面顺序推进:

第一阶段:先把主方案做出来

先实现:

  • 设备注册和激活
  • 用户与设备绑定
  • 套餐总额度
  • 单会话授权切片
  • 单设备单活会话
  • 低水位异步续权
  • 云侧用量回流
  • 账本式扣减

第二阶段:补风控和运营能力

补上:

  • 刷授权风控
  • 异常续权检测
  • 黑名单和熔断
  • 设备版本治理
  • 对账报表
  • 人工纠偏工具

第三阶段:按业务形态选择备选方案

根据业务方向再补:

  • 想更稳:增加全量代理通道
  • 想更快:增加边缘接入节点
  • 想更好卖:增加套餐桶包表达
  • 想做渠道:增加租户隔离

8. 最终建议

如果你现在的目标是“尽快做出能上线、能控成本、体感也不错的一版”,我建议选择:

主方案 + 套餐桶包表达

也就是:

  1. 技术底层用“控制面在服务端,推理面尽量直连”
  2. 产品层面对用户不直接卖 token而是卖套餐额度和能力包
  3. 结算层内部仍然用真实用量和预算账本做闭环

这样做的好处是:

  • 技术上能控住
  • 运营上讲得清
  • 用户侧更容易理解
  • 后续还能平滑切到双通道或企业租户隔离

9. 建议的后续产出

下一步建议继续补这四类文档:

  1. 接口定义文档
    • issue grant
    • renew grant
    • heartbeat
    • close session
    • usage callback
  2. 时序图文档
    • 首次授权
    • 异步续权
    • 断网重连
    • 授权失败兜底
  3. 数据库设计文档
    • 表结构
    • 索引
    • 状态机
  4. 风控策略文档
    • 限流规则
    • 黑名单
    • 人工处置流程

如果后续继续往下做,建议优先把“接口定义 + 时序图 + 账本模型”补齐,这三样最直接影响开发能不能落地。