当前位置: 首页 > news >正文

05 - Tool 工具调用:让 AI “长出双手“

这是"从 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 外部系统操作

  • 发送邮件

  • 创建日历事件

  • 操作数据库(增删改查)

  • 调用企业内部 API

6.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 从"嘴"到"手"的关键一步:

  1. 工具本质上是函数,平台给模型看的只是函数的"描述"(名称、参数、用途)。

  2. 模型只输出调用指令(JSON 文本),不真正执行。平台负责执行并回传结果。

  3. 工具让模型获得了感知实时信息和影响外部世界的能力,是所有 AI 应用的基础能力。

下一篇,我们来聊工具接入的标准化问题——MCP(模型上下文协议),看看怎么避免为每个平台重复造轮子。


本系列文章:

  1. LLM 大语言模型

  2. Token 与 Tokenizer

  3. Context 与 Context Window

  4. Prompt 提示词

  5. Tool 工具调用← 你在这里

  6. MCP 模型上下文协议(待发布)

  7. Agent 智能体(待发布)

  8. Agent Skill(待发布)

http://www.jsqmd.com/news/900411/

相关文章:

  • 从‘找不到文件’到成功运行:一次完整的Windows 10家庭版gpedit.msc启用记录与排错心得
  • 存储芯片和逻辑芯片的区别是什么?
  • 窗口尺寸调整难题的终极解决方案:WindowResizer使用全攻略
  • 研究生读文献亲测好用的工具
  • GS算法与Fienup算法详解:为什么你的相位恢复总不收敛?可能是反馈机制没搞懂
  • CrossOver容器访问Mac外置硬盘?手把手教你映射D盘(保姆级图文)
  • 06 - MCP 模型上下文协议:统一 AI 工具的“Type-C 接口“
  • 从CS231N作业到你的实验:Tiny-ImageNet数据集完整使用指南(含预处理与可视化)
  • 2026年智慧工地系统推荐榜单:工地人脸识别/塔吊防碰撞/AI视频巡检/扬尘监测/实名制考勤/车辆道闸/升降机监控/劳务管理平台全解析 - 品牌企业推荐师(官方)
  • 微信AI机器人终极指南:打造智能群聊助手的完整教程
  • G1舞蹈开发三步曲:从预设到强化学习
  • 【限时解密】头部咨询公司内部禁用的ChatGPT决策辅助工具黑名单:12个触发监管红线的操作模式
  • CUSUM控制图在Python金融风控中的应用:如何用它监测交易策略的失效?
  • DSM在零延迟仿真中的异常行为分析与解决方案
  • MIT-BIH ECG信号预处理避坑指南:中值滤波窗大小设置与边界失真处理实战
  • 品牌设计全案使用后交付偏差先分阶段确认验收标准
  • 告别命令行恐惧:Windows 10/11 下 SRA Toolkit 安装与配置保姆级图文教程
  • ChatGPT生日派对创意避坑指南:87%新手踩中的3类提示陷阱及权威修复路径
  • 4J36板材怎么选?国内主流厂家盘点,助您快速匹配优质供应商 - 品牌2025
  • Text to SQL准确率为什么上不去?三个核心难点
  • Mac IDEA 2026.1 Java开发痛点与智能化方案
  • 别再踩坑了!Ubuntu 20.04上TensorRT 8.x的deb安装保姆级避坑指南
  • 量子溢出检测电路在生物医学图像处理中的应用与Qiskit实现
  • 032、图像分类模型部署后精度下降?预处理管线一致性、归一化对齐与推理加速方案
  • Zotero 结合 Codex 打造智能学术工作流实战
  • 通过curl命令快速诊断taotoken api连接与认证问题的排查方法
  • Linux内核里dma_map_sg()怎么把零散内存‘粘’成连续IOVA?一个SMMUv3驱动的实战解析
  • 2026年 宝钢镀锌HC850/1180DHD+Z吉帕钢测评:超强车身用钢的行业标杆与选购推荐 - 品牌企业推荐师(官方)
  • Java高级全套教程(八)——微信支付超详细实战详解
  • Windows 10资源管理器CPU占用100%?别急着重装,用ProcessExplorer和‘干净启动’揪出真凶Network List Service