AIHOT成本控制拆解:付费回执复用、预算熔断与逐步换模型,不再刷爆账单
【免费下载链接】AIHOT一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。项目地址: https://gitcode.com/gh_mirrors/ai/AIHOT
AIHOT 是一个自己找热点、自己写日报的开源网站框架。它每天要调用大模型做摘要、评分、聚簇,还要付费抓取正文,账单很容易失控。AIHOT 用三道防线做成本控制:付费回执复用(同一请求不重复付费)、预算熔断(三级限额防调用爆量)、逐步换模型(先验证再切换),帮你把 LLM API 费用稳稳压在预算内。
📍 先看账单从哪来
AIHOT 的采集环节(RSS、网页、X、公众号)本身不花钱,但后面的理解环节全靠付费接口:
| 成本来源 | 用途 | 计费方式 |
|---|---|---|
| 大模型 | 摘要、两评分、写标题、聚簇 | 按 token |
| Jina | 正文抓取兜底 | 按请求 |
| SocialData | X 搜索 | 按请求 |
| Dajiala | 公众号列表与正文 | 按请求 |
好消息是:所有这些付费调用都强制走同一个成本控制层,没有任何"旁路"。
🧾 第一道防线:回执复用,同一请求绝不付两次钱
核心文件是 providers/receipts.ts,入口函数 paidRequest() 给每个付费请求生成一个逻辑回执:
- 逻辑键 = 服务 + 用途 + 模型 + 输入内容的哈希。输入一字不变,键就一字不变;
- 发送前先查库:已有"收到/完成"的回执?直接复用响应,零成本;
- 响应一到就先落库、再写业务——即使随后崩溃,答案也不会丢;
- 请求发出去后超时或崩溃,结果标记为"未知",绝不自动重发。恢复任务 autoReleaseUnknownReceipts() 每 10 分钟检查一次,未知回执超过 30 分钟才自动放行一次——一次丢失的答案,最多少收一次重复付费。
不同结果对应不同处理,这正是省钱的关键:
| 回执状态 | 含义 | 是否再付费 |
|---|---|---|
| received / completed | 已收到响应 | ❌ 直接复用 |
| pending | 请求在途 | 等待,不重发 |
| unknown | 结果未知 | 30 分钟后自动放行一次 |
| failed | 供应商明确拒绝(不会计费) | ✅ 允许新尝试 |
| 响应无法解析 | 模型"说错话" | ✅ 标记后重试 |
表结构见 receipts 建表 与 receipt_attempts 迁移。每一次实际发出的请求都记一条 attempt,重试也算数——重试无法绕过任何一道闸门。
💣 第二道防线:预算熔断,量一爆就自动刹车
budgets表为每个服务配了三档限额:每分钟 / 每小时 / 每天,把任意一档设为0 就等于一键停服。
-- 内置默认值(迁移时写入,后台可随时改) ('jina', 5, 50, 300) -- 正文兜底(按请求计费) ('socialdata', 10, 100, 1000) -- X 搜索(按请求计费) ('dajiala', 5, 60, 500) -- 公众号列表与正文 ('zhipu', 100, 2000, 20000) -- 模型调用熔断 ('llm', 300, 6000, 40000) -- 默认模型(所有步骤共用)默认值来自 0022_receipt_attempts_budgets.sql 和 0036_open_source_defaults.sql。
熔断检查在 checkBudget() 中执行,有两个细节值得注意:
- 按 attempt 计数——包括重试,死循环重试也逃不过熔断;
- advisory lock 串行化——多 worker 并发时不会集体冲破限额。
超限时抛出BudgetExceededError并携带retryAfterSeconds,上层任务可以"稍后再来",而不是硬扛着刷爆账单。运维在后台改限额同样留痕:listBudgets() / updateBudget() 记录修改前后值与原因。
🎛️ 第三道防线:逐步换模型,先验证质量再切
成本控制不是只看"花了多少",还要看"哪个模型够用"。
AIHOT 内置多组模型预设(default读环境变量,另有一组具名预设),见 MODELS:
glm-5.3-flash/deepseek-flash/qwen3.7-flash等:便宜档,短结构任务关掉推理更快更省;qwen3-vl-flash:视觉专用,只在做图时出场;- 每个能力(摘要、评分、写标题、聚簇……)可独立选模型——贵的留给评分,便宜的跑批量摘要,混用才是常态。
真正"逐步"的部分在后台「模型与评测」页(admin/models.ts,界面见 models.tsx):
- 看数据:近 7 天每个能力的调用量、成功率、延迟 p50/p95、token 消耗与实际花费,一屏对比每个模型的真实成本;
- 跑基准:SelectBench 让多个模型在同一批样本上盲测,用同一把尺子比质量;
- 切一个能力:切换动作写入审计日志,且只影响新任务,旧内容不受影响;
- 观察再扩大:切完先跑几天,数据没问题再推广到其他能力;出问题就再切回来——反正每次切换都有历史记录可查。
✅ 总结:三道防线各管一件事
| 防线 | 管什么 | 一句话 |
|---|---|---|
| 回执复用 | 重复付费 | 同输入同模型,响应存在就不再花钱 |
| 预算熔断 | 爆量 | 分钟/小时/天三级刹车,0 即停服 |
| 逐步换模型 | 单价 | 数据 + 基准验证后按能力切换,随时可回滚 |
对新手来说,这套设计最值得借鉴的是:成本控制不是事后对账,而是把"每次付费"都变成一次有记录、可复用、会被拦截的调用。把 providers/receipts.ts 和 budgets 迁移 读一遍,你就能给自己的 AI 项目装上同样的三道闸门。
【免费下载链接】AIHOT一个自己找热点、自己写日报的网站框架。把信源和精选标准换成你的,它就是你的行业热点站。项目地址: https://gitcode.com/gh_mirrors/ai/AIHOT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考