CS329Z中文学习站

从模型到复合 AI 系统的转变

"The Shift from Models to Compound AI Systems"

"Matei Zaharia et al." · "BAIR Blog 2024 · UC Berkeley"

必读全文中译查看原文(MD) ↗

导读

本文是 UC Berkeley BAIR 博客 2024 年 2 月 18 日的文章,作者包括 Matei Zaharia(Databricks/UC Berkeley)、Omar Khattab(DSPy 作者)等,是课程第 1 周明确标注的必读材料。它为整门课奠定了一个核心世界观:最先进的 AI 结果越来越多地来自「复合 AI 系统(Compound AI Systems)」——由多个模型调用、检索器、外部工具组合而成的系统——而非单一的大模型。文章回答了三个问题:开发者为什么要构建复合系统(系统设计某些任务上比扩容更划算、能接入动态数据、便于控制与信任、性能与成本可按需调节)?这一范式是否会随模型进步而延续?以及设计、优化、运维复合系统有哪些新挑战与新兴工具(如 DSPy、FrugalGPT、AI 网关、LLMOps)?本课程后续讨论的 RAG、Agent 工作流、DSPy 程序化优化等主题,都可以在这篇文章里找到源头性的框架。

全文中译

从模型到复合 AI 系统的转变

BAIR 博客 — 2024 年 2 月 18 日 作者:Matei Zaharia、Omar Khattab、Lingjiao Chen、Jared Quincy Davis、Heather Miller、Chris Potts、James Zou、Michael Carbin、Jonathan Frankle、Naveen Rao、Ali Ghodsi 原文:https://bair.berkeley.edu/blog/2024/02/18/compound-ai-systems/ (CS 329Z 第 1 周必读材料)

2023 年,LLM(Large Language Models,大语言模型)吸引了所有人的目光:只需提示,就能让它完成翻译、编程等通用任务。这自然让大家把「模型」当作 AI 应用开发的首要成分,人人都在猜测新一代 LLM 会带来什么能力。

然而,随着越来越多开发者开始基于 LLM 构建,我们相信这一重心正在迅速改变:最先进的 AI 结果越来越多地来自由多个组件构成的复合系统(compound systems),而不仅仅是单体模型(monolithic models)。

例如,Google 的 AlphaCode 2 通过一个精心设计的系统在编程领域创下最先进结果:先用 LLM 为一道题目生成多达 100 万个候选解,再对解集合做过滤。AlphaGeometry 同样把 LLM 与传统符号求解器结合起来解决奥赛几何题。在企业侧,我们在 Databricks 的同事发现,60% 的 LLM 应用使用了某种形式的检索增强生成(RAG),30% 使用了多步链(multi-step chains)。

就连传统语言模型任务的研究者——过去只报告单次 LLM 调用的结果——如今也在报告越来越复杂的推理策略:微软撰文介绍了一种链式(chaining)策略,在医学考试上超过 GPT-4 准确率 9 个百分点;Google 的 Gemini 发布文章用新的 CoT@32 推理策略测得 MMLU 基准结果——该策略调用模型 32 次——这也让人质疑其与 GPT-4 单次调用结果的可比性。向复合系统的转变带来了许多有趣的设计问题,但同样令人兴奋,因为它意味着领先的 AI 结果可以凭借巧妙的工程获得,而不仅仅是靠扩大训练规模。

在这篇文章中,我们将分析复合 AI 系统的趋势及其对 AI 开发者的意义。开发者为什么在构建复合系统?随着模型进步,这一范式会长期存在吗?用于开发与优化这类系统的新兴工具有哪些——这一领域受到的研究远少于模型训练?我们论证:复合 AI 系统很可能是未来最大化 AI 结果的最佳方式,并且可能是 2024 年 AI 领域最具影响力的趋势之一。

[图:越来越多新的 AI 结果来自复合系统]

为什么要使用复合 AI 系统?

我们把复合 AI 系统(Compound AI System)定义为:使用多个相互作用的组件来完成 AI 任务的系统,包括对模型的多次调用、检索器或外部工具。相比之下,AI 模型只是一个统计模型,例如预测文本中下一个 token 的 Transformer。

