资讯动态

ai-engineering-from-scratch 如何为自主智能体配置成本预算与迭代上限以防止失控消费?

发布时间:2026/9/12 13:52:25 来源:尧图企业网站定制
ai-engineering-from-scratch 如何为自主智能体配置成本预算与迭代上限以防止失控消费【免费下载链接】ai-engineering-from-scratchLearn it. Build it. Ship it for others.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-from-scratch当你让一个自主智能体agent长时间无人值守地跑任务时每一轮推理、每一次工具调用都在真实地产生 LLM 账单。智能体一旦陷入重试或轮询循环账单会持续累积而没有任何机制叫停它——项目文档把这类失败模式称为 Denial of Wallet。ai-engineering-from-scratch 仓库的 Phase 15 第 13 课 成本预算、迭代上限与成本治理器 给出了对应解法用一套分层限制per-request、per-session、velocity、per-day/month替代只设一个月度上限的单一思路并附带一个可直接运行的 Python 模拟器和一个上线前的预算审计清单。本文的操作路径是先理解按时间尺度分层的限制栈再运行仓库自带的模拟器观察各层限制的触发顺序然后按文档给出的参数面含 Claude Code Agent SDK 的max_turns、max_budget_usd配置你的智能体最后用审计清单逐项核对。前置条件只需要 Python 3模拟器为纯 stdlib无需安装依赖和一份仓库代码课程文档标注的前置课为 Phase 15 · 10权限模式与 Phase 15 · 12持久执行。为什么单一上限不够先确定要配哪几层课程文档列出的成本治理器cost-governor栈共 12 层其中与配置预算和上限直接相关的是max_tokensper request限制单次补全的输出规模防止任何一次调用无界生成。Per-task token budget整个任务不超过 N tokens到上限硬停。Per-task dollar budget以货币为单位的任务预算Claude Code 中对应max_budget_usd。Per-tool call cap单个工具的调用次数上限例如WebFetch不超过 N 次、shell_exec不超过 N 次。Iteration capmax_turns整个 agent 循环的迭代次数上限防止无限推理循环。Per-minute / per-hour / per-day / per-month cap滚动窗口上限在不同时间尺度上捕获泄漏。Financial velocity limit短窗口消费速率上限文档示例为10 分钟内花费超过 $50 就切断访问用于在月度上限触发之前抓住循环型烧钱。Tiered model routing默认走小模型仅当分类器判断任务需要时才升级到更大模型。Prompt caching系统提示与稳定上下文存入 provider 缓存重发的 token 成本接近零。Context windowing压缩/摘要使活动上下文低于阈值直接降低 token 成本。HITL checkpoints已知昂贵动作长工具调用、大下载、模型升级执行前要求人工确认。Kill switch on budget breach任何一层上限触发时中止会话上限被记录重新启用需走独立路径。文档同时给出了四层失败模式与捕获层级的对应关系这是配置时的选型依据Runaway loop智能体卡进 5 秒级重试循环→ velocity limit 捕获Slow leak每个任务实际工作量约为预期的 2 倍→ daily cap 捕获Bad release新版本 token 用量翻 5 倍→ weekly / monthly cap 捕获Legitimate surge真实需求上涨而非 bug→ hour / day cap 配合清晰日志捕获。文档中还引用了 Microsoft Agent Governance Toolkit 记录的一个真实案例某电商 agent 上线 order-tracking 技能后月成本从 $1,200 涨到 $4,800原因是新工具让 agent 在每个会话里轮询订单状态而系统没有循环检测、没有 per-tool 上限、没有周环比增长告警。修复方式是 per-tool cap 加 daily-growth 告警。文档由此总结出一条模板每一个新工具面都是一个新的潜在循环每个新工具都需要自己的上限和自己的告警。运行仓库自带的分层限流模拟器模拟器位于 code/main.py纯 Python stdlib模拟一个 agent 在第 30 轮后滑入轮询循环loop turn 消耗 8,000 tokens正常 turn 为 2,500 tokens并对比三种配置no caps不做限制monthly cap only只设月度上限layered stackper-request iteration velocity session monthly 全部分层启用。从仓库根目录执行命令形式参照 Phase 15 README 中给出的运行模式python3 phases/15-autonomous-systems/13-cost-governors/code/main.py每次运行输出一行形如配置名 turns 5 tokens 8,000 dollars$ 4.80 stopped_byvelocity_limit四个字段分别是执行的轮数、累计 tokens、累计美元、以及最先触发的限制max_turns/max_budget_usd/velocity_limit/monthly_cap/ran out of simulated turns。stopped_by字段就是判断哪一层先兜住的依据读三行输出对比三种配置分别由哪一层终止、终止时累计花了多少即可直观看到月度上限触发得太晚、分层栈终止得更早。程序还会打印一段固定的结论块代码中的字面输出HEADLINE: caps must layer, because failure modes differ by time scale Monthly cap fires late: the wallet is already half-gone. Velocity limit ($5/min rolling) catches a loop within minutes. Iteration cap prevents any single run from exceeding N turns. Per-request cap prevents any one completion from being unbounded. Session dollar cap (max_budget_usd) closes the seatbelt on cost. Each layer covers a different failure (loop, leak, surge, release).按练习验证 velocity 与 iteration 的触发顺序课程练习 1 要求两件事在轮询循环轨迹上确认 velocity limit 先于 iteration cap 触发然后关闭 velocity limit测量 agent 在被 iteration cap 抓住之前多花了多少钱。对应的操作是修改 code/main.py 中Governor的enable_velocity开关再重跑。有一个细节需要先读代码确认默认参数下每个 loop turn 消耗 8,000 tokens按模拟器的DOLLARS_PER_KTOK 0.003折合约 $0.024/turn而默认seconds_per_turn30.0每轮 30 秒时滚动窗口内的消费速率远低于默认的velocity_usd_per_min5.0阈值因此默认运行中先触发的会是max_turns。要让 velocity limit 真正先于 iteration cap 触发需要在副本中调整轨迹速度调小seconds_per_turn或调低 velocity 阈值再对比stopped_by字段和累计dollars。Governor的参数面如下默认值均取自 code/main.py 中的数据类定义字段默认值对应概念max_tokens_per_request10_000单次请求 token 上限max_turns200迭代上限iteration capmax_budget_usd50.0会话美元上限超出即停velocity_usd_per_min5.0滚动窗口每分钟消费速率上限velocity_window_min10.0velocity 的统计窗口分钟monthly_cap_usd500.0月度硬上限enable_request_cap/enable_iter_cap/enable_velocity/enable_session_cap/enable_monthly_cap均为True各层开关练习中用于逐层关闭做对比seconds_per_turn30.0模拟器中每轮耗时分钟换算用在自己的环境里按与main.py相同的方式构造覆盖参数即可例如g Governor( max_turns200, # 迭代上限 max_budget_usd50.0, # 会话美元上限 velocity_usd_per_min5.0, # 每分钟滚动消费速率上限 enable_velocityTrue, )需要说明模拟器中的DOLLARS_PER_KTOK 0.003是代码注释标注的mid-2026 Sonnet-class 模型混合费率假设仅用于演示不代表真实账单真实部署的预算数值要按你所用模型的实际价格测算。在真实智能体上配置预算与迭代上限模拟器验证的是分层这个机制落到真实智能体课程文档以 Claude Code Agent SDK 为例给出了对应的参数面公开文档max_turns——迭代上限max_budget_usd——美元上限按会话累计成本结算breach 时中止会话allowed_tools/disallowed_tools——工具白名单与黑名单工具调用前的 hook 点——用于接入自定义成本核算。配套的权限模式课程 Phase 15 · 10 补充了两点预算控制与 Auto Mode 分类器并列存在分类器审查每个动作max_turns、max_budget_usd、每工具调用次数上限负责成本且 per-tool 调用次数上限如WebFetch不超过 N 次也是预算控制的一部分。两课共同的判断是autoMode会话如果不设max_budget_usd属于ungoverned autonomy——Anthropic 明确把 Auto Mode 定位为需要预算控制配合的模式分类器与成本是正交的两层不能互相替代。与防止失控消费直接相关的两条边界来自课程文档本身Claude Code 的max_budget_usd只按会话累计成本触发。课程练习 5 明确要求你自行设计一个外部的 velocity limit 作为补充触发切断的条件是什么、恢复启用re-enable流程是什么都要自己定义。也就是说会话级美元上限不能替代短窗口速率限制。kill switch 必须位于智能体可编辑面之外。第 12 层要求任一上限触发即中止会话上限被记录重新启用走独立路径Phase 15 · 14kill switch、熔断器与金丝雀令牌 进一步规定agent 不能把自己设为 off、每个关键动作都要检查、重新启用是显式人工操作而非自动超时。上线前用预算审计清单核对配置完成后仓库提供了一个可直接使用的审计 skillskill-agent-budget-audit。它按 12 层参考栈逐项审计一个拟上线的 agent 部署产出五部分层清单每层是否配置、配置值、失败模式映射loop / leak / release / surge 各由哪层多快捕获、per-tool 上限每个工具一个会话级上限及理由没有显式上限的工具就是开放循环、告警阈值与上限分开什么消费速率下通知人类、kill-switch 路径触发、动作、重新启用流程并确认 kill switch 在 agent 外部。该清单定义了五条硬性拒绝项可作为上线核对的判定标准自治部署缺少 per-task dollar budget——拒绝无人值守长时程运行缺少 velocity limit——拒绝新增30 天的工具面没有 per-tool cap——拒绝kill switch 可以被 agent 自己修改——拒绝只有月度上限、其余时间尺度全部不设防——拒绝。另有三条拒绝规则约束预算数值本身无法按当前模型价格给出最坏单次运行估价时必须先补成本估算预算超过组织对单次失误可接受损失时必须调低上限把 Auto Mode 分类器当作预算替代品时必须拒绝——分类器与成本正交两层都要有。限制与下一步需要明确这套机制的边界成本治理器只约束智能体能花多少钱不约束它在预算内能做什么——Phase 15 · 14 开篇即指出带 $50 velocity 上限的 agent 依然可以泄密、误发布或删除资源昂贵动作往往恰好是 token 上便宜的动作。因此预算栈之外还要叠加 kill switch、熔断器和金丝雀令牌这是该课的后续课程范围。另外两点限制来自课程文档EU AI Act 与 OWASP Agentic Top 10 的语境下若在欧洲生产环境运行日志与上限执行不是可选项模拟器输出的具体美元数由代码中的费率假设决定只能用于理解触发顺序不能作为真实成本预估。延伸阅读路径都在 Phase 15 · 13 课程文档 中先回读权限模式课把max_turns/max_budget_usd放进权限阶梯理解再进入 kill switch 课补齐行为侧的检测层。【免费下载链接】ai-engineering-from-scratchLearn it. Build it. Ship it for others.项目地址: https://gitcode.com/GitHub_Trending/ai/ai-engineering-from-scratch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价