ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

控制大语言模型开支有妙招:五大手段助力工程与成本协同

控制大语言模型开支有妙招:五大手段助力工程与成本协同 控制大语言模型开支有妙招五大关键手段助力工程与成本协同大语言模型堪称神奇工具然而当费用像城市巴士般向你袭来时问题就来了。幸运的是我们有一些有效的方法来控制开支。过去十年里我们专门组建了云成本管理FinOps部门只为解读云账单上的费用明细。就在我们刚弄清楚如何避免闲置计算实例持续运行时生成式 AI 又带来了一层更加难以捉摸、变化迅速的开支。AI 账单带来的冲击如一场缓慢移动的飓风席卷了整个行业。除了大语言模型LLM成本飙升之外更深层次的架构问题在于费用归属钱究竟花在了哪里又究竟为企业带来了什么价值当 API 调用被包裹在多层自动化代理和提示模板中时你的应用程序就变成了一个消耗资金来生成令牌token的黑匣子。如果一个特征引擎每月花费数千美元仅仅是为了让大语言模型输出一些客套话或处理低价值数据那这可不是创新而是一个未被发现的陷阱是巨大的潜在风险。架构成熟度意味着要像对待其他受限资源一样对待令牌。幸运的是我们有一些有效的方法来控制 AI 开支。以下是五个关键的控制手段。模型路由如果用图钉就能解决问题就别用钉枪。像最新的 Claude Opus 这类最强大的模型是有史以来构建的最复杂的软件系统之一。它们能够处理极其复杂和微妙的用例但在计算资源也就是金钱消耗方面它们就像贪婪的野兽往往大材小用。在进行原型设计、勾勒 API 和确定需求时我们自然会从最强大的模型开始。这是因为我们处于“让它运行起来”的模式不想被模型的局限性所困扰。但在生产环境中确定可以使用的最弱模型至关重要。有时我们可以通过手动调整模型选择来解决这个问题。而在大型企业架构中我们可以引入条件路由层。像 RouteLLM 或 Semantic Router 这样的框架可以动态地将简单分类、基本文本解析和用户意图检测任务导向快速且低成本的实用模型如 GPT - 4o mini 或 Claude 3 Haiku。你还可以使用高级 AI 网关进行路由和开支分配。在基础设施层面将这种逻辑封装在专用的 AI API 网关如 Kong、Cloudflare AI Gateway 或 Portkey中能让你获得最终控制权。成熟的网关允许你实现“级联路由”如果主 LLM 达到速率限制或出现延迟高峰可自动切换到更便宜或开源的模型。更重要的是AI API 网关能集中收集遥测数据揭开黑匣子的面纱让你可以为每个租户或每个微服务设定严格的令牌预算。本质上你是在为认知任务构建一个负载均衡器。当然AI 网关本身也会带来复杂性和成本所以必须在这些因素之间取得平衡。但关键是你的项目有一个合适大小的模型。通过将请求路由到一个“刚刚好”的模型你可以节省大量成本。另外模型路由的另一个趋势是“计算回迁”即把模型通常是开源模型运行在本地硬件上而不是在云端租用生成式 AI 端点。这意味着要权衡本地部署方案的利弊。语义缓存在传统的 Web 应用中缓存问题已经得到解决。你只需在数据库前放置 Redis将精确查询映射到缓存的有效负载就大功告成。但大语言模型打破了传统缓存因为人类语言具有无限的可变性。“如何重置我的密码”和“我忘记了登录信息”是完全不同的字符串但表达的意图相同。如果你依赖过于精确的匹配缓存命中率将几乎为零你将为每一种表达方式的变体支付全额令牌费用。这时语义缓存就派上用场了。它就像是针对语义的正则表达式。你不再对原始文本字符串进行哈希处理而是将输入的提示通过一个快速嵌入模型处理然后与之前已回答的提示进行相似度搜索。你设定一个置信度阈值例如 0.92如果达到该阈值就提供缓存的响应完全绕过 LLM 及其成本。语义缓存的架构效果有两方面。首先一次语义缓存命中可以将该查询的推理成本降至零。其次它可以将响应延迟从秒级缩短至毫秒级。你可以使用专门的框架如 GPTCache来实现这一点或者如果你更喜欢轻量级的基础设施也可以在现有的 PostgreSQL 数据库中使用 pgvector 来存储和匹配嵌入向量。然而就像动态路由一样语义缓存需要严谨的架构考量。你是在用生成成本换取嵌入和查找成本。为了检查缓存你仍然需要对提示进行分词调用一个低成本的模型如 text - embedding - 3 - small并执行向量搜索。此外你还会面临语义扁平化的实际风险。调整相似度阈值是一门微妙的艺术。如果阈值设置得太低你的应用程序就会开始为用户的细微问题提供通用的、重复的答案。对于开放式、创造性的生成式 AI 应用语义缓存几乎没有用处。但对于检索增强生成RAG实现、客户支持机器人和内部知识库等场景用户会用一千种不同的方式问那 20 个相同的问题它是你能采用的最有效的成本降低手段。提示缓存语义缓存存储的是给定意图的响应而提示缓存存储的是为问题提供上下文所需的数据。当用户输入提示时它会被发送到生成式 AI 端点。但你的应用程序无需反复从 RAG 管道、数据库或其他来源收集并发送构建提示所需的大量上下文信息因为这些信息已经预先加载到上下文缓存中。模型只需将新问题应用到缓存的数据上从而大幅降低延迟和输入成本。提示缓存背后的核心思想是AI 引擎本身会为传入的提示保留相关的上下文数据。通过这种方式缓存的令牌与原始输入令牌相比能获得大幅折扣50% 到 90%。但不同提供商处理提示缓存的细节有所不同。对于 OpenAI提示缓存是自动的但需要注意应用程序如何使用端点才能充分利用它。OpenAI 设定了 1024 个令牌的最低阈值。更重要的是它要求从令牌零开始进行精确的逐字节前缀匹配。如果你在系统指令的最顶部注入一个动态变量如时间戳或用户 ID就会立即使缓存失效并为后续的每个令牌支付全额费用。其他一些提供商如 Anthropic Claude 和 Google Gemini使用显式缓存。你必须有意地将缓存机制设计到架构中要么通过调用专用的 API 端点上传具有指定生存时间的静态文档上下文数据要么在 JSON 有效负载中注入严格的缓存控制断点。显式缓存通常需要预先支付“写入溢价”但能让你确保大量的 RAG 数据在内存中存活数小时而非数分钟。提示规范仅仅因为模型能够消耗大量令牌并不意味着就应该这么做。如今的模型一次提示就能摄入 100 万到 200 万个令牌这让人们忍不住将整个 PDF、整个代码库或过去三年的日志一股脑地塞进有效负载让大语言模型去处理试图强行解决用例问题。这是云成本管理上的一个大错误。你要为发送的每一个令牌付费。此外从工程角度来看填充上下文窗口会遇到实际的“中间模糊”问题即“上下文衰减”模型在处理内容的中间部分时会失去准确性。随着有效负载的增加性能和准确性都会受到影响。解决办法是严格执行 RAG 筛选策略。简单的 RAG 实现可能会从向量数据库中提取前 20 个结果然后盲目地将它们拼接成提示。架构成熟度要求在这些令牌进入昂贵的 LLM 之前进行更严格的过滤。这就是重排序发挥关键作用的地方。重排序会对编译后的提示上下文进行处理确保在其进入 LLM 之前进行高效的结构化处理。你不再将原始搜索结果直接发送到主模型而是引入一个小型、高效的交叉编码器如 Cohere Rerank 或开源的 BGE 模型。你在低成本的向量数据库中广泛搜索获取 50 个潜在匹配项然后将它们传递给重排序器根据用户的具体提示对它们的实际相关性进行评分。重排序器会无情地剔除无关内容让你只将最相关的三四个片段传递给昂贵的前沿模型。你用一个庞大、昂贵的 LLM 上下文有效负载换取了一个小型、低成本的重排序步骤。从架构层面来看这几乎总是一个巨大的胜利。虽然交叉编码器可能会给管道增加 100 毫秒的延迟但它通常能将提示令牌数量削减 80% 以上同时提高最终生成结果的准确性。在生成式 AI 开支管理中让大语言模型读取更少的内容是最有效的策略之一。响应约束默认情况下大语言模型礼貌、健谈且冗长。如果你通过 API 请求数据它可能会以“当然这是你请求的 JSON”开头以“如果你还有其他需求请告诉我”结尾。在 Web 界面中这很可爱但在应用程序的 API 架构中这就是云成本管理上的一个漏洞。生成令牌输出的价格几乎普遍是提示令牌输入的 3 到 5 倍。每一句客套话都在消耗你最昂贵的资源。控制大语言模型的响应需要在 API 层面严格执行规则。首先必须将 max_tokens 作为一个严格的断路器以防止出现无限生成循环而不是作为一个格式化工具。依靠 max_tokens 来缩短答案通常只会导致输出被截断、无法解析的 JSON。其次使用停止序列stop_words。如果你的模型只需要输出一个 SQL 查询设置一个 Markdown 结束标签“”或“Explanation:”作为停止序列能迫使模型在完成计算工作的瞬间停止。现代 API 还提供结构化输出或严格 JSON 模式它能迫使模型遵循你定义的严格模式。结合零容忍的系统提示“仅输出有效的 JSON。省略所有对话文本和客套话。否则将导致系统故障”你可以让大语言模型表现得像一个传统的 API 端点而不是一个聊天机器人。这里的架构平衡在于要避免通过严格限制输入来降低模型的推理能力。大语言模型没有内部工作内存它们通过迭代输出令牌来“思考”。如果你强迫一个模型解决一个复杂的逻辑问题并直接输出一个布尔值真或假而不给它推理的空间其准确性将会大幅下降。云成本管理的目标并不是强制减少用词而是确保每个昂贵的输出令牌都在进行实际的计算工作如思维链推理。如何有效地使用生成式 AI 来满足用户需求是第一场战斗第二场战斗则是确保财务状况不会破坏前期的努力。这里讨论的五个关键方法应该能让你有足够的能力确保工程和成本控制协同工作。
返回列表