Frugon:找出可被更便宜模型替代的LLM调用
速览
Frugon是一款MIT许可的本地工具,能分析LLM调用并识别那些可由成本更低的模型处理的部分。它帮助开发者在保证输出质量的同时降低API费用,且所有分析都在本地运行,保护隐私。适合用于优化AI应用的推理成本。
AI 深度解读
背景
随着大型语言模型(LLM)在各行各业的广泛应用,API 调用成本成为开发团队和独立开发者越来越沉重的负担。许多团队发现,每月 LLM 账单迅速膨胀,但其中相当一部分请求并不需要调用最昂贵、最强大的模型。然而,手动分析日志、判断哪些调用可以路由到更便宜的模型非常繁琐,且容易遗漏。现有方案要么依赖第三方平台导致数据外泄,要么缺乏本地化、细粒度的成本分析能力。
Frugon 正是在这一背景下诞生的——一个完全本地、开源、免费的 LLM 成本分析工具,旨在帮助用户在自己的机器上精确找出哪些 LLM 调用可以使用更便宜的模型替代,从而大幅削减开支。
核心内容
Frugon 是一个 MIT 许可的开源项目,核心功能是分析你的 LLM 调用日志,给出路线建议——将哪些比例的调用切换到更便宜的模型,同时保持可接受的质量。它采用“本地优先”设计,你的数据从不离开你的机器,API 密钥直接发送给你自己的提供商,Frugon 本身不会接收任何数据。
安装与使用
Frugon 可通过 uvx 一次性运行(无需安装),也可通过 pipx 或 pip 永久安装:
# one-shot (no install)
uvx frugon analyze ./logs.jsonl
# permanent install
pipx install frugon
frugon analyze ./logs.jsonl
# for --measure (optional): 通过你自己的提供商密钥采样真实提示,评估候选模型质量
pip install 'frugon[measure]'
frugon analyze ./logs.jsonl --measure
如果还没有日志,可用 frugon analyze --demo 试用内置的大约 56,100 条调用样本。
捕获日志的方式
方式一:使用 Frugon 自带的本地 HTTP 代理 frugon capture,它位于你的应用和 LLM 提供商之间,原样转发所有请求并保存为 JSONL 格式的一行记录。该代理在 localhost 上不增加延迟,且不会向任何 Frugon 端点发起调用。
# 启动代理(默认端口 8787,输出文件 capture.jsonl)
frugon capture --out ./logs.jsonl
# 将你的应用 base URL 指向代理而不是 api.openai.com
OPENAI_BASE_URL=http://127.0.0.1:8787 your-app # bash / zsh
$env:OPENAI_BASE_URL="http://127.0.0.1:8787"; your-app # PowerShell (Windows)
# 或在代码中: client = OpenAI(base_url="http://127.0.0.1:8787/v1")
代理支持 --port、--out、--upstream(覆盖转发目标)、--verbose(每捕获一行打印一条,方便验证)、--proxy(允许通过上游代理路由——默认忽略环境变量 HTTP_PROXY / HTTPS_PROXY,避免 API 密钥经过第三方代理)。
方式二:如果你已经通过中间件或 SDK 回调捕获了日志,只需按以下格式将每个请求/响应写入一行 JSON:
{
"model": "gpt-4-turbo",
"request": {
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarise this document: ..."}
]
},
"response": {
"choices": [{"message": {"content": "Here is the summary: ..."}}]
},
"usage": {
"prompt_tokens": 312,
"completion_tokens": 84
},
"timestamp": "2024-11-01T14:22:01Z"
}
usage.prompt_tokens / usage.completion_tokens 优先使用,缺失时 Frugon 会用自己的分词器回退计算。timestamp 为可选字段,启用后可基于实际观察的时间跨度投影成本。model 是必需字段,其他字段缺失会优雅降级。
分析结果与路由推荐
运行 frugon analyze ./logs.jsonl 后,Frugon 会输出一个表格报告,例如 demo 运行结果(使用 --candidates claude-sonnet-4-5,gpt-4.1,claude-haiku-4-5,gemini-2.5-flash,deepseek-v4-flash):
┌─ frugon · cost analysis ────────────────────────────────────────────────────┐
│ Analyzed 56,100 calls · baseline gpt-5.5 (your current model) │
│ Current spend $549.46 / mo │
│ │
│ Route 36,100 easy calls (64.4%) → deepseek-v4-flash within │
│ tolerance │
│ Keep 10,000 hard calls (17.8%) → gpt-5.5 │
│ Keep 10,000 already on deepseek-v4-flash (17.8%) already optimal │
│ — no action │
│ │
│ New spend $343.91 / mo │
│ │
│ SAVING $205.55 / mo · 37.4% lower │
└─────────────────────────────────────────────────────────────────────────────┘
Candidates considered
claude-sonnet-4-5 $452.23 / mo 17.7% lower Strong considered
gpt-4.1 $405.89 / mo 26.1% lower Capable considered
claude-haiku-4-5 $377.82 / mo 31.2% lower Capable considered
gemini-2.5-flash $356.35 / mo 35.1% lower Strong considered
deepseek-v4-flash $343.91 / mo 37.4% lower Strong recommended
报告显示了当前花费、推荐方案(将哪些比例的“简单”调用路由到更便宜的模型,哪些“困难”调用保留原模型)、预期节省金额。每个候选模型都列出了在与基线模型相同的质量保持拆分(易调用路由到候选,难调用保留基线)下的新花费,节省最大且质量等级较高者为推荐。若需要确认真实质量,可运行 --measure --judge 对每个候选模型评分。
其他关键参数与功能
--report savings.html或.md:生成干净、可分享的报告文件,方便放入 PR、Slack 或预算评审。frugon models:列出可用作候选的模型名称(可加过滤子串,如frugon models gpt-4o)。--verbose:显示更详细的信息,如完全切换到 cheapest 模型的上限节省。- 所有计算完全本地执行,即使超过 10 万条记录也流畅。Demo 数据(~56,100 条)只需几秒完成定价。超过 20 万条时可能稍慢,但有实时进度条。
- 价格与质量数据同步自 LiteLLM 注册表和 LMArena,可通过
frugon update更新至最新。
适用场景:
- AI 代理构建者:GPT-4o 代理成本高,大部分简单跳转不需要它们。
- AI 开发团队:月度 LLM 账单是真实的,路由工具能在几天内回本。
- RAG 与支持:检索+重排序成本低,最终生成答案不一定需要 Opus。
- 数据 ETL 流水线:批量提取高度重复,小型模型足以胜任。
- 独立黑客:每省下一美元就是多一美元的跑道。
注意事项:
- 质量评估是离线估算,运行
--measure可验证真实输出。 - 推理模型的质量等级对应默认/典型推理投入(
reasoning effort),改变 effort 只会影响思考 token 数量,不影响每 token 价格,因此不影响上图所示价格。 - Frugon 基于 RouteLLM(LMSYS)的公开研究,结果完全取决于你的实际日志,绝不夸大节省。
关键要点
- 完全本地化:Frugon 在用户自己的机器上处理所有分析,
