13 KiB
设备直连方舟方案提炼与备选落地方案
1. 文档目的
这份文档用于沉淀此前关于“设备端直连火山方舟 API / RTC 时,如何做授权、配额、监测、续授权、风控和服务端落地”的讨论结果,并补充几套可执行的备选方案,便于后续做产品决策、技术评审和开发拆分。
适用范围:
- 设备端直接访问大模型或实时交互云服务
- 希望按照用户、设备、套餐做差异化限制
- 既关心用户体感,也关心成本、风控和可运营性
2. 前面对话的核心结论
2.1 已经基本达成共识的判断
- 云厂商的
API Key、平台token或 RTC 入房token,都不能直接当“每台设备的额度控制器”。 - 设备端是天然不可信环境,不能把长期主密钥或可无限调用的真实能力长期保存在设备里。
- 真正的控制应该拆成两层:
- 云厂商鉴权层:只解决“能不能调云服务”。
- 业务授权层:由你自己的服务端控制“这台设备、这个用户、这个套餐此刻还能用多少”。
- 精确用量不能只靠设备心跳、事件上报或会话时长估算,最终必须用云厂商侧的
usage、任务事件、账单或回流数据闭环。 - 如果续授权做成同步阻塞,长内容生成时一定会卡;如果做成低水位异步预取,用户体感可以做到接近无感。
2.2 前面对话里识别出的主要漏洞
- Token 泄露后,在有效期内可能被滥用。
- 设备固件可被逆向,设备上报数据可伪造。
- 如果不做单设备单活会话限制,同一设备可能并发开多个会话。
- 如果
/token/request一类接口不做风控和限流,容易被刷爆。 - 如果所有设备在同一时刻续授权,容易产生惊群。
- 如果授权与真实计费脱钩,会导致账单不可控。
- 如果把“估算用量”直接拿来做结算,财务和用户侧都会出争议。
2.3 前面对话里形成的推荐主方向
推荐的基础方向是:
- 控制面在你自己的服务端
- 推理面或媒体面尽量直连云厂商
- 设备只拿短期业务授权,不拿长期主密钥
- 服务端做配额预占、风控、续权、用量回收和最终结算
这套方向的核心思想可以概括为一句话:
设备直连推理面,服务端掌控授权面。
3. 推荐主方案:控制面在服务端,推理面尽量直连
3.1 方案概述
设备在发起一次会话前,先向你的服务端申请“业务授权切片”。
服务端完成设备校验、用户校验、套餐校验、预算预占和风控检查后,再给设备发一个短期授权。
设备拿着这份短期授权去直连方舟 API 或 RTC 服务。
会话过程中,设备根据本次切片预算和实时用量做低水位预警,在快耗尽时后台静默申请下一片。
最终结算不以设备上报为准,而以云侧用量数据回流为准。
3.2 为什么推荐这套方案
优点:
- 延迟低,首包和流式输出更接近设备直连
- 服务端带宽压力小,不用全量转发模型输出
- 更容易扩容到 1000 台、1 万台甚至更多设备
- 风控和套餐控制权仍然在你自己手里
缺点:
- 系统设计复杂度高于“纯代理”
- 授权切片、用量回流、续授权、会话状态管理都要自己做
- 不能把设备上报当真,需要额外做闭环和审计
3.3 推荐的数据模型
建议至少有下面几类核心表:
device_registry- 设备基础信息、激活状态、固件版本、设备指纹、公钥或签名信息
user_subscription- 用户订阅档位、有效期、套餐预算、超额策略
device_binding- 用户和设备的归属关系、多设备限制、共享规则
session_grant- 一次业务授权切片,记录授权预算、过期时间、状态、续权关系
device_session- 设备会话生命周期,包含开始时间、最后心跳、关闭原因、会话状态
quota_ledger- 预算预占、释放、回补、扣减、人工修正的流水账
vendor_usage_raw- 云厂商原始回流数据,按任务、请求或账单粒度保存
device_usage_derived- 归因后的设备级、用户级、套餐级统计结果
3.4 推荐的授权流程
- 设备启动会话,请求
/session/grants/issue - 服务端校验:
- 设备身份
- 用户身份
- 设备归属关系
- 套餐剩余额度
- 当前是否已有活跃会话
- 风控规则是否触发
- 服务端预占一笔预算
- 服务端签发短期业务授权切片
- 设备带切片去直连云服务
- 设备在低水位时后台请求
/session/grants/renew - 云侧回流真实用量
- 服务端做最终扣减、释放未用完的预占额度、落账和统计
3.5 推荐的额度控制方式
建议不要只做“单一 token 池”,而是同时做三层配额:
- 用户总额度
- 代表这个用户在一个计费周期内的总预算
- 设备子额度
- 防止同一用户多台设备把总额度瞬间打穿
- 单会话切片额度
- 防止单次长会话在短时间内无限消耗
推荐同时限制以下维度:
- 日预算
- 月预算
- 单次会话最大预算
- 单分钟最大请求次数
- 单设备并发会话数
- 单用户并发设备数
3.6 推荐的续授权策略
续授权不要等到额度耗尽再做,建议采用“低水位异步预取”:
- 初次只发一小片预算
- 设备本地维护剩余额度估算
- 当剩余额度低于阈值时,后台静默续片
- 当前生成链路继续跑,不等待续权结果
- 下一片到账后无缝衔接
建议阈值:
- 文本生成:剩余 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. 最终建议
如果你现在的目标是“尽快做出能上线、能控成本、体感也不错的一版”,我建议选择:
主方案 + 套餐桶包表达
也就是:
- 技术底层用“控制面在服务端,推理面尽量直连”
- 产品层面对用户不直接卖 token,而是卖套餐额度和能力包
- 结算层内部仍然用真实用量和预算账本做闭环
这样做的好处是:
- 技术上能控住
- 运营上讲得清
- 用户侧更容易理解
- 后续还能平滑切到双通道或企业租户隔离
9. 建议的后续产出
下一步建议继续补这四类文档:
- 接口定义文档
issue grantrenew grantheartbeatclose sessionusage callback
- 时序图文档
- 首次授权
- 异步续权
- 断网重连
- 授权失败兜底
- 数据库设计文档
- 表结构
- 索引
- 状态机
- 风控策略文档
- 限流规则
- 黑名单
- 人工处置流程
如果后续继续往下做,建议优先把“接口定义 + 时序图 + 账本模型”补齐,这三样最直接影响开发能不能落地。