尽管 AI 模型在不断变强、其扩展(scaling)也看不到明显的终点,但越来越多的最先进结果是用复合系统取得的。为什么呢?我们观察到几个不同的原因:

  1. 有些任务通过系统设计更容易改进。 LLM 似乎遵循出色的扩展定律,算力越多、效果越可预期地变好,但在很多应用中,扩展的「收益/成本」比不如构建复合系统。举例来说,假设当前最好的 LLM 能以 30% 的成功率解出编程竞赛题,把训练预算扩大三倍或许能提升到 35%——这仍然不足以赢得编程竞赛!相比之下,设计一个对模型多次采样、逐一测试的系统(如 AlphaCode 所示),用今天的模型就可能把性能提到 80%。更重要的是,迭代系统设计往往比等待训练运行快得多。我们相信,在任何高价值应用中,开发者都会想用尽一切手段来最大化 AI 质量,因此他们会在扩展之外同时使用系统思路。我们在 LLM 用户中经常看到这样的情况:一个好 LLM 做出了诱人但不可靠的首个 demo,随后工程团队系统性地把质量做上去。

  2. 系统可以是动态的。 机器学习模型天然受限于静态数据集的训练,其「知识」是固定的。因此开发者需要把模型与搜索、检索等其他组件结合起来,以纳入时效性数据。此外,训练让模型「看过」整个训练集,所以要构建带访问控制的 AI 应用(例如只基于用户有权访问的文件回答问题),也需要更复杂的系统。

  3. 通过系统更容易改进控制与信任。 单靠神经网络模型难以控制:训练虽能影响它,却几乎无法保证模型规避某些行为。使用 AI 系统而非单一模型,可以帮助开发者更紧地控制行为,例如过滤模型输出。同样,即使是最好的 LLM 也仍会产生幻觉,但把 LLM 与检索结合的系统可以通过提供引用或自动核查事实来增强用户信任。

  4. 性能目标千差万别。 每个 AI 模型都有固定的质量水平与成本,而应用往往需要灵活调节这两个参数。在行内代码补全这类应用中,最好的 AI 模型太贵了,所以像 GitHub Copilot 这样的工具使用精心调优的较小模型加各种搜索启发式来给出结果。在另一些应用中,即使是 GPT-4 这样最大的模型也「太便宜了」:很多用户宁愿为一份正确的法律意见花几美元,而不是只花问 GPT-4 的几分钱——但开发者需要设计一个 AI 系统来利用这笔更大的预算。

生成式 AI 向复合系统的转变,也与其他 AI 领域(如自动驾驶)的行业趋势一致:大多数最先进的实现都是拥有多个专用组件的系统。基于这些原因,我们相信即使模型不断进步,复合 AI 系统仍将保持主导范式的地位。

开发复合 AI 系统

复合 AI 系统的好处虽然明确,但设计、优化与运维它们的艺术仍处于起步阶段。表面上,AI 系统是传统软件与 AI 模型的结合,但其中存在许多有趣的设计问题。例如,整体的「控制逻辑」应该用传统代码写(如调用 LLM 的 Python 代码),还是应该由 AI 模型驱动(如调用外部工具的 LLM 智能体)?再如,在一个复合系统里,开发者应该把资源投在哪里——在一条 RAG 管线中,是把更多 FLOPS 花在检索器还是 LLM 上,甚至多次调用 LLM?最后,如何对一个由离散组件构成的 AI 系统做端到端优化以最大化某个指标,就像我们训练神经网络那样?本节将详细介绍几个 AI 系统实例,然后讨论这些挑战及最新研究。

AI 系统设计空间

下面列出近期的几个复合 AI 系统,以展示设计选择的广度:

AI 系统 组件 设计 结果
AlphaCode 2 用于采样与打分的微调 LLM;代码执行模块;聚类模型 为一道编程题生成多达 100 万个解,然后过滤并打分 在编程竞赛中匹敌人类第 85 百分位
AlphaGeometry 微调 LLM;符号数学引擎 LLM 迭代地为几何题建议辅助构造,符号引擎检查推导出的事实 在限时测试中达到国际数学奥赛银牌与金牌选手之间
Medprompt GPT-4 LLM;正确示例库上的近邻搜索;LLM 生成的思维链示例;多样采样与集成 通过搜索相似示例构造少样本提示来回答医学问题,为每个示例附加模型生成的思维链,并生成、评判多达 11 个解 超过 Med-PaLM 等专用医学模型配合简单提示策略的表现
Gemini(MMLU) Gemini LLM;定制推理逻辑 Gemini 面向 MMLU 的 CoT@32 推理策略采样 32 个思维链答案,若足够一致则返回多数选择,否则退回不用思维链的生成 MMLU 上 90.04%,相比之下 GPT-4 五样本提示为 86.4%,Gemini 五样本提示为 83.7%
ChatGPT Plus LLM;检索时效内容的网页浏览插件;执行 Python 的 Code Interpreter 插件;DALL-E 图像生成器 ChatGPT Plus 可以调用网页浏览等工具回答问题;LLM 在回答过程中决定何时、如何调用每个工具 拥有数百万付费订阅者的热门消费级 AI 产品
RAG、ORQA、Bing、Baleen 等 LLM(有时被多次调用);检索系统 以多种方式结合 LLM 与检索系统,如让 LLM 生成搜索查询,或直接基于当前上下文检索 搜索引擎与企业应用中的常用技术

