你有没有遇到过这种情况:让AI Agent去跑一个任务,它开始调用工具、读文件、调接口,看着挺勤快。结果一回头发现,Token烧了上万,还调了一个根本没授权的接口。
Agent越自主,越容易失控。今天分享3招,给Agent上"预算约束"。让它能干正事,又不会乱来。全部是可落地的代码片段,拿来就能用。
第一招:Token预算——设个硬上限
Agent的"花销"主要看Token。每次循环都要塞历史上下文进去,越聊越长,成本滚雪球。
最直接的约束:给整个任务设一个Token上限,超了就停。
BUDGET = 50_000 # 整个任务最多允许的 token 数
def run_agent(task, budget=BUDGET):
used = 0
while not done:
prompt_tokens = estimate_tokens(history)
if used + prompt_tokens > budget:
return "预算用完,已停止" # 硬刹车
used += prompt_tokens
step = llm_call(history)
history.append(step)
关键就一句:每次循环前先算账,超了立刻停。别等跑完才发现超支。
第二招:工具白名单——只准调该调的
Agent能调多少工具,决定了它能干多少事,也决定了它能闯多少祸。
别让它全量访问。按任务需要,给它一份白名单:
ALLOWED = ["read_file", "git_status", "run_tests"]
def can_call(tool, *args):
if tool not in ALLOWED:
log.warn(f"拒绝调用未授权工具: {tool}")
return False
return True
写个最小清单。跑单元测试就开测试相关工具,别把"删数据库"这种也放进来。工具越少,越安全。
第三招:成本核算——把钱算明白
预算是Token,但老板看的是钱。把Token折算成成本,设定单任务成本上限。
不同模型单价不同。先用在线工具把单价算清楚。navbox的AI API成本计算器和AI Token计算器能帮你估算单次调用要花多少。
PRICE = {"gpt": 0.003, "claude": 0.005} # 每 1k token 单价
def cost(toks, model):
return toks * PRICE[model] / 1000
# 任务预算 0.2 元,超了就停
if cost(used, model) > 0.2:
stop("成本超出预算")
落地顺序
- 先定Token预算,这是最硬的约束
- 再收窄工具白名单,只开必要的
- 最后把成本换算进来,设单任务上限
三步走完,Agent就从一个"放飞的实习生",变成"有预算、有权限、有考核"的正式工。
你给Agent设的预算,够它跑完最贵的那个任务吗?