每天让 AI 去查数据,但大多数时间它只是在空跑——这个「守门员」机制让我把 token 账单降到了十分之一
我以前跑 20 个 AI 自动化任务,每小时都要调 LLM 查数据。一个月下来 token 账单是同事的 10 倍。后来我发现:大多数时候,数据根本没变化,AI 每次都在查「有没有新内容」——而答案是没有。
守门员(Gatekeeper)机制
核心思路很简单:Python 脚本先检查数据源是否有变化,只有变化了才触发 LLM 调用,否则直接跳过。
最简单的实现
用 MD5 或时间戳记录上次运行状态,下次运行时先比对,有变化才调 API:
import hashlib
import os
from datetime import datetime
STATE_FILE = '/tmp/monitor_state.json'
def has_changed(new_data: str) -> bool:
if not os.path.exists(STATE_FILE):
return True
with open(STATE_FILE) as f:
old_hash = f.read().strip()
new_hash = hashlib.md5(new_data.encode()).hexdigest()
return new_hash != old_hash
def save_state(data: str):
with open(STATE_FILE, 'w') as f:
f.write(hashlib.md5(data.encode()).hexdigest())
# 主循环
new_data = fetch_external_data() # 轻量查询,不调 LLM
if has_changed(new_data):
result = call_llm(new_data) # 只有变化了才调 LLM
save_state(new_data)
else:
print('No changes, skipping LLM call')
三级漏斗
进阶做法:三层全过才调 LLM
- 变化检测 — Python 轮询查 RSS/DB/API 变化
- 更新周期判断 — 变化了但没到更新时间,跳过
- 查询条件判断 — 到了更新时间但不满足触发条件,跳过
三级漏斗叠加,对于新闻监控、股价告警、日报生成等场景,实际触发 LLM 的概率可以从 100% 降到 10-20%。
GitHub Actions cron 场景的账
我之前 20 个 cron job 每小时跑一次,全调 LLM 查数据,月账单 800 美元。加上守门员之后,每月触发 LLM 的次数从 20×24×30=14400 次降到 300-500 次,账单降到 60-80 美元。节省 90%。
守门员脚本本身几乎零成本——一个简单的 HTTP GET 查 etag 或 last-modified,10ms 级别,不用花钱。
什么场景适合?
适合:数据监控、日报生成、邮件摘要、社交媒体扫描、股价告警。
不适合:实时对话、交互式任务、需要每次都重新理解上下文的生产任务。守门员节省的是「被动查询」场景的 token,主动对话不在此列。
下一步怎么走?
如果你现在有 cron + LLM 的组合,先算一下「实际变化次数/调用次数」的比值。如果 > 20%,加守门员;如果 < 5%,说明你的触发条件本身已经够严格,不需要再加这层。
这个机制本质是把 LLM 从「每次都跑」变成「按需跑」,对于自动化程度高的团队,这是 token 成本优化里立竿见影的一步。
评论区
登录后可评论。