本章导读在前面的章节中我们已经了解了大语言模型LLM的工作原理。无论模型多么强大它始终只能完成一件事情根据已有上下文预测下一个 Token。因此对于模型来说整个世界只有两件事情输入文本↓生成文本如果只是聊天、翻译、总结、写代码这已经足够了。但是当我们开始尝试让 AI 帮助完成真实工作时很快就会遇到一个问题当我们问模型:帮我查询今天武汉天气。模型知道武汉吗知道。模型知道天气是什么吗知道。但是它知道今天武汉到底有没有下雨吗不知道。因为今天的天气属于实时信息训练模型的时候还没有发生。再比如帮我计算下面 Excel 的销售总额。模型会计算吗当然会。但是它能够直接打开你的 Excel 文件吗不能。又比如帮我查询数据库中库存不足的商品。模型懂 SQL 吗懂。但是它能够直接连接你的 MySQL 数据库吗仍然不能。于是一个越来越明显的问题出现了LLM 很聪明但它无法直接与现实世界交互。10.1 LLM 为什么不会使用工具这一点其实很好理解。回忆一下第二章介绍过的内容。模型看到的输入其实并不是今天天气怎么样而是经过 Tokenizer 处理之后的一串 Token ID。例如示意[4512,10345,821,…]模型最后输出的也不是今天武汉小雨。而是另一串 Token ID。整个推理过程中Transformer 从头到尾处理的都是数字向量。模型既不会访问互联网也不会打开浏览器更不会执行操作系统命令。换句话说对于 LLM 来说世界上不存在API“数据库”浏览器这些概念它只认识 Token。因此下面这些动作查询天气调用地图执行 Python打开浏览器查询数据库发送邮件对于模型来说本质上都是模型之外发生的事情。10.2 如果让模型自己完成会发生什么来看一个简单的例子。假设用户输入今天武汉天气怎么样模型开始推理。根据训练数据它可能知道武汉夏天比较热七月份经常下雨天气回答通常包含温度、湿度等内容。于是它可能生成今天武汉多云最高气温33℃……问题是,这是真的吗模型根本不知道。它只是根据历史统计规律生成了一段最像天气预报的文字。这就是我们第八章提到的幻觉Hallucination。如果模型能够真正访问天气 API它就不需要猜了。因此,工具调用Tool Calling的本质就是让模型停止猜测转而获取真实数据。10.3 Tool Calling 到底是什么很多人第一次接触 Tool Calling会觉得非常好用。例如你在 ChatGPT 中输入北京今天会下雨吗几秒钟后它真的告诉你今天北京有小雨……甚至还能给出未来几天的天气。很多人以为ChatGPT 学会了查询天气。实际上并不是它学会了某项技能。真正调用的流程其实是用户输入│▼LLM 判断需要查询天气│▼调用天气 API│▼获得真实天气数据│▼再次交给 LLM│▼生成最终回答这里,请注意真正查询天气的不是 LLM而是外部程序。LLM 做的事情只有两件判断是否需要调用工具根据工具返回的结果重新组织语言。这就是 Tool Calling 的本质。10.4 Tool Calling 是谁调用谁很多初学者容易产生一个误区是不是模型自己调用 API答案是否定的。真正调用工具的是 Agent Runtime或者聊天应用。模型只是生成了一段特殊的信息例如{“tool”:“weather”,“city”:“北京”}程序看到这段内容之后会根据返回的值做下面的事情调用天气接口获得返回结果再把结果放回上下文继续让模型推理。因此一个完整流程其实是用户 │ ▼ LLM │ 是否需要工具 │ ┌──────┴──────┐ │ │ 否 是 │ │ ▼ ▼直接回答 Agent Runtime│▼调用真实工具│▼返回执行结果│▼再次调用 LLM│▼输出最终答案这里有一个非常重要的角色第一次出现了Agent Runtime智能体运行时它就像整个系统的调度中心。模型负责思考Runtime 负责执行。