重要提示:如需以 Markdown 形式查看本页,请在 URL 后追加 `.md`。 完整文档索引见 llms.txt
跳到主要内容
完整文档索引见 llms.txt。 在任意 URL 后追加 `.md` 即可查看该页面的 Markdown 版本。

多模型推理流水线

多模型推理流水线是一种由多个模型协同工作、共同产出一个结果的系统。 你不会让单个模型包办一切,而是将工作拆分为多个阶段。 每个阶段都聚焦于特定任务,例如 retrieval、OCR、classification、 generation 或 post-processing。

这不同于在单个端点后面运行一个模型。它也不同于 pipeline parallelism, 后者是把一个模型拆分到多个设备上。这里的核心问题不是如何分布一个模型, 而是如何设计、部署和运营一个由多个模型在同一请求路径中协作的系统。

多模型流水线长什么样

最直观的理解方式是把它看作一条流水线。但在现实中,许多系统看起来更像是 一张 inference graph,而不是一条直线。有些阶段会并行运行, 有些请求会分叉到不同的下游路径,有些阶段则是可选的。

不同模式意味着不同权衡。

顺序流水线

这是最直接的搭建方式。每个阶段的输出都会传给下一个阶段。

Input → Stage A → Stage B → Stage C → Output

顺序流水线在概念上很简单,但延迟会逐层累加。如果每个阶段耗时 50 ms, 那么四个阶段在最终生成步骤开始之前,就很容易累积出数百毫秒的端到端延迟。

并行 fan-out / fan-in

在这种模式中,一个请求会同时发送给多个模型, 然后再对它们的输出进行合并、投票或评分。

示例包括:

  • 集成预测(ensemble predictions)
  • 运行多个候选生成器并选择最佳结果
  • 在同一张图像上同时进行目标检测与分割

并行 fan-out 可以提升质量或覆盖范围,但也会增加总计算消耗。 即使延迟仍在可接受范围内,单请求成本也可能迅速上升。

条件路由

在这种模式中,前面的某个阶段会决定接下来发生什么。

示例包括:

  • 一个小型 classifier 只把困难请求发送给更大的模型
  • 一个语言检测器选择正确的下游模型
  • 一个安全过滤器拦截或重定向不安全输入

这种方式可以节省成本并控制延迟,但前提是路由器足够可靠。 错误的早期决策会把请求送入错误路径,从而损害质量。

多模态流水线

这类系统会混合不同的数据类型,因此也会涉及不同类型的模型。

示例包括:

  • Image encoder → language model
  • Speech model → language model → moderation model
  • Document parser → table extractor → language model

这里的核心挑战通常不只是模型质量, 而是如何在阶段之间传递并规范化中间数据,同时不制造瓶颈或脆弱接口。

为什么多模型流水线很重要

许多生产级 AI 应用本质上并不是单模型问题。一个大模型通常可以把多个任务都做得 还不错,但这并不意味着它就是每个阶段的最佳选择。

更契合的能力分工

不同模型针对不同任务做了优化。

  • OCR 模型针对从噪声图像或 PDF 中提取文本做了优化。
  • Embedding 模型针对语义检索做了优化。
  • Reranker 针对相关性打分做了优化。
  • 更小的 classifier 或 guard model 往往已经足以胜任路由、过滤或审核。
  • 更大的生成模型则更适合保留给最终推理或响应综合。

这种分工通常比强迫单个模型覆盖所有阶段更有效。

更契合的硬件分配

并不是每个阶段都值得使用同样的硬件。

轻量级预处理或校验阶段可能在 CPU 上就能很好运行。 而 vision encoder、reranker 或大型生成器则可能需要 高性能 GPU。有些阶段很适合做 batch, 另一些则对延迟极其敏感,应尽量保持小而快。

这使团队能够把每个阶段放到最匹配其工作负载的硬件上, 而不是为了最昂贵的阶段而对整个流水线过度配置。

独立扩缩容

不同阶段通常具有不同的流量画像。retriever 可能运行成本低, 但会命中每一个请求;而大型生成器运行成本高,且可能只在过滤后的部分流量上运行。 当每个阶段都是独立可部署单元时,它就可以依据自己的信号 (queue depth、GPU utilization、concurrency)进行扩缩容, 而不是被最慢的组件绑定在一起。

更低的单请求成本

多阶段流水线为成本节省创造了空间,而这通常不是单模型容易复制的:

  • 廉价的 classifier 或 router 可以只把困难请求发送给更大、更昂贵的模型。
  • 轻量阶段可以运行在 CPU 或更小的 GPU 上。
  • 更小的专用模型可以在狭窄任务上替代通用 LLM (例如 extraction、classification、moderation)。

