46 分钟
部署与基础设施工程

接入大模型与 TTS:为什么密钥必须在服务端,流式是怎么实现的

以朋友好学接入大模型对话和语音合成为样本,讲清第三方 AI 能力的正确接入架构:服务端中继保护密钥、SSE 流式输出、配额限流与降级、内容安全,以及 TTS 从文字到声音的完整技术管线与优化

  • 理解为什么大模型/TTS 的密钥绝不能放进前端,掌握服务端中继架构
  • 看懂大模型流式输出(SSE)在前后端如何贯通,以及超时重试降级
  • 理解 TTS 从文本到可播放音频的完整管线与音频编码
  • 掌握 AI 能力的成本/延迟优化、配额保护与内容安全基本做法

AI 能力是「后端能力」,不是「前端能力」

很多新手会想:大模型不就是个 HTTP 接口吗,直接在 App 里带着 Key 调不就行了?这在生产上是严重错误。朋友好学的架构是:App 只请求自己的后端,由后端(再经一个专门的 TTS 服务)去调用火山方舟大模型与语音服务,Key 永远不出服务器。这一课讲清楚为什么必须这样,以及流式对话、语音合成在工程上怎么跑通。

为什么密钥必须在服务端

配对题把 Key 放前端的风险与服务端的对策配对

服务端中继还带来三个工程红利:可以在一处切换模型供应商或模型版本而不用发新版 App;可以缓存、限流、记账、做失败降级;可以把供应商返回的格式适配成自己 App 的稳定接口,把「第三方会变」隔离在后端。

大模型流式输出:SSE 如何一路贯通

大模型生成是逐 token 的,如果等整段生成完再返回,用户要干等十几秒。正确体验是「边生成边显示」。链路是:App 到你后端建立一条 SSE 长连接,你后端再向上游大模型发起流式请求,上游每吐一点,后端就透传一点给 App(呼应 Stage15-m2 的 SSE、Stage15-m5 的 Nginx 关缓冲)。

示例
流式链路与服务端要点
App  --SSE--> 你的后端 --流式HTTP--> 大模型API
   上游每来一个 delta,后端立刻转发,不攒批
服务端要点:
- 鉴权:先验证是自己的合法用户,再消耗其配额
- 超时与中断:客户端断开时,要同步中止上游请求,别白烧 token
- 异常:上游超时/报错时向下游发一个约定错误事件,App 友好降级
- 关闭多余推理输出、按需设定 max tokens,控成本与延迟
💡非流式兜底与结果一致性

弱网或某些 WebView 对 SSE 支持不佳时,准备一个非流式接口兜底(一次返回完整结果)。无论流式还是非流式,后端都应做请求去抖(用户连续点发送只认最后一次)、上下文长度控制(历史消息截断/摘要),并对同一条问题做短期结果缓存以省重复调用。

TTS:从一段文字到一段声音的管线

语音合成 TTS(Text-to-Speech)不是「文字直接变声音」那么简单,它在内部是一条流水线,理解这条管线有助于你选型、调延迟、处理多音字和断句:

示例
TTS 典型处理管线
① 文本前端/规范化:数字、日期、货币、缩写、符号转可读文本
   (如 "2026年" -> "二零二六年""1/2" -> "二分之一")
② 分词、多音字消歧、韵律与断句预测(在哪停顿、轻重音)
③ 声学模型:把文本特征预测成声学特征(如梅尔频谱)
④ 声码器:把声学特征还原成原始声波波形
⑤ 音频编码:压缩成 MP3/AAC/PCM 等格式返回,客户端解码播放

工程上,朋友好学把 TTS 做成独立服务(经 Nginx 的 /tts 路径分流),后端把要朗读的文本送去、拿回音频。降低延迟的常用手段:按句子切分、合成一句播一句(流式播放);对固定话术(如「回答正确」)预生成并在客户端缓存;选择合适音色与采样率;长文本先做文本规范化避免读错。

选学

音频格式与流式播放(选学)

PCM 是未压缩原始波形、体积大但无需解码即可播;MP3/AAC/Opus 是压缩格式、体积小、要解码。要最低首音延迟,可边收边解码播放(分块传输),而不是等整段下载完。Web 端用 Audio 接口、App 端用原生音频 API 播放队列;注意处理「用户快速切下一句时停止上一段」「锁屏/后台播放权限」等移动端细节。

配额保护、成本控制与内容安全

AI 能力按调用/token 计费,必须像管钱一样管:每用户、每 IP、全局多层配额与限流;服务端记录每次调用量用于计量和异常发现;按场景选模型(简单任务用小模型、复杂任务才用大模型)、限制最大 token、用缓存;内容安全:在服务端注入系统约束、对输入输出做关键词/模型审核、对 AI 生成内容做标识(这在国内还有合规要求,Stage14 从法规角度讲过,这里是工程落地);防止 Prompt 注入——不要把用户输入当成系统指令执行,涉及工具调用/数据操作时尤其要隔离。

🐍资深杂谈:接入第三方能力,本质是管理「不确定性」

大模型会超时、会限流、会返回不合规内容、会涨价、会下线模型;TTS 会有读错、延迟、音频失败。成熟的接入不是「调通一次」,而是为这些不确定性都准备好对策:密钥藏好、流量管住、成本算清、错误能降级、内容可审核、供应商可替换。把第三方当成「可能随时出问题的外部依赖」来设计,你的 AI 功能才会在真实用户面前稳得住——这套方法论对支付、短信、对象存储等一切第三方能力都通用。

选择题

关于在 App 中接入大模型,下列架构最合理、最安全的是?

本节小结

大模型/TTS 是后端能力:Key 放前端会被反编译盗刷、无法限流与审核、受跨域限制,必须服务端中继,且带来一处切换供应商、缓存记账、格式适配的红利。流式靠 SSE 贯通(App↔后端↔大模型),上游 delta 即时透传不攒批,鉴权后耗配额、客户端断开要中止上游、异常发约定事件降级,并备非流式兜底、去抖、上下文截断、短期缓存。TTS 管线=文本规范化(数字日期符号)→分词多音字消歧韵律→声学模型(梅尔频谱)→声码器出波形→编码(MP3/AAC/PCM),延迟优化靠按句流式合成播放、固定话术预生成缓存、选采样率音色。AI 要多层配额限流、计量、按场景选模型限token、内容审核与AIGC标识、防Prompt注入。接入第三方本质是管理不确定性。

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

从浏览器到你的应用,一次请求依次经过 DNS 解析、TCP 三次握手、TLS 握手、反向代理、上游应用,再到数据库或缓存,沿原路返回。每一跳都可能是延迟或故障点,所以排错要分层推进:先确认域名解析和端口连通,再看证书是否有效,最后看应用日志与依赖,而不是出问题就先重启。能把链路一层层说清,定位线上故障会快一个数量级。