复合 AI 系统的关键挑战

与 AI 模型相比,复合 AI 系统在设计、优化与运维上提出了新挑战。

设计空间

针对一个任务的系统设计方案范围极大。即使是在检索器 + 语言模型这种简单的 RAG 场景中,也有:(i) 大量可选的检索与语言模型;(ii) 提升检索质量的其他技术,如查询扩展(query expansion)或重排模型(reranking);(iii) 改进 LLM 生成输出的技术(如再运行一个 LLM 检查输出与检索段落是否相关)。开发者必须在这个庞大的空间里探索出好的设计。

此外,开发者还需要把延迟、成本预算等有限资源在系统组件间分配。例如,若想在 100 毫秒内回答 RAG 问题,应该给检索器留 20 毫秒、给 LLM 留 80 毫秒,还是反过来?

优化

在机器学习中,复合系统的质量最大化常常要求各组件协同优化、彼此适配。考虑一个简单的 RAG 应用:LLM 看到用户问题后生成发给检索器的搜索查询,再生成答案。理想情况下,LLM 应被调优为生成的查询「恰好适配那个检索器」,检索器也应被调优为偏爱与「那个 LLM」相配的答案。

在 PyTorch 式的单模型开发中,用户可以轻松地端到端优化模型,因为整个模型是可微的。但复合 AI 系统包含搜索引擎、代码解释器等不可微组件,因而需要新的优化方法。优化这类复合系统仍是新的研究方向:例如 DSPy 为预训练 LLM 与其他组件组成的管线提供了通用优化器;另一些系统(如 LaMDA、Toolformer、AlphaGeometry)则在模型训练期间使用工具调用,让模型为这些工具而优化。

运维

对复合 AI 系统而言,机器学习运维(MLOps)变得更难。例如,跟踪一个传统 ML 模型(如垃圾邮件分类器)的成功率很容易,但面对同一任务上的 LLM 智能体——它可能使用数量不定的「反思」步骤或外部 API 调用来分类一封邮件——开发者该如何跟踪与调试其性能?我们相信,新一代 MLOps 工具将被开发出来解决这些问题。有趣的问题包括:

  • 监控(Monitoring): 开发者如何最高效地记录、分析和调试复杂 AI 系统的轨迹(trace)?
  • 数据运维(DataOps): 许多 AI 系统包含向量数据库等数据服务组件,其行为取决于所服务数据的质量,因此对这类系统的运维还应覆盖数据管线。
  • 安全(Security): 研究表明,复合 AI 系统(如带内容过滤器的 LLM 聊天机器人)相比单个模型会产生意想不到的安全风险,需要新工具来保护。

新兴范式

为应对构建复合 AI 系统的挑战,业界与研究中出现了多种新方法。我们重点介绍几种使用最广泛的,以及我们团队在应对这些挑战上的研究实例。

设计 AI 系统:组合框架与策略。 许多开发者正在使用「语言模型编程」框架,用多次模型调用与其他组件来搭建应用。包括:开发者从传统程序中调用的组件库(如 LangChain、LlamaIndex);让 LLM 驱动应用的智能体框架(如 AutoGPT、BabyAGI);以及控制 LM 输出的工具(如 Guardrails、Outlines、LMQL、SGLang)。与此同时,研究者们正在开发大量新的推理策略,用模型调用与工具生成更好的输出,如思维链(chain-of-thought)、自洽性(self-consistency)、WikiChat、RAG 等。

自动优化质量:DSPy。 来自学界的 DSPy 是首个旨在优化「由 LLM 调用与其他工具组成的系统」以最大化目标指标的框架。用户用 LLM 调用与其他工具写出应用,并提供目标指标(如验证集上的准确率),DSPy 便自动调整管线——为每个模块生成提示指令、少样本示例及其他参数选择——以最大化端到端性能。其效果类似于在 PyTorch 中对多层神经网络做端到端优化,只是 DSPy 的模块并不总是可微的层。为此,DSPy 以一种干净的方式利用 LLM 的语言能力:用户用自然语言签名(如 user_question -> search_query,输入输出字段名都有语义)来描述每个模块,DSPy 自动将其转化为带指令、少样本示例的合适提示,甚至对底层语言模型做权重更新。

