这是从 LLM 到 Agent Skill系列的第五篇。前面四篇我们一直在聊模型本身——它怎么运作、怎么读文字、怎么记住对话、怎么接收指令。但有一个根本的局限始终没有解决模型只能输出文本无法感知和影响外部世界。这一篇我们来聊聊它是怎么长出双手的——Tool工具调用。一、LLM 的天然局限回顾第一篇的核心认知大语言模型唯一的能力就是输出文本。这意味着什么❌ 它不知道今天天气如何训练数据截止到某个时间点❌ 它不知道此时此刻的股价❌ 它不能帮你发一封邮件❌ 它不能在你的日历里创建一个日程❌ 它不能读取你本地的文件你问它今天北京天气怎么样如果只靠模型本身它要么回答不上来要么瞎编。这就是 LLM 的核心局限封闭的知识边界。二、Tool工具给模型装假肢2.1 工具的本质是什么Tool工具本质上就是一个函数Function。def get_weather(city: str, date: str) - str: # 调用天气 API返回天气信息 return 北京今天晴22°C这个函数接收城市名和日期返回天气信息。模型不认识天气但它知道当用户问天气时有一个叫get_weather的工具能用。2.2 工具的描述Function Definition给模型看的不是代码而是工具的描述{ name: get_weather, description: 查询指定城市的天气信息, parameters: { city: 城市名称如北京, date: 日期如2025-05-24 } }这个描述本身会被放入 Context作为 System Prompt 或工具列表的一部分。模型读取后就知道当我遇到天气相关的问题可以调用这个工具。三、工具调用的完整流程四个角色这是本文最核心的一张流程图用户今天北京天气怎么样 │ ▼ ┌──────────────────────────────────────┐ │ 平台Platform │ │ │ │ 将「用户问题 可用工具列表」打包 │ │ 发给大模型 │ └──────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────┐ │ 大模型LLM │ │ │ │ 分析问题 → 决定调用 get_weather │ │ 输出【调用指令】 │ │ { │ │ tool: get_weather, │ │ params: { │ │ city: 北京, │ │ date: 2025-05-24 │ │ } │ │ } │ └──────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────┐ │ 平台Platform │ │ │ │ 接收指令 → 实际执行函数 → 获取结果 │ │ 北京今天晴22°C北风3级 │ └──────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────┐ │ 大模型LLM │ │ │ │ 接收工具返回的数据 → 整合生成回答 │ │ 北京今天天气晴朗气温22°C │ │ 吹北风3级适合出门。 │ └──────────────────────────────────────┘ │ ▼ 用户看到回答四、四个角色的职责角色做什么用户User提出问题或任务平台Platform传话筒 协调者 执行器。管理 Context把工具列表告诉模型真正执行函数回传结果大模型LLM分析问题决策调用哪个工具、填什么参数。只输出调用指令文本工具Tool被平台调用执行实际逻辑调 API、读文件等返回结果五、最重要的认知模型不执行工具大模型只是输出了一段文本——一个包含工具名和参数值的 JSON 字符串。它不执行任何东西。真正去调天气 API 的是外部的平台。模型说帮我查一下北京天气→ 平台听到后去查 → 把结果贴回来 → 模型看着结果说哦北京晴天。就像一个人被锁在房间里面前只有一个打字机。他打字说请帮我看看窗外有没有下雨。外面的人看了纸条去窗口看了看塞回来另一张纸条没下雨晴天。房间里的人于是打字回复外面是晴天可以出门。模型就是那个锁在房间里的人。他从来没有真正看见过窗外。六、工具调用的实际应用场景6.1 实时信息获取天气查询股票价格新闻搜索航班状态6.2 外部系统操作发送邮件创建日历事件操作数据库增删改查调用企业内部 API6.3 本地环境交互读写文件执行 Shell 命令操作浏览器控制本地软件在 Claude Code 这个产品里工具就是代码编辑、文件读写、命令执行等能力——模型说要改哪一行平台帮它改。七、工具调用的进阶形式7.1 多工具并行调用模型可以一次性输出多个工具调用指令没有依赖关系的工具可以并行执行[ {tool: get_weather, params: {city: 北京}}, {tool: get_weather, params: {city: 上海}} ]7.2 工具调用链一个工具的结果可以作为另一个工具的输入用户帮我查一下北京天气要是下雨就帮我找最近的雨伞店 → 调 get_weather(北京) → 下雨 → 调 search_nearby(雨伞店, 北京) → XX路12号 → 回复用户这其实就是 Agent 的雏形了——我们第七篇会详细讲。八、总结Tool 是 LLM 从嘴到手的关键一步工具本质上是函数平台给模型看的只是函数的描述名称、参数、用途。模型只输出调用指令JSON 文本不真正执行。平台负责执行并回传结果。工具让模型获得了感知实时信息和影响外部世界的能力是所有 AI 应用的基础能力。下一篇我们来聊工具接入的标准化问题——MCP模型上下文协议看看怎么避免为每个平台重复造轮子。本系列文章LLM 大语言模型Token 与 TokenizerContext 与 Context WindowPrompt 提示词Tool 工具调用← 你在这里MCP 模型上下文协议待发布Agent 智能体待发布Agent Skill待发布