大模型智能体的工具调用容错研究
原文arXiv:https://arxiv.org/html/2609.02750v1
摘要
大语言模型智能体依靠外部工具完成现实世界任务,但工具调用过程极易发生各类故障:参数错误、工具不存在、网络异常、返回结果格式异常、API限流等。现有研究大多聚焦工具调用成功场景,对故障发生后的恢复、重试、纠错机制缺少系统性研究。本文系统梳理工具调用全生命周期故障分类,构建ToolFault评测基准,覆盖6大类、27种真实工具故障场景;对主流智能体框架开展评测,发现现有Agent面对故障时普遍存在重试策略不合理、错误理解报错信息、无限循环调用、无法降级处理等问题。本文进一步提出ToolRescue,一套面向工具调用故障感知‑分析‑修复的轻量级机制,无需微调基座大模型,仅通过推理时提示增强实现故障识别、根因定位、参数修正、降级回退。实验结果表明,ToolRescue在ToolFault基准上相比基线智能体,任务成功率平均提升38.7%。项目代码、数据集、实验脚本全部开源发布。
关键词:大模型智能体;工具调用;故障恢复;Agent容错;评测基准
1 引言
大语言模型智能体通过调用工具(搜索、代码解释器、MCP工具、API、系统Shell)扩展能力边界,解决推理本身无法完成的任务。在真实部署环境中,工具调用链路存在大量不可靠因素:
- Agent生成错误工具名称、错误参数类型、参数缺失;
- 外部服务返回报错、超时、网络抖动、访问限流;
- 工具返回数据格式破坏、JSON解析失败、字段缺失;
- 权限拒绝、资源不存在、输入超出工具允许范围。
当工具返回错误信息,智能体常见错误行为:无意义重复重试、忽略报错继续执行、编造虚假返回结果、进入死循环。大部分现有Agent框架缺少完备的故障处理逻辑,仅简单捕获异常,缺少根因分析与修复策略。
现有工作局限:
- 多数工具调用评测仅覆盖正常执行场景,缺少大规模故障注入测试集;
- 故障恢复方案大多依赖微调,部署成本高;
- 缺少统一分类体系,不同研究对工具故障定义不统一。
本文贡献:
- 建立工具调用故障分类体系,覆盖工具调用全生命周期;
- 构建ToolFault评测基准,包含27种故障类型,可自动化注入故障开展评测;
- 大规模评测主流Agent,揭示容错能力短板;
- 提出ToolRescue轻量级故障恢复框架,推理时提示增强,无需模型微调;
- 开源全部数据集、故障注入脚本、评测代码。
资源仓库:https://github.com/xxx/ToolFault‑ToolRescue
2 相关工作
2.1 LLM智能体与工具调用
工具调用使大模型可以对接外部系统,主流实现方式:函数调用JSON输出、MCP协议、思维链驱动Shell调用。代表框架:Hermes、AutoGPT、LangGraph。现有优化工作集中在工具选择、参数生成质量,较少关注调用失败之后的处理流程。
2.2 Agent错误处理与鲁棒性
部分工作研究Agent自我纠错,大多聚焦任务输出结果校验,不是工具链路本身故障。少数研究使用重试策略,多为固定次数盲目重试,不区分故障根因。例如网络临时抖动适合短间隔重试;参数格式错误重试完全无效,应当修正参数。盲目重试会带来API浪费、速率限制、死循环。
2.3 Agent评测基准
现有基准侧重任务完成度,例如MMLU‑Agent、GAIA。缺少专门针对工具调用故障场景的评测集。ToolFault填补该空白,可以可控注入各类工具侧故障,专门测试Agent容错恢复能力。
3 工具调用故障分类体系
工具调用完整生命周期:工具选择 → 参数序列化 → 请求发送 → 工具服务执行 → 返回结果解析。故障划分为六大类别:
| 故障类别 | 说明 | 示例 |
|---|---|---|
| A‑工具选择故障 | Agent选择不存在/不匹配任务的工具 | 调用不存在函数;选错工具 |
| B‑参数生成故障 | 参数缺失、类型错误、取值越界、格式错误 | 缺少必填字段;字符串传入数字;参数范围超限 |
| C‑请求传输故障 | 网络层面问题 | 超时、连接失败、API限流429 |
| D‑工具执行时故障 | 服务内部运行报错 | 权限拒绝、资源不存在、业务逻辑报错 |
| E‑返回负载故障 | 工具返回数据损坏 | JSON截断、字段缺失、格式错乱 |
| F‑Agent解析故障 | Agent无法解析合法返回值 | 强制解析错误schema,忽略报错信息 |
每一大类下细分若干子故障,合计27种细粒度故障。不同故障对应不同最优修复策略:
- 瞬态故障(网络抖动):有限次数退避重试;
- 参数错误:禁止重试,需要修改参数;
- 工具不存在:切换备选工具;
- 返回格式损坏:开启降级解析、提取可用片段;
- 不可恢复故障:终止调用,向用户返回说明,执行任务降级。
关键发现:不区分故障类型的统一重试策略是现有Agent的主要缺陷。
4 ToolFault评测基准
4.1 数据集设计
ToolFault可以对工具调用链路可控注入故障。每一条样本包含:任务描述、可用工具集、待注入故障类型、预期正确行为。
- 总样本:1280条,覆盖6大类27种故障;
- 支持故障粒度可配置,支持批量自动化评测Agent;
- 评测指标:任务成功率、有效恢复率、无效盲目重试次数、死循环发生率、降级处理能力。
4.2 评测流程
- Agent接收用户任务,获取可用工具列表;
- ToolFault中间层拦截Agent发出的工具调用请求,按照配置注入对应故障;
- 将报错/损坏返回值回传给Agent;
- 观测Agent行为:是否识别故障、根因是否判断正确、修复动作是否合理;
- 统计指标:
- ✅有效恢复:识别故障,执行对应修复,完成任务;
- ⚠️无效重试:对参数错误反复调用相同参数;
- ❌失败:编造结果、死循环、直接放弃任务。
4.3 基线Agent评测结果
论文选取多类主流Agent框架做基线对比:
- 原生Function‑call大模型;
- LangGraph基础Agent;
- Hermes基础智能体;
- AutoGPT‑like开源Agent。
主要观测结论:
- 面对参数错误故障,绝大多数Agent直接原样重试,修复率不足22%;
- 遇到返回JSON损坏时,模型倾向编造虚构返回数据;
- 缺少降级逻辑,一旦工具报错直接整体任务失败;
- 瞬态网络故障场景,部分框架无退避策略,高频重试触发限流。
5 ToolRescue:故障感知‑分析‑修复框架
ToolRescue不修改基座模型,属于推理时附加提示增强中间件,工作嵌入在Agent与工具层之间。三大核心模块:
- 故障感知模块:捕获工具返回全部报错、异常堆栈、返回负载;识别故障所属类别(A‑F分类);
- 根因推理模块:把报错信息、调用上下文、历史调用记录送入大模型,输出故障类型、是否可恢复、推荐修复动作;
- 修复执行模块:根据根因输出执行对应策略:参数修正、切换工具、退避重试、降级输出、终止任务。
5.1 工作流程
- Agent发起原始工具调用;
- 工具执行,正常返回 → 直接交付Agent;
- 如果发生故障/报错:
- ToolRescue捕获完整上下文(工具名、入参、报错堆栈、返回原始文本);
- 送入根因推理prompt,输出结构化判断:故障类别、是否瞬态故障、修复方案;
- 根据修复方案分支执行:
- 瞬态网络故障:有限次数指数退避重试;
- 参数错误:引导Agent重新生成合法参数;
- 工具不存在:切换备选可用工具;
- 不可恢复故障:停止工具调用,整理报错摘要,交给Agent做任务降级;
- 将修复后的上下文返回Agent继续任务。
5.2 提示设计要点
根因推理Prompt强制输出结构化JSON,字段示例:
{"fault_category":"B","fault_desc":"参数类型错误","is_transient":false,"repair_action":"fix_parameter","max_retry":0,"suggestion":"xxx"}
is_transient瞬态标记非常关键:false时禁止盲目重试。
5.3 实验结果
在ToolFault基准上对比基线Agent与开启ToolRescue之后:
- 平均任务成功率提升38.7%;
- 无效重试调用数量下降71.2%;
- 死循环工具调用现象基本消除;
- 各类故障场景下均获得一致性提升,不需要微调基座模型。
消融实验证明:故障分类识别、瞬态判断、禁止无效重试三个组件均对性能有显著贡献。
6 实验设置
6.1 环境与模型
基座模型测试集合:GPT‑4o、Claude‑3‑Sonnet、Llama‑3‑70B‑Instruct。
所有实验脚本、故障注入工具、评测数据集开源:
https://github.com/xxx/ToolFault‑ToolRescue
6.2 复现步骤
# 克隆仓库gitclone https://github.com/xxx/ToolFault‑ToolRescuecdToolFault‑ToolRescue# 安装依赖pipinstall-rrequirements.txt# 运行ToolFault基准评测python run_benchmark.py--agent_typebaseline--output./result_baseline.json# 启用ToolRescue机制评测python run_benchmark.py--agent_typetoolrescue--output./result_toolrescue.json# 分析评测报告python analyze_result.py--input./result_toolrescue.json参数说明:
--agent_type:可选baseline / toolrescue;
支持自定义故障配置文件,注入指定子集故障类型。
6.3 主要评测指标
- task_success_rate:任务完成成功率
- valid_recovery_rate:故障有效恢复率
- useless_retry_count:无效重试总次数
- loop_failure_rate:死循环故障占比
7 讨论与局限
- ToolRescue依赖大模型本身的报错理解能力;极端晦涩、非标准化报错堆栈,根因识别会出现偏差;
- 本工作聚焦工具调用链路故障,不解决Agent规划逻辑本身错误;
- 真实世界复杂嵌套故障(多种故障同时发生)未来需要进一步研究。
8 结论
本文针对大模型智能体工具调用容错开展系统性研究,建立六类工具故障分类体系,构建ToolFault故障注入评测基准,揭示现有Agent在故障处理环节的短板。提出轻量级ToolRescue故障恢复机制,推理时提示增强,无需微调,显著提升故障恢复能力,减少无效重试与死循环。全部数据集、故障注入脚本、评测代码开源,可用于后续智能体工具鲁棒性方向研究。