工具缺失不一定要崩溃
Agent 调用一个不存在的工具时,不一定要直接崩溃。OpenAI Agents Python v0.17.4 给 RunConfig 加了一个 tool_not_found_behavior 选项:默认仍是 raise_error,但开发者可以显式设成 return_error_to_model——模型调用缺失的工具时,框架不再抛异常,而是把 "Tool 'xxx' not found" 作为一个正常的 function_call_output 喂回给模型,让模型自己换条路走。
这个改动的实现很干净:缺失的工具被建模成 ToolRunFunctionNotFound,和正常工具执行走同一条 output pipeline;错误消息可以通过 tool_error_formatter 自定义,甚至可以按 tool_name 返回不同的话术。总共只加了 347 行、改了 10 个文件,就把"工具缺失"从系统故障变成了可恢复信号。
工程上容易踩两个坑。一是如果设成 return_error_to_model 但没设合理的 max_turns,模型可能反复尝试同一个缺失工具形成死循环——框架只是把错误变成输出,并不保证模型会"聪明地放弃"。二是这个行为只处理本地 agent 不知道的工具;如果是远端 tool search 延迟或 MCP 注册竞态导致的暂时性缺失,可能在上层还需要一层重试或降级。
更深一层看,这个问题本质上是:agent runtime 应该把模型行为的越界当作异常抛给调用方,还是当作输入信号还给模型?前者容错靠外部重试/降级,后者容错靠模型自身纠偏——两条路线的选择会影响整整一层 agent 架构的设计。