每天让 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

  1. 变化检测 — Python 轮询查 RSS/DB/API 变化
  2. 更新周期判断 — 变化了但没到更新时间,跳过
  3. 查询条件判断 — 到了更新时间但不满足触发条件,跳过

三级漏斗叠加,对于新闻监控、股价告警、日报生成等场景,实际触发 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 成本优化里立竿见影的一步。

评论区

0 条评论

登录后可评论。

Prompt 工程 398 阅读