我如何在不改动任何代码的情况下将我的 AI 应用成本削减 52%

发布: (2026年1月7日 GMT+8 13:33)
10 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的文章正文内容,我将为您翻译成简体中文并保留原有的格式、Markdown 语法以及技术术语。谢谢!

问题:对实际费用缺乏可见性

  • 技术栈: Next.js 前端 → Node 后端 → 直接调用 OpenAI chat/completions
  • 痛点: 我可以看到 OpenAI 的总账单和请求次数,但我 不知道哪些功能导致了费用
    • 是邮件摘要吗?
    • 是建议回复生成吗?
    • 是对每条消息进行情感分析吗?

没有每个功能的费用数据,我无法对优化进行优先级排序。

我最初尝试的办法(未成功)

尝试我的做法结果
1. 手动日志记录在每次 LLM 调用周围添加日志,以跟踪 token 使用情况。漏掉了输出 token,流式响应直到结束才暴露 token 数量 → 数据不可靠。
2. 使用更便宜的模型将“简单”任务从 GPT‑4 切换到 GPT‑3.5‑Turbo。仅约 15 % 的节省;质量明显下降,用户投诉。
3. 提示词优化缩短提示词,删除示例,精简系统消息。大约 10 % 的 token 减少,但导致模型误解指令的 bug。工程投入不值得。

然后我找到了 Bifrost

我在寻找一个 LLM 可观测性工具时,看到 Bifrost 被描述为 “LLM 网关”。我觉得它功能有点过剩——我的需求只是成本可视化——但它的部署看起来很简单,于是我就尝试了一下。

单行代码更改

之前

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

之后

const openai = new OpenAI({
  baseURL: "http://localhost:8080/openai",
  apiKey: "bifrost-key"
});

Bifrost 现在位于我的应用和 OpenAI 之间;其余代码保持不变。

我在第一周学到的东西

Bifrost 的仪表盘显示 每个端点、每位用户、每个模型 的成本。最终得到的数据令人震惊:

  • Email summarization = 61 % of total costs – it ran on every incoming email, even on one‑sentence queries where GPT‑4 was overkill.
  • One customer accounted for 18 % of the monthly bill – they were hammering the API; I had no rate‑limiting in place.
  • Sentiment analysis was both useless and expensive – the score was never used. Removing the feature saved ≈ $800/mo.

我所做的更改(以及结果)

  1. 将邮件摘要切换至 GPT‑3.5‑Turbo

    • 仅针对字数 ≤ 100 词的邮件;更长的邮件仍使用 GPT‑4。
    • 此功能的成本下降 42 %,且质量没有下降。
  2. 新增按客户限流

    • Bifrost 为每个虚拟密钥提供限流。
    • 创建了分层密钥(免费、付费、企业)。
    • 那个占用预算 18 % 的“免费层”客户现在被限制为 100 次请求/天;他们已升级至付费计划。
  3. 启用语义缓存

    • Bifrost 基于向量相似度缓存请求,即使表述不同,只要语义相同也能命中缓存。
    • 示例缓存命中:
      • “How do I reset my password?”
      • “I forgot my password, what should I do?”
      • “Can’t log in, need password reset”
    • 实现了 ≈ 47 % 的缓存命中率,几乎消除了半数的 LLM 调用。
  4. 设置成本警报

    • 为每个密钥设定预算上限,并在月预算的 80 % 时触发警报。
    • 现在我能在成本激增的数小时内收到警告。

60 天后的结果

期间LLM 成本
第1个月(pre‑Bifrost)$6,200
第2个月(post‑changes)$2,950

总体降幅: ≈ 52 %,功能和质量保持不变,仅更改了一行端点。

节省细目

来源约每月节省
语义缓存$1,800
更智能的模型选择$900
限制滥用使用的速率$400
移除无用功能(情感)$800

Source:

我未预料到的次要收益

  • 自动故障转移 – Bifrost 可以路由到多个提供商。我添加了 Anthropic(Claude)作为备份;在上个月 OpenAI 发生 4 小时宕机期间,流量自动切换到 Claude,用户毫无感知。
  • 统一可观测性 – 所有 LLM 流量(包括未来的提供商)现在都在同一个仪表盘中可见,简化了后续的扩展决策。

TL;DR

一个简单的“网关”层(Bifrost)让我获得了所需的可视性,以便:

  1. 识别浪费的功能。
  2. 应用模型层面的成本优化。
  3. 强制执行每位客户的使用上限。
  4. 利用语义缓存。

结果:在 LLM 开支上 每月节省 3.2 千美元,利润更健康,可靠性更佳——只需一次代码改动。

– 我查看了仪表盘,看到流量已切换。

在使用 Bifrost 之前,这次宕机将意味着我的产品 整整 4 小时 完全不可用。

更好的调试

Bifrost 中的请求日志会显示每次调用的完整提示、响应、令牌计数和延迟。当用户报告问题时,我可以搜索他们的对话,准确查看 LLM 收到的内容以及返回的内容。

这远比我之前通过在应用日志中 grep 并希望记录了正确信息的做法要好得多。


无供应商锁定

因为 Bifrost 抽象了提供商,我可以在不更改代码的情况下测试不同的模型。我已经进行实验,将 10 % 的流量路由到 Claude,以比较质量。如果 OpenAI 的定价发生变化,我可以在配置中切换提供商——而不是在代码库中更改。

我会做的不同之处

如果让我重新开始,我会在第 1 天就部署 Bifrost,而不是等到六个月后。

  • 仅仅是可见性就已经值得。
  • 即使你还没有在优化成本,了解钱花在哪里也能帮助你做出更好的产品决策。

我还会立即启用语义缓存。当前我看到的 47 % 缓存命中率意味着我在前六个月的重复请求上浪费了 ≈ $3,000


技术设置(给好奇的你)

  • 基础设施 – Bifrost 自托管在 t3.small EC2 实例上($15 / 月)。
  • 负载 – 每月处理 15 000 请求,零问题。
  • 内存 – 大约 120 MB。
  • 语义缓存 – 使用 Weaviate 进行向量存储(免费自托管版)。

LLM 网关的总基础设施成本:$15 / 月

成本节省在第一周就已收回。

这仅仅是为了成本优化吗?

不。这段关于成本的故事吸引了我,但 Bifrost 成为了我的 LLM 基础设施层。它能够处理:

功能描述
路由大多数请求使用 OpenAI,较长上下文使用 Claude
缓存语义相似度
速率限制按客户层级
故障转移自动备份到 Claude
可观测性请求日志、成本跟踪、延迟
治理预算限制、使用警报

全部实现而无需在我的应用代码中增加复杂性。我的后端仍然只调用 openai.chat.completions.create(),其他一切都透明地完成。


结论

我在不更改产品、不降低质量,也不花数周时间进行优化的情况下,将 AI 成本 削减了一半

关键在于能够看到实际昂贵的部分,然后进行有针对性的改动,而不是盲目猜测。

如果你在生产环境中运行基于 LLM 的功能,却没有对每个端点进行成本跟踪,那就是在盲目飞行。Bifrost 为我提供了停止浪费金钱所需的数据。


设置

  • GitHub:
  • Docs:

大约 10 分钟 就能在本地启动运行。

对所有使用 LLM 的开发者来说:在需要之前就加入可观测性。等账单来了,未来的你会感谢现在的决定。

Back to Blog

相关文章

阅读更多 »