优化成本:FrugalGPT 与 AI 网关。 可选的 AI 模型与服务众多,为一个应用挑选合适的模型并不容易;而且不同模型在不同输入上的表现可能不同。FrugalGPT 是一个自动把输入路由到不同 AI 模型级联(cascade)的框架,在给定预算下最大化质量。基于一小批示例,它学到的路由策略可以在相同成本下比最好的 LLM 服务高出最多 4%,或在质量持平的情况下把成本降低最多 90%。FrugalGPT 是「AI 网关/路由器」这一更广义新兴概念的实例(实现于 Databricks AI Gateway、OpenRouter、Martian 等软件),用于优化 AI 应用各组件的表现。当 AI 任务在复合系统中被拆成更小的模块化步骤、网关可以逐步分别优化路由时,这些系统的效果还会更好。

运维:LLMOps 与 DataOps。 AI 应用一直需要仔细监控模型输出与数据管线才能可靠运行。而在复合 AI 系统中,系统对每个输入的行为可能复杂得多,因此跟踪应用走过的所有步骤与中间输出非常重要。LangSmith、Phoenix Traces、Databricks Inference Tables 等软件可以细粒度地跟踪、可视化并评估这些输出,某些情况下还能将其与数据管线质量和下游指标关联。研究领域,DSPy Assertions 尝试把监控检查的反馈直接用于 AI 系统以改进输出;MT-Bench、FAVA、ARES 等基于 AI 的质量评估方法则致力于自动化质量监控。

结论

生成式 AI 通过自然语言提示解锁了广泛能力,令每个开发者兴奋。然而,当开发者希望超越 demo、最大化 AI 应用质量时,他们正越来越多地转向复合 AI 系统,把它作为控制与增强 LLM 能力的自然途径。如何开发复合 AI 系统的最佳实践仍是一个开放问题,但设计、端到端优化与运维方面已经出现了令人振奋的方法。我们相信,复合 AI 系统将持续成为最大化 AI 应用质量与可靠性的最佳方式,并可能是 2024 年 AI 领域最重要的趋势之一。

本文的 BibTex 引用:

@misc{compound-ai-blog,
  title={The Shift from Models to Compound AI Systems},
  author={Matei Zaharia and Omar Khattab and Lingjiao Chen and Jared Quincy Davis
          and Heather Miller and Chris Potts and James Zou and Michael Carbin
          and Jonathan Frankle and Naveen Rao and Ali Ghodsi},
  howpublished={\url{https://bair.berkeley.edu/blog/2024/02/18/compound-ai-systems/}},
  year={2024}
}

(注:以上为原文提供的 BibTex 条目,便于引用。)

要点速览

  • 核心论断:最先进的 AI 结果日益来自「复合 AI 系统」——由多次模型调用、检索器、外部工具等相互作用组件构成的系统,而非单一模型。
  • 定义:复合 AI 系统 = 用多个相互作用组件(多次模型调用、检索器、外部工具)完成 AI 任务;AI 模型只是统计模型(如预测下一个 token 的 Transformer)。
  • 四大动因:某些任务靠系统设计比扩容更划算(AlphaCode 式多次采样+测试)、系统可接入动态数据、系统便于控制行为与建立信任(引用、事实核查)、性能与成本可按应用需求灵活调节。
  • 实例数据:AlphaCode 2 生成最多 100 万候选解后过滤;Databricks 发现 60% 的 LLM 应用用 RAG、30% 用多步链;Medprompt 链式策略超 GPT-4 医学考试准确率 9 个百分点;Gemini CoT@32 在 MMLU 得 90.04%(对比 GPT-4 五样本 86.4%)。
  • 三大挑战:设计空间庞大且要在组件间分配延迟/成本预算;系统含不可微组件、需要端到端协同优化的新方法;MLOps 升级为 LLMOps(轨迹监控、DataOps、安全)。
  • 新兴工具范式:LangChain/LlamaIndex 等组合库、AutoGPT 等智能体框架;DSPy 用自然语言签名做端到端管线优化;FrugalGPT 与 AI 网关在质量/成本间做级联路由(同成本高至多 4%,或成本降至多 90%)。
  • 结论:复合 AI 系统预计将持续成为最大化 AI 应用质量与可靠性的最佳方式,是 2024 年 AI 最重要的趋势之一——这也是本课程以系统视角讲授 Agent 工程的理论起点。