当 AI Agent 自主调用工具、运行循环、生成结果时,开发者最容易忽视的不是模型能力,而是费用边界。Dev.to 上一篇文章提出,Agent 的预算上限不应只呈现为仪表盘里的数字,而应该写进工具调用层:一旦超出预算,系统就返回一次类似 403 的调用拒绝,而不是等到账单出现后再复盘。
仪表盘拦不住自主运行的 Agent
文章提到一个扫描 DN42 的 Agent:它没有崩溃,也没有产生明显幻觉,只是持续执行循环、获取结果、调整参数、再次运行。问题在于,它的运行环境从未把“花钱”作为约束传给模型。
成本信息如果只放在 dashboard 中,本质上仍是给人看的运营报表。Agent 不会主动读取面板,也不会把图表当作行为边界。即使开发者把余额写进系统提示,也只是提示,不是硬性约束。对于会反复调用外部工具、产生请求和算力消耗的 Agent 来说,这种事后统计无法阻止费用持续增加。
预算检查应放进工具调用包装层
很多团队会把预算检查放在 Agent 主循环里:每一步执行前判断余额,余额不足就停止。文章认为,这种做法在简单流程中有效,但一旦系统引入子 Agent、并行工具调用或自动重试策略,就会变得脆弱。10 个并行子代理可能同时读到“余额仍大于 0”,随后一起执行,最终把上限突破 10 倍。
更稳妥的位置是工具包装层,也就是所有外部副作用共同经过的入口。无论是 HTTP 请求、Shell 命令,还是模型调用,只要可能产生费用,都应通过同一包装层执行。如果某个工具不经过这层,就不应该出现在 Agent 的工具列表中。
素材给出的示例逻辑包含几个步骤:
- 在调用前,根据开发者维护的价格表估算成本。
- 先尝试预留预算,而不是只读取余额。
- 如果预算不足,直接返回不可重试的错误。
- 调用完成后,再用实际成本结算。
估算不需要完全精确。文章给出的形式包括 requests × unit_price、tokens × price_per_1k,或 seconds × gpu_hourly / 3600。关键不是精确到每一分钱,而是让调用前存在一个可执行的数字。
这也解释了为什么单一的全局“tokens spent”指标并不足够。以 DN42 扫描任务为例,费用来源可能主要是请求数量和带宽,而不是生成 token。不同工具消耗的资源单位不同,一个统一仪表很难覆盖全部成本来源。
预算错误必须像 403,而不是普通报错
文章特别强调错误形态的重要性。Agent 的默认重试逻辑通常会把工具错误视为临时故障,因为网络抖动很常见。但预算不足不是临时故障。如果这类错误看起来可以重试,Agent 可能反复尝试,甚至消耗更多 token 去解释和重试,最终形成“重试风暴”。
因此,预算错误应当更像 HTTP 403:权限或条件不满足,调用被明确拒绝。素材中的错误信息包含几个关键表达:
- 预算已耗尽。
- 该错误是终态,不要重试。
- 总结已有结果并停止。
这不仅是给程序的信号,也是给模型的明确出口。没有优雅停止路径的 Agent,可能会继续尝试其他方式,而任何无意义的尝试都会继续产生成本。
余额可提示,但裁判不能交给模型
硬约束之外,文章也建议把剩余预算写进任务上下文,例如在每一轮提示中告诉 Agent “You have $3.40 left for this task”。当 Agent 能看到余额时,它有时会主动选择更便宜的路径,比如减少页面数量、使用更小模型或调用缓存结果。
但提示中的数字只能作为规划输入,不能作为账户事实。模型仍会低估成本:它不知道出口流量定价,不知道某个端点按请求计费,也不理解一次调用很便宜、一千次调用可能非常昂贵。因此,最终检查必须由开发者控制的包装层完成,而不是依赖模型自己的算术。
文章还建议,预算上限不应高到触发时像事故。如果每次触顶都令人紧张,说明上限设置过高。更合理的做法是设定单任务上限,而不只是每日总额。每日预算可能让一个失控任务在早上就耗尽全部额度,随后开发者不得不排查看似神秘的故障,实际上只是护栏正常工作。
同时,开发者应记录每一次工具调用的参数和成本。当问题表现为“昨天它做了奇怪的事”时,只有完整的调用日志能帮助定位。
这篇文章的价值在于,它把 Agent 成本问题从“模型是否理解预算”转向“系统是否允许超支”。在 Agent 越来越频繁地调用外部服务的阶段,可靠性并不完全来自更强的推理能力,也来自更清晰的边界。成本控制的成熟做法,不是让模型学会节俭,而是让它无法调用一笔不存在的预算。当预算上限成为运行时规则,仪表盘才从紧急刹车变成事后观察。
原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/ai-agent-fei-yong-shi-kong-de-xie-fa-ba-yu-suan-shang-xian