展开本页目录
开始前准备什么
- 下载完整练习包,在独立目录阅读README与已执行范围。
- 安装requirements.txt指定版本或使用文中目标工具;依赖与模型权重不要混入网站工程。
- 只有明确标为已执行的部分有本次证据;真实模型、账号或GPU步骤按自己的环境另行验证。
- 先识别没有停止条件的循环
- 分开两种额度上限
- 建立可控的离线循环提供方
- 单独触发请求次数上限
- 单独触发工具次数上限
- 保留失败和未完成状态
- 接真实模型前再核对计费
1. 先识别没有停止条件的循环
negative-loop.json故意让下一步永远是lookup。限制不是用“请不要循环”提示词代替,而是放到运行时UsageLimits中。
2. 分开两种额度上限
limits.json分别设置request_limit=3和tool_calls_limit=2。一次模型响应可能请求多个工具,不能把请求次数和工具执行次数当同一个指标。
本题独立目录执行
python reference/audit.py3. 建立可控的离线循环提供方
run_sdk.py使用真实SDK的FunctionModel,由作者函数每次返回lookup调用。它模拟持续请求工具的行为,没有读取环境里的API Key。
本题SDK或目标环境入口
python reference/run_sdk.py4. 单独触发请求次数上限
只设置request_limit运行第一组,记录provider_responses、tool_executions与UsageLimitExceeded。异常发生后不自动重开一个Agent绕过额度。
5. 单独触发工具次数上限
第二组只设置tool_calls_limit,继续保存实际执行次数。必须观察真正执行的lookup计数,不以模型想调用多少次代替。
6. 保留失败和未完成状态
将异常文本与已消耗计数写入sdk-contract.json。达限意味着任务未完成,不要把异常当正常最终答案,也不要无限重试。
7. 接真实模型前再核对计费
真实provider可能有缓存、重试与token费用;这些不由本题离线FunctionModel测得。保留运行时上限,同时在服务端账单中核对实际收费请求。
怎样确认已经完成
- 两个上限分别触发
- 退出后不追加模型调用
- 达限不伪装任务成功
- 已在真实Pydantic AI中用离线FunctionModel分别触发请求/工具上限并捕获异常;没有真实模型调用或费用数据。
常见问题
Pydantic AI工具一直循环调用怎么停?
在Agent运行时设置UsageLimits并捕获UsageLimitExceeded,保存已完成工具数和异常,不依赖提示词自觉停止。
UsageLimits怎么分别限制模型请求和工具次数?
分别用request_limit和tool_calls_limit。离线FunctionModel实测请求上限3触发前工具执行3次;工具上限2时第三次响应中的工具不再执行。
这篇教程哪些步骤已经真正执行?
已在真实Pydantic AI中用离线FunctionModel分别触发请求/工具上限并捕获异常;没有真实模型调用或费用数据。



