如何使用Python-LangChain框架创建并注册3-16角函数的工具?
摘要:LangChain ReAct Agent 实战:Tool 描述才是工具调用的 “灵魂” 最近在折腾 LangChain 的 ReAct 智能体(Agent)时,踩了个不少新手都会踩的坑:明明代码逻辑看着没问题,工具却要么不调用、要么乱调用
LangChain ReAct Agent 实战:Tool 描述才是工具调用的 “灵魂”
最近在折腾 LangChain 的 ReAct 智能体(Agent)时,踩了个不少新手都会踩的坑:明明代码逻辑看着没问题,工具却要么不调用、要么乱调用,折腾了半天才发现,问题根源竟在Tool 的描述信息上!
今天就结合实际代码案例,和大家聊聊 ReAct Agent 中 Tool 描述的核心作用,教大家怎么写好描述,让 Agent 精准 “匹配” 工具、高效执行任务。
一、先搭基础:ReAct Agent 的核心逻辑拆解
首先简单回顾下 ReAct Agent 的核心 —— 它遵循 “思考(Thought)— 行动(Action)— 观察(Observation)” 的循环逻辑,能根据用户问题自主判断是否调用工具、调用哪个工具。
我这次的测试代码核心逻辑很清晰,分 6 步走:
初始化大模型(这里用了本地部署的 qwen3.5-27b-awq,保证推理效率);
定义工具函数(比如本次的华为商城搜索工具);
封装 Tool 对象(关键!包含工具名称、函数、核心描述);
编写 ReAct 提示词模板(定义 Agent 的思考、行动格式);
创建 ReAct Agent 并绑定工具、提示词;
执行 Agent,测试工具调用效果。
其中最关键的一步,就是Tool 对象的封装—— 尤其是description(描述)字段,这是 Agent 识别工具、判断是否调用的核心依据。
二、踩坑实录:Tool 描述不精准,Agent 就 “失灵”
先给大家看本次测试的两个典型场景,直观感受 Tool 描述的重要性:
场景 1:需求匹配工具,Agent 正常调用
当我输入问题 **“华为商城最新的手机有哪些?”** 时,Agent 的执行逻辑很顺畅:
思考:用户问的是华为商城手机信息,需要调用华为商城搜索工具;
行动:调用huawei_mall_search工具,输入关键词 “手机”;
观察:工具返回华为 Mate 60 系列、P60 系列等最新手机信息;
最终输出:整理后的搜索结果,完美回答问题。
场景 2:需求无关工具,Agent “瞎调用”
当我输入问题 **“你可以告诉我各个星座的时间么?”** 时,问题出现了 —— 明明需求和华为商城毫无关系,Agent 却依然尝试调用huawei_mall_search工具,输入 “星座时间” 作为搜索关键词,最终返回 “请在华为商城官网查看详细信息” 的无效结果,完全没回答星座问题。
一开始我以为是模型逻辑出问题,反复检查大模型配置、代码逻辑,都没发现问题。直到逐行核对 Tool 的封装代码,才意识到:Tool 的描述信息太模糊了!
本次测试中 Tool 的初始描述是:"查询华为商城相关信息,包括产品、活动、政策等"—— 这个描述只说了 “能做什么”,却没说 “不能做什么”,也没限定 “适用范围”。Agent 在思考时,会模糊判断 “星座问题是否能通过华为商城搜索间接解答”,最终导致错误调用。
三、核心真相:Tool 描述是 Agent 的 “工具使用说明书”
为什么 Tool 描述这么关键?我们可以把 Agent 比作一个 “新手助理”,工具是 “各种技能道具”—— 而 Tool 描述,就是给新手助理看的道具使用说明书。
Agent 对工具的认知,完全依赖描述信息:它不会主动去看工具函数内部的逻辑,也不会凭空知道这个工具能处理哪些问题、不能处理哪些问题。
ReAct Agent 的思考逻辑是:
接收用户问题后,遍历所有 Tool 的描述;
对比问题与描述的匹配度 —— 如果描述精准匹配,就调用对应 Tool;
如果多个 Tool 都匹配,再根据优先级和问题复杂度选择;
如果都不匹配,就直接用大模型自身的知识回答。
简单说:Tool 描述写得越精准,Agent 的匹配判断就越准确;描述模糊,Agent 就会 “乱选工具”“漏用工具”。
四、实战优化:写好 Tool 描述的 3 个核心原则
结合本次踩坑经验,我总结了写 Tool 描述的 3 个关键原则,按这个来写,能大幅提升 Agent 工具调用的准确率:
原则 1:限定范围,明确 “能做什么”
描述要精准说明工具的核心功能,避免模糊表述,让 Agent 一眼知道工具的核心能力。
