[智能体-41]:智能体识别调用外部工具:原理 + 判定手段 + Python 最简代码示例 一、核心识别逻辑大模型本身无工具调用能力智能体靠三类判定手段判断是否要调工具意图语义识别用户问题超出模型静态知识库实时数据、计算、联网、硬件操作格式规则匹配关键词、指令、参数触发工具调用这是最初的方式。函数调用 Prompt 约束大模型按指定JSON 格式输出调用指令智能体解析执行。MCP就采用的这种方式。二、通用识别判定手段知识库边界判断时间、价格、天气、数学计算、外部接口类问题必调用关键词触发计算、查询、搜索、打开、获取、运行等词触发Prompt 强制约定只在无法回答时输出工具调用结构体输出解析器正则 / JSON 解析模型返回区分普通回答和工具指令三、完整可运行代码示例轻量 Agent 工具调用python运行import json import re # 1. 模拟外部工具库 tools { calculator: lambda a,b: a b, weather_query: lambda city: f{city}今日晴天25℃ } # 2. 工具调用识别解析器 def parse_tool_call(llm_response): # 匹配模型输出的工具调用JSON格式 pattern r\{.*?\tool_name\.*?\} match re.search(pattern, llm_response, re.S) if not match: return None, llm_response try: call_info json.loads(match.group()) return call_info, None except: return None, llm_response # 3. 模拟大模型判断是否需要调用工具 def llm_judge_need_tool(user_query): # 简单语义识别规则 if any(word in user_query for word in [加,计算,求和]): return json.dumps({tool_name:calculator,params:{a:10,b:20}}) elif 天气 in user_query: return json.dumps({tool_name:weather_query,params:{city:北京}}) else: return f直接回答{user_query}无需调用工具 # 4. 智能体主调度 def agent_run(user_input): # 模型判断是否调用工具 resp llm_judge_need_tool(user_input) # 解析识别工具指令 tool_call, normal_ans parse_tool_call(resp) if normal_ans: return normal_ans # 执行外部工具 tool_func tools[tool_call[tool_name]] res tool_func(**tool_call[params]) return f工具调用结果{res} # 测试 if __name__ __main__: print(agent_run(10加20等于多少)) print(agent_run(北京天气)) print(agent_run(你好))四、主流框架底层识别原理LangChainPydantic结构化输出 解析器识别函数调用OpenAI Function Call模型原生输出函数参数SDK 自动解析判定Coze / 豆包智能体意图分类 槽位填充命中工具域则调用五、运行输出plaintext工具调用结果30 工具调用结果北京今日晴天25℃ 直接回答你好无需调用工具