给鹦鹉装上手和脚 - 工具调用
大话 AI · 07 | 给鹦鹉装上手和脚:工具调用
前面几篇,小硅一直在"动嘴"——回答、写作、分析。可你有没有发现,它有个天花板:你问它"今天北京天气咋样",它要么说不知道,要么给你编一个。因为它只会说,不会"去查"。这一篇,我们给这只鹦鹉,装上手和脚。
🧠 先说清两个死穴
小硅"动嘴"厉害,但有两个天生的短板:
一是它不知道"现在"。它的知识停在训练那一刻,今天的天气、股价、新闻,它一概不知(第 4 篇讲过的"知识截止日期")。
二是它算不准、也做不了事。让它算 738×924,它可能顺口报个错数;让它帮你发封邮件、订张票,它更是干瞪眼——嘴皮子再溜,也不能替你按键盘。
怎么破?给它配工具。
🔧 一句话戳穿
工具调用,就是让小硅在"不知道/做不了"的时候,学会说一句:"这个我得用工具"——然后真的去调一个外部程序,拿到结果再回答你。
但这里有一个大部分人搞混的关键认知——小硅自己不动手。 它只是写了一张"工单":我需要查天气,城市=北京,日期=今天。这张工单被交给外面一个真正的天气查询程序去执行,程序跑完把结果递回来,小硅再翻译成大白话告诉你。
打个比方:小硅像公司前台,你走进来说"帮我查个快递"。前台不会自己翻仓库,而是填一张单子递给仓库管理员,管理员找到包裹、把信息报回来,前台再笑眯眯跟你说"您的快递到了,在 3 号柜"。模型负责"判断该找谁"和"翻译结果",真正干活的是外面的程序。
这个机制有个技术名,叫 Function Calling(函数调用),是小硅从"聊天机器人"迈向"能干活的助手"的第一步,也是最关键的一步。

🎬 完整走一遍:从提问到拿结果
来看一个完整闭环,感受一下"工单"是怎么流转的:
你:今天北京天气怎么样?
小硅内心:这是实时信息,我不知道→翻工具箱→找到"天气查询"工具→填参数:城市=北京
小硅输出(给程序看的):调用 get_weather(city="北京")
外部程序执行:真的去问天气 API → 拿到 "26℃,晴,东南风2级"
小硅拿到结果,翻译成人话:北京今天 26℃,晴天,有点小风,适合出门~
整个过程,小硅做了三件事:判断该用哪个工具 → 填好参数写工单 → 把结果翻译成你能懂的话。中间"真正去查天气"这一步,它一根手指都没动——全是外面的程序在跑。

🎯 它怎么"决定用哪个工具"
你给小硅配了一箱工具(查天气、算数学、查数据库、发消息……),每个工具都附一张"说明书":这工具叫啥、能干嘛、要给它啥参数。
小硅接到你的问题后,先判断:这事儿我自己能答吗?
能——直接答(比如"李白是哪个朝代的")。不能——翻工具箱,挑一个最合适的,填好参数发工单,等结果回来再回答你。
关键点:工具的"说明书"写得好不好,直接决定它用不用得对。 说明书含糊,它就抓瞎、乱调、或调错工具。这也是后面做 Agent 时的一门核心手艺——把工具描述写清楚。(第 16 篇讲 MCP 时会专门讲怎么把工具接口标准化,让不同的 AI 都能即插即用。)
🌟 装上手脚后,世界打开了
装上工具的小硅,能力边界一下子被撑开:
它能联网查最新的了——不再困在"过去的知识"里。它能动手做事了——查库、算数、调接口、发通知,样样能碰。它能减少幻觉了——不知道的去查,而不是编。
你现在用的很多"能查能做"的 AI 助手,背后都是这套工具调用在撑着。一个只会聊天的 AI 和一个能帮你订票查账的 AI,差的就是这双"手脚"。
😄 一个经典翻车
你有没有遇到过:问某些 AI "9.11 和 9.9 谁大",它一本正经答"9.11 更大"?
因为纯"文字接龙"的它,对数字没概念,靠语感猜("9.11 看起来位数多,好像更大"——第 1 篇讲过,它猜的是"最顺口的下一个词",不是在算数)。但一旦给它配上"计算器"工具,让它老老实实把两个数丢进去比大小,就不会犯这种低级错了。
这也是为什么同一个模型,有时算对有时算错——取决于它有没有被配上计算器工具。配了,它就乖乖交给计算器;没配,它就硬猜,猜对算走运。让专业的工具干专业的事,小硅只负责"判断该找谁帮忙"。
(顺带一提:现在各家 AI 能接的工具越来越多——搜索、地图、代码执行、文件读写、数据库查询……工具多了,就需要一套"标准接口"让所有工具都能即插即用,不用每个都单独适配。这事儿第 16 篇讲 MCP 的时候再细聊。)
🎁 这一篇带走的
AI 不是自己动手——它写工单,外部程序干活。判断一个 AI 助手强不强,别只看它会不会聊天,看它会不会"派活给工具"。
会用工具的 AI,才算真正走出了"玩具"的范畴,开始能替你干活。而当小硅不仅会用一个工具、还能自己规划"先用哪个、再用哪个"来完成一整件复杂的事时——它就快要"出师",进化成传说中的 Agent 了(第四幕见)。
下一篇预告:小硅会说人话,可有时候我们需要它说"机器话"——给你吐一份规规整整的数据。怎么让它乖乖照格式来,还不出岔子?