但前提是流水线调优得当,否则这些节省并不会自然出现。 设计糟糕的流水线很容易比单体模型成本更高。

更快的迭代速度

多模型系统的模块化程度更高。如果 retrieval 阶段表现不佳, 你可以替换或重新调优它,而无需改动 generation 阶段。 如果最终模型太昂贵,你也可以在不重设计其余系统的情况下测试更小的替代方案。 这种局部迭代能力,正是团队采用 inference graph 而不是单体服务的原因之一。

什么时候不该使用多模型流水线

这个方向很容易被过度工程化。如果单个模型已经能满足需求,那就保持简单。 只有当额外阶段能带来明确价值时,它们才有意义。

在将工作负载拆成多个阶段之前,先问自己:

  • 每个阶段是否都在解决一个单模型无法很好解决的独立问题?
  • 这条流水线在质量、成本或可控性上的提升,是否足以证明新增复杂性是值得的?
  • 延迟预算能否容纳额外的跳转和排队点?
  • 随着模型演进,阶段之间的接口能否保持稳定?
  • 独立扩缩容究竟真的能省钱,还是只会带来更多运维开销?

模型组合会带来真实成本:

  • 需要部署更多服务
  • 阶段之间需要维护更多契约
  • 需要投入更多 observability 工作
  • 会出现更多故障模式
  • 需要进行更多端到端层面的调优

应先从满足需求的最小架构开始,只有当某个阶段明确证明自己有价值时, 再把它加进去。

示例架构

下面是一些非常适合采用多模型推理流水线的具体模式。

RAG 流水线

一个常见的 RAG 路径如下:

Query → Embed → Retrieve → Rerank → Generate → (Optional) Verify

每个阶段都有清晰职责:

  • embedding 模型负责找到相似内容
  • retriever 负责缩小搜索空间
  • reranker 负责提升相关性
  • generator 负责将这些证据转化为响应
  • 最后的 verifier 或 citation checker 负责降低幻觉风险

文档 AI 流水线

一个文档工作流可能如下所示:

Document image → OCR → Layout extraction → Classify → Summarize → Structured Output

如果准确性、格式或可追溯性很重要,这种流程很难被单个模型替代。 OCR 和 layout extraction 与 summarization 是非常不同的任务。 其代价在于,大型中间产物可能会跨多个阶段流动,因此 payload 设计很重要。 如果输出需要直接交给另一个系统, structured outputs 可以让这种交接更易于维护。

多模态助手

多模态应用可能会先将图像、音频和文本分别送入独立 encoder, 然后再由下游语言模型使用组合后的信号。

这类系统通常是硬件专用化的典型案例。语音阶段、图像阶段和语言阶段 可能具有截然不同的运行时画像与扩缩容需求。

单模型 vs. 多模型流水线

不存在放之四海皆准的赢家。正确选择取决于哪一种约束对你最重要。

维度单模型多模型流水线
简单性更简单组成部分更多
延迟通常更低往往更高
硬件灵活性有限更高
独立扩缩容有限更强
专业化能力有限更强
运维负担更低更高
单阶段实验更难更容易

经验法则如下:

  • 如果一个模型已经能满足产品需求,就先从一个模型开始。在决定组合多个模型之前, 先了解如何 选择合适的模型
  • 只有在阶段确实有帮助时才增加它们
  • 尽可能保持阶段数量最少

常见问题

每个 RAG 系统都应该被视为多模型流水线吗?

从概念上说,是的,因为 retrieval、reranking 和 generation 是独立阶段。 但在运维上不一定如此。有些团队会把这些阶段封装在一个服务边界后面, 并将其视为一个可部署单元。关键在于,即使抽象看起来很简单, 你也要理解阶段级别的瓶颈。

所有阶段都应该放在一个服务里吗?

不一定。一个服务可以减少跳转延迟,并简化本地协调。 但如果不同阶段需要不同硬件、扩缩容策略、发布节奏或故障隔离, 那么拆分为多个服务会更合适。

多模型流水线能降低推理成本吗?

当小型专用模型能在大模型运行前完成过滤或路由, 或不同阶段能更高效地使用更便宜的硬件时,它们可以降低成本。 但设计糟糕的流水线也很容易起到相反效果。

这与 agentic workflow 有什么不同?

二者都会串联多个模型调用,但多模型流水线通常是你预先设计好的、相对固定的图。 而 agent 会动态决定调用哪些工具或模型、调用多少次,以及按什么顺序调用。 agent 可以看作是流水线这一思路的超集,具备更高灵活性, 但延迟和成本的波动也更大。如果你希望无论采用哪种方式, 阶段之间的接口都保持可预测, function callingstructured outputs 通常都是解决方案的一部分。