LangChain Tool 异常处理实战
一、工具调用也会'掉链子':不处理异常,智能体就'罢工'

之前我们学了怎么给大模型绑定 Tool 工具,让它能查天气、做计算、调 API——但实际用起来会发现,工具调用就像人干活一样,难免'掉链子':
- 查天气时网络突然断了,API 没响应;
- 调用股票接口时,密钥过期导致权限不足;
- 用户输入的城市名是错的(比如'北上广'),参数不合法;
- 免费 API 每天限 100 次,调用超了就被限流。
这些问题如果不处理,后果很糟:
- 程序直接崩了:一行错误堆栈甩给用户,谁看得懂?
- 智能体卡壳了:不知道该重试还是换工具,任务直接卡住;
- 用户体验崩了:本来想查天气,结果看到'503 Service Unavailable',直接劝退。
就像开车没装安全气囊,遇到突发情况就容易出大问题。而 LangChain 的 ToolException,就是给工具装'安全气囊'——让智能体遇到错误时,能优雅处理、友好反馈,甚至自动恢复。
二、ToolException:给工具错误'定规矩'的关键

ToolException 是 LangChain 专门用来处理工具调用异常的类,核心作用就两个:
- 统一错误格式:不管是网络错、权限错还是参数错,都转成智能体能看懂的标准格式;
- 传递关键信息:把'哪个工具错了''为什么错了'这些上下文传给智能体,让它知道该怎么处理(重试?换工具?还是提示用户?)。
简单说,ToolException 就像给各种混乱的错误'统一发了身份证',智能体拿着这张身份证,就知道该怎么应对了。
三、三种异常处理方式:从'简单兜底'到'自定义降级'
LangChain 提供了三种处理工具异常的方式,从简单到灵活,覆盖不同场景,我们一个个实战学:
方式一:自动处理(handle_tool_error=True)——最简单的'兜底'
只需在定义工具时加个 handle_tool_error=True,工具就会自动捕获异常,并返回标准化的错误信息(包含异常原因),不用自己写额外代码。
代码示例:
from langchain_core.tools import StructuredTool, ToolException
# 1. 定义一个可能出错的工具(模拟搜索失败)
def search(query: str) -> :
ToolException()
search_tool = StructuredTool.from_function(
func=search,
name=,
description=,
handle_tool_error=
)
:
result = search_tool.invoke({: })
(, result)
Exception e:
(, e)




