从Fanziz实际踩坑出发,总结严格RAG实现、优质Token筛选、查询路由等六种降低LLM推理成本和延迟的架构方案。
过去一年,大语言模型从实验性原型逐步演变为核心后端基础设施。随着功能集不断扩展,一个反模式在各工程团队中浮现:无论什么产品需求,都试图通过向 prompt 中塞入更多原始上下文来解决问题。
在为 Fanziz 构建实时、数据密集型功能的过程中——涵盖个性化信息流、语义搜索和动态直播点评——我们直接撞上了这种做法的现实约束:推理成本飙升、吞吐量下降、严重的延迟瓶颈。
面对这些问题,投入更大的上下文窗口或更贵的模型很少是正确的工程解法。真正的架构挑战反而是:如何在最小化传输 payload 的同时最大化输出质量?
以下是我们为优化 LLM 流水线而落地的六个生产级转变。
将整个数据集、聊天记录或长篇文章塞进 prompt,既浪费算力,又会引入幻觉风险。
转变:实施严格的检索增强生成(RAG)。
实现:将源数据摄入专用的向量数据库,并优化分块和索引策略。当查询到达后端时,运行相似性搜索,只提取 top-$k$ 条相关文本片段注入执行上下文。
结果:大幅缩减 prompt payload、推理速度可预期、模型回答更扎实。
系统规则、产品 schema 和持久化元数据在成千上万个并发请求中往往保持不变,但后端流水线却常常为每一次请求重建并序列化它们。
转变:在 Provider 层和基础设施层实施上下文缓存。
实现:将静态 system prompt 和持久化参考文档与动态运行时变量分离。通过维护不可变的 prefix 块,下游推理引擎可以复用 KV 缓存,而无需从头重新计算静态 token。
结果:显著降低输入 token 成本,Time-to-First-Token(TTFT)立竿见影地改善。
在每一个用户触点都默认使用精巧的 few-shot prompt 模板,会引入不必要的开销。Prompt 工程应该按逻辑复杂度分层:
为示例 payload 匹配合适的规模,每个执行省掉数百个冗余 token。
随着功能扩展,一个巨石型 system prompt 很快变成难以维护的单点故障,边缘情况的指令相互冲突,token 计数不断膨胀。
转变:采用模块化 prompt 架构。
实现:将 prompt 视为微组件。将逻辑拆分为独立模块——例如 Base Persona、Domain Guardrails、Input Sanitization、JSON Output Contract——然后在服务层调用前动态组装仅所需的模块。
[Incoming Query]
└── Dynamically Load Modules:
├── Base Rules
├── Task-Specific Contract
└── Output Schema (Only what is necessary)
LLM 是推理引擎,不是万能锤子。用生成式基础模型来处理意图分类、情感分析或路由分发这类任务,是对资源的一种低效消耗。
转变:确定性路由和轻量级分类。
实现:将意图分类、正则过滤、基础文本处理交给确定性代码或小型精调的 task-specific 模型处理(例如轻量级 BERT 变体、快速文本嵌入或启发式规则)。
原则:只有在严格需要开放式综合或复杂生成式推理时,才路由到主 LLM。
无法度量就无法优化。在高流量系统中,token 使用量是与内存分配、I/O 瓶颈、CPU 负载同等重要的核心基础设施指标。
需要追踪的关键指标:
一旦将 token 可观测性直接接入 APM 和仪表盘流水线,成本泄漏和低效 prompt 在影响生产预算之前就会立即显现。
扩展生产级 AI 不是采购参数量最高的模型,而是构建 disciplined、高效的数据流水线。
在引入更重的 prompt 或升级 API 档位之前,架构问题始终应该是:这个特定步骤是否真的需要一个大语言模型,执行它所需的最小上下文究竟是什么?