引言
大语言模型(LLMs)被视为人工智能领域的里程碑式突破,但要将其应用于实际生产环境并确保稳定、高效地运行并非易事。模型的使用成本和响应延迟是目前将 LLMs 应用于生产环境中的核心难题之一。本文旨在解析导致高成本和高延迟的根源,并提供经过实战验证的优化策略。
1. Prompt 的本质与架构
在构建基于 LLM 的应用时,无论解决方案多么复杂,实质上所有组件最终都会汇总成一条长长的文本信息——'指令性提示词'(Instructional Prompt),传递给 LLM。使用 LangChain 等框架虽然简化了逻辑抽象和组件调用,但开发者需时刻警惕输入信息的膨胀。
一个典型的 LLM Agent 接收到的输入通常包含以下部分:
- 系统指令:定义模型的角色和行为准则。
- 用户输入:当前对话的具体内容。
- 历史上下文:之前的对话记录或记忆库数据。
- 工具描述:可供调用的 API 文档及参数说明。
- 检索增强内容:RAG 系统返回的相关片段。
这些内容的总和构成了最终的 Token 消耗基础。因此,理解 Prompt 的结构是优化的第一步。
2. 影响成本与延迟的关键因素
LLMs 的响应延迟和使用成本主要取决于输入和输出处理的 Tokens 数量,而非任务本身的逻辑难度。
2.1 成本构成
从成本角度看,Input Tokens 通常是 LLMs 使用成本的'大头'。以主流模型定价为例,Input Tokens 的价格虽仅为 Output Tokens 的三分之一左右,但在复杂任务中,提示词长度往往远超面向用户的 Output Tokens 长度。在使用 LLM Agents 时,约 80% 的 Tokens 来自 Input Tokens,主要包括初始提示词和 Agent 推理过程中的中间消耗。
2.2 延迟构成
延迟主要受 Output Tokens 影响。处理 Output Tokens 的时间大约是 Input Tokens 的 200 倍。这意味着生成大量回复会显著增加用户等待时间。对于 To C 领域,面对成千上万次的即时对话需求,成本控制与响应速度直接决定项目成败。
3. 监控与管理 Token 消耗
在构建任何 LLMs 应用程序时,除了初始提示词模板之外,至少还需要以下组件,它们都会增加 Token 消耗:
- 记忆库:每次交互需包含之前所有的对话消息或历史上下文。
- 工具箱:供 LLMs 调用的 API 及其详细的指导性提示词。
- RAG 系统:检索增强生成产生的上下文。
如果依赖最简单的 Agent&Tools 架构,系统的扩展性可能较差。对于每一种可用的工具,都需要在每次调用 Agents 时发送诸如 API 文档之类的详细说明。在准备新系统组件时,需要评估每次调用增加多少个 Tokens 是值得的。
建议实践: 利用 LangSmith 等工具深入分析每次调用的具体 Token 分布。启用调试功能查看最终发送给模型的完整 Prompt,这能帮助我们发现冗余信息并及时消除漏洞。
4. 优化策略:精简而不牺牲准确性
初次接触时,大语言模型可能令人感到无所适从,但归根结底,我们打交道的仍是软件。这意味着应当事先预料到会出现错误,管理和控制软件系统设计中的抽象层次和模块化程度。
4.1 分层决策与执行
试图用单个提示词来处理更复杂的问题,如同编写难以维护的'意大利面条式代码'。在构建应用时,性能提升的一个关键点是将提示词拆分为两个部分:
- 决策 Agent(Decision Agent):负责判断下一步措施及处理原则。
- 执行 Agent / 对话型 LLMs:含有针对具体步骤的详细指导性提示词。
这种架构使得我们在每次调用时,首先选取需要使用的特定任务提示词,而无需随附沉重的执行指令,从而平均减少超过 60% 的 Tokens 使用量。
4.2 传统编程优先原则
在使用 LLMs 时,最大的误区是忘记可以利用编程来解决问题。一些最大的性能提升,是通过使用 Python 函数在 LLMs 调用的上下游处理简单任务。
指示 LLMs 保持回答与用户发送的消息相同的语言,LLMs 仍可能默认回复英文。我们无需借助 LLMs 来检测目前的对话使用的是什么语言,利用 Google Translate API 或简单的 Python 库(如 )可以更快、更准确地完成这项任务。


