任务分解如何让AI更经济
“智能体工作流”使用多个经过微调的小型LLM,而非一个大模型,可以提高效率。
生成式AI应用的普及增加了对准确且经济高效的大型语言模型(LLM)的需求。LLM的成本因其大小(通常以参数数量衡量)而有显著差异:切换到下一个较小的尺寸通常可以节省70%–90%的成本。然而,简单地使用更小、更轻量的LLM并不总是可行的,因为与最先进的“前沿LLM”相比,它们的能力有所下降。
虽然参数规模的减少通常会降低性能,但有证据表明,当较小的LLM专门用于执行问答或文本摘要等任务时,它们在特定任务上的表现可以与未修改的大型前沿LLM相媲美。这为通过将复杂任务分解为更小、更易管理的子任务来平衡成本和性能提供了可能性。这种任务分解使得能够使用成本效益更高、更专业的任务或领域适配的小型LLM,同时还能提供控制力、增强故障排除能力,并可能减少幻觉。
然而,这种方法存在权衡:虽然它可以显著节省成本,但也增加了系统复杂性,可能会抵消部分初始收益。本文探讨了LLM任务分解中成本、性能和系统复杂性之间的平衡。作为示例,我们将考虑使用任务分解来生成个性化网站的情况,展示潜在的成本节省和性能提升。同时,我们也将强调过度设计的潜在陷阱,即过度分解可能导致收益递减,甚至破坏预期效益。
I. 任务分解
理想情况下,一个任务应被分解为彼此独立的子任务。这允许为每个子任务创建有针对性的提示和上下文,通过将故障隔离到特定子任务来简化故障排除,而无需分析单一的、大型的黑盒过程。
然而,有时分解成独立的子任务是不可能的。在这种情况下,可能需要提示工程或信息检索来确保子任务之间的连贯性。但应避免过度设计,因为它可能不必要地使工作流程复杂化,并冒着牺牲LLM通过在原始任务的完整上下文中捕捉隐藏关系所能提供的新颖性和上下文丰富性的风险。
但我们将稍后讨论这些问题。首先,让我们提供一个示例,说明如何将生成个性化网站的任务分解为一个智能体工作流。智能体工作流中的智能体可能是功能性智能体,执行特定任务(例如,数据库查询),或者是模拟组织中人类角色的基于角色的智能体(例如,UX设计师)。本文将重点讨论基于角色的方法。
一个简单的例子:创建一个个性化网站
在我们的场景中,一家企业希望创建一个网站构建器,能够为每位访问者生成量身定制的网络体验,而无需人工监督。生成式AI的创造力和在不确定性下工作的能力使其非常适合此任务。然而,控制工作流程至关重要,以确保遵守公司政策、最佳实践和设计指南,并管理成本和性能。
此示例基于在某中心云服务机器学习博客上发布的智能体工作流解决方案。在该解决方案中,我们将整个过程分解为通常分配给人类代理的子任务,例如个性化设计师(UX/UI设计师/产品经理)、艺术家(视觉艺术创作者)和网站构建者(前端开发人员)。
个性化智能体的目标是通过考虑访问者的个人资料以及公司的政策、产品和设计方法,为网站访问者提供量身定制的体验。这是一个中等规模的文本到文本LLM,具备一定的推理能力。该智能体还结合了检索增强生成(RAG)以利用经过验证的“公司研究”。
以下是给个性化智能体的示例提示:
你是一个AI UI/UX设计师,任务是创建一个视觉吸引力强的网站。请牢记行业痛点[指定相关痛点 — RAG检索]以确保为你的客户[提供客户资料 — JSON转自然语言]提供量身定制的体验。在你的回复中,提供两个部分:供前端开发人员参考的网站描述,以及供艺术家遵循的视觉元素。你应该遵循设计指南[包含相关设计指南]。
艺术家智能体的作用是将视觉元素描述反映在一个定义明确的图像中,无论是背景图像还是图标。文本到图像的提示更直接,以“创建一个[从个性化智能体回复中提取]”开始。
最后一个智能体是前端开发人员,其唯一职责是创建前端网站工件。在这里,可以包含设计系统、代码片段或其他相关信息。在这个简单案例中,使用了以下提示:
你是一位经验丰富的前端Web开发人员,任务是创建一个可访问的、[指定网站目的]网站,同时遵守指定的指南[包含相关指南]。仔细阅读UI/UX设计师AI提供的“网站描述”[来自个性化智能体的回复],并生成所需的HTML、CSS和JavaScript代码以构建所描述的网站。确保[包含特定要求]。
在这里,可以继续使用质量保证(QA)智能体,或者进行最终检查以查看是否存在差异。
II. 大的权衡与过度设计的陷阱
任务分解通常会引入额外的组件(新的LLM、协调器),增加复杂性并带来开销。虽然较小的LLM可能提供更快的性能,但增加的复杂性可能导致更高的延迟。因此,应在更广泛的背景下评估任务分解。
让我们将任务复杂性表示为O(n),其中n是任务大小。对于单个LLM,复杂性随任务大小线性增长。另一方面,在使用k个子任务和k个较小语言模型的并行任务分解中,初始分解具有常数复杂度——O(1)。假设平均分配,k个语言模型中的每一个都独立处理其分配的子任务,复杂度为O(n/k)。
处理完成后,需要协调和集成来自k个语言模型的结果。此步骤的复杂度为O(km),其中完全成对协调时m = 2,但实际上1 < m ≤ 2。
因此,使用多个语言模型进行任务分解的整体复杂度可以表示为 O(k-LLMs) = O(1) + k (O(n/k)) + O(km) → O(n) + O(km)
而单语言模型方法的复杂度为O(n),多语言模型方法由于协调和集成开销引入了一个额外项O(km),其中1 < m ≤ 2。
对于较小的k值和成对连接,与O(n)相比,O(km)开销可以忽略不计,这表明多语言模型方法具有潜在优势。然而,随着k和m的增长,O(km)开销变得显著,可能会削弱任务分解带来的收益。最佳方法取决于任务、可用资源以及性能提升与协调开销之间的权衡。技术的改进将降低m,从而降低使用多个LLM的复杂性。
成本和复杂性的思维模型
决定是否使用任务分解的一个有用思维模型是考虑应用程序的预估总拥有成本(TCO)。随着用户群的增长,基础设施成本变得占主导地位,像任务分解这样的优化方法可以降低TCO,尽管前期需要工程和科学成本。对于较小的应用程序,更简单的方法,例如选择一个大模型,可能更合适且成本效益更高。
过度设计 vs. 新颖性与简洁性
任务分解和使用较小LLM创建智能体工作流,可能会以牺牲更大、更强大模型通常展现的新颖性和创造性为代价。通过“手动”将任务分解为子任务并依赖专用模型,整个系统可能无法捕捉到从更整体方法中可能出现的偶然联系和新颖见解。此外,为适配特定子任务而精心设计复杂提示的过程可能导致过度复杂和令人费解的提示,这可能导致准确性降低和幻觉增加。
使用多个、更小的、微调过的LLM进行任务分解,为提高复杂AI应用的成本效益提供了一种有前景的方法,与使用单个大型前沿模型相比,可能节省大量的基础设施成本。然而,必须注意避免过度设计,因为过度的分解会增加复杂性和协调开销,直至收益递减。在成本、性能、简洁性和保持AI创造力之间取得恰当的平衡,将是释放这种有前景方法全部潜力的关键。FINISHED