如何使用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 一眼知道工具的核心能力。
阅读全文