AI 理论:Tool 介绍

关于本笔记

本笔记用于介绍 Tool(工具)在 Agent 中的作用、Tool 的四要素定义(函数本体、名称、描述、参数定义),以及不同风险等级的工具分类。

目录

一、Agent + Tool:两个角色怎么配合干活

在聊 Tool 之前,先把另一个容易混淆的概念说清楚: Agent

很多同学以为「Agent 就是更厉害的大模型」。这个理解偏了。 Agent 本质上是我们开发者写的一套程序 ,它不是更聪明的 AI,而是一个全程在线的「调度员」,负责在用户、大模型、工具之间协调任务、传递信息、推进流程。

用一个外卖平台来类比这三个角色的关系:

![](/img/开发进阶/AI理论/什么是 Tool?-b93812c1bdffe664a7f782203b584bfd.png)

  • 你(用户) :下单的人,提需求

  • 大模型 :后厨主厨,负责决策,先做哪道菜、下一步做什么、什么时候上桌

  • Agent :外卖平台的调度系统,协调主厨、骑手和顾客,确保整个流程跑通

  • Tool :骑手和各个执行部门,真正出去跑腿、干具体事情的

大模型只「动脑」,工具才「动手」。Agent 就是把这两者打通的中间层。


具体来说,当你给 Agent 下一条指令:「帮我读取 C 盘目录下的 hello_world.cpp 文件,移动到 D 盘目录下,最后给我总结一下这个文件的核心内容」,整个执行流程是这样的:

![](/img/开发进阶/AI理论/什么是 Tool?-b73968c9e7bab4051db98a900d33e42a.png)

  1. Agent 把需求 + 工具清单打包,发给大模型 :「用户想做这件事,你有这些工具可以用,第一步该怎么做?」

  2. 大模型做决策,返回指令 :「调用【读取文件】工具,路径是 C://hello_world.cpp」

  1. Agent 执行指令,调用工具 :真正去磁盘上读文件

  2. Agent 把结果回传给大模型 :「文件读取成功,内容是……」

  1. 大模型根据结果,决定下一步 :「好,现在调用【移动文件】工具,把它移到 D 盘」

  2. 循环执行,直到任务完成 :所有步骤跑完,大模型生成最终总结

  1. Agent 把结果反馈给你 :任务完成

你看,这整个过程里,「决策」始终在大模型,「执行」始终在工具,而 Agent 就是那个来回传话、推进任务的协调员。


二、Tool 到底是什么?光写函数不够?

好,现在聚焦到工具本身。

你可能会想:「工具不就是函数嘛,我写一个 Python 函数,Agent 直接调用就行了?」

听起来很合理,但这里有个关键问题, 大模型根本看不到你的 Python 代码。

大模型不是程序员,它不会去扫你的代码库,发现「哦你这里有个 get_weather 函数」。它能读的,只有你放进它对话上下文里的文字。

所以,哪怕你把函数写得多优雅,只要没有专门告诉大模型「这个函数叫什么、干嘛用的、参数怎么传」,大模型就永远不知道这个工具的存在。

结论:要让大模型用上工具,必须额外给它写一份「说明书」。

函数是「手」,说明书才是「让大模型学会用这只手的指南」。两者缺一不可。

这份说明书由四个部分组成,就是 Tool 的四要素。


三、Tool 的四要素

![](/img/开发进阶/AI理论/什么是 Tool?-7e900cf103d8944b7e37298eaa898931.png)

函数本体,真正干活的代码

这是实现具体功能的代码,查数据库就是查数据库,发通知就是发通知。

这部分 大模型看不到 ,但是 Agent 最终会执行它。大模型只负责「决策调用哪个工具、传什么参数」,至于这个工具内部怎么实现,大模型完全不关心。

name(名称),大模型的识别标签

大模型决定「调哪个工具」的时候,第一步靠的就是名称。名字要 望名知意

get_weather 一眼就知道是「查天气」; func_001 就算加了再多描述,大模型也会更难联想到它的用途。起名的原则很简单:让大模型看名字就能猜出大概。

description(描述),整个工具定义里最重要的字段

没有之一。

大模型每轮决策的核心问题是:「当前这一步,该不该调这个工具?」它做这个判断的 唯一依据 ,就是工具的 description。

描述写清楚了,大模型准确选工具;描述写模糊了,大模型要么选错工具,要么该用的时候没用,或者不该用的时候乱用。

一个好的 description 应该包含三件事:

  • 能做什么 :这个工具的核心功能是什么

  • 什么场景用 :遇到哪类问题、哪种情况该选它

  • 返回什么 :调用完会得到哪些信息

parameters(参数定义),告诉大模型怎么「填参数」

有了函数,大模型还得知道:调用这个工具要传哪些参数、每个参数是什么类型、哪些是必填的。

这些信息用 JSON Schema 格式来定义。

JSON Schema 听起来很技术,但你可以把它理解成 网站上的一张「填写表单」

你在网上买东西填收货地址的时候,表单会告诉你,「姓名」「地址」「手机号」是必填项(标了 * 号),「备注」是选填的;「手机号」只能填数字,不能填文字。

JSON Schema 做的就是同样的事:定义这个工具有哪些「格子」需要填、每个格子填什么类型的数据、哪些格子必须填。大模型看到这份定义,就知道该怎么构造调用指令了。


用一个完整的例子把这四个部分串起来。假设我们要给 Agent 提供一个查询天气的工具:

先写函数本体

这段代码没什么特别的,就是调了一个天气 API,把结果整理成字典返回。注意: 大模型看不到这段代码 ,它只负责决定「要调这个工具、传什么参数」,至于你用什么 API、代码怎么写,大模型完全不关心。

再写工具说明书

函数有了,接下来写大模型能看到的部分,name + description + parameters:

来逐行拆解这份说明书:

  • name 字段 get_weather ,望名知意,大模型一看就猜到这是查天气的工具。

  • description 字段 :这是最关键的部分。注意它写的不是「这是一个天气 API」,而是写清楚了 使用场景 :「当用户询问某地天气、出行建议、是否需要带伞等问题时使用」。这就是在告诉大模型:你遇到这类问题,就来用我。如果只写「查询天气」,大模型在面对「我明天去杭州要带伞吗」这种问法时,可能就不确定该不该调用了。

  • parameters 字段 :定义了两个参数, city (城市名,字符串类型)和 date (日期,字符串类型),两个都在 required 里,也就是「必填格子」,大模型构造调用指令时不会漏填。每个参数的 description 里还给了例子(「北京、上海、广州」「2025-03-21」),这是个好习惯,大模型按什么格式填参数,全靠这里的说明。

这就是函数本体和工具说明书的完整对照。用户问「明天上海天气怎么样」,大模型读完说明书,就知道:该调 get_weathercity 填「上海」, date 填明天的日期。


四、大模型怎么「认识」这些工具?

工具写好了,下一个问题:大模型怎么知道我有哪些工具?

答案是: 你得主动告诉它。

Agent 在每次对话开始前,会把所有可用工具的 name + description + parameters 打包成一个列表,通过 API 的 tools 参数传给大模型。这个列表就叫 工具清单

大模型每次做决策,实际上是在读这份清单,然后判断:「当前任务需要什么操作?哪个工具能完成?该怎么调用?」

![](/img/开发进阶/AI理论/什么是 Tool?-51a3768bafe818a2cdc44826eeb6ea56.png)

用一个场景帮你理解:你入职一家新公司,第一天 HR 给你发了一份《内部系统清单》,

  • OA 系统 :用来提交请假申请、报销单据。当你需要请假或者报销时使用,填写「开始日期」「结束日期」「事由」。

  • 代码仓库(GitLab) :用来提交代码、发起 MR。当你完成功能开发需要合并代码时使用,填写「分支名」「目标分支」。

  • 监控平台 :用来查看服务状态、报警记录。当排查线上问题时使用,填写「服务名」「时间范围」。

拿到这份清单,你自然就知道:「哦,我下周要请假,得用 OA 系统,填开始日期和结束日期」。

大模型收到工具清单,完全是同样的逻辑,它遇到用户的问题,就在清单里找「哪个工具能处理这个场景」,然后按照 parameters 定义填好参数,告诉 Agent 去调用。


这里有一个结论很重要,要记牢:

![](/img/开发进阶/AI理论/什么是 Tool?-214fc576dc2b5ca32007e34df550ea27.png)

大模型选对工具的能力,不只取决于模型有多聪明,更取决于工具描述写得有多清晰。

描述太模糊、两个工具描述太相似、工具太多但没有区分场景,这些问题,换再强的模型也没用。根本原因在工具描述本身写得不够好。这就是为什么前面把 description 列为「最重要的字段」。

工具清单越丰富、描述越清晰,Agent 能干的事越多、越准确。


五、工具有哪些类型?风险从低到高

工具不是只有一种,按照「对系统的影响程度」,从低风险到高风险分成四类。

这个「风险从低到高」的顺序不是随意排的,它决定了每类工具在 Agent 里该怎么用、要不要加人工审批。

查询类(只读)

查天气、搜索网页、读取文件、查数据库记录……只读取数据,不改变任何状态。查完数据库,数据库还是那个数据库;读完文件,文件没有任何变化。

风险等级:低。 这类工具可以放心让 Agent 自主调用,不需要人工确认。出错了顶多是拿到没用的数据,不会产生不可逆的后果。

写入类(有副作用)

往数据库插记录、发通知消息、发邮件、更新配置……会改变系统状态,而且有些操作不可逆,发出去的通知收不回来,写进数据库的记录再删也留了痕迹。

风险等级:中。 对高风险的写入操作(比如发通知给几百个人、修改线上配置),建议加一个人工确认步骤,而不是让 Agent 完全自主执行。

执行类(高风险)

执行 shell 命令、跑脚本、重启服务、部署代码……能直接操作系统。一条错误的 shell 命令能删掉整个目录,一次错误部署能把线上服务打挂。这类工具的影响范围最大,破坏性最强。

风险等级:高。 两件事必须做到:严格限制权限范围(比如只允许执行白名单里的命令);重要操作必须走人工审批,绝对不能让 Agent 自主决策。

AI 辅助类

这是很多同学没想到的一类: AI 能力本身也能封装成工具。

比如,给 Agent 配一个 RAG 检索工具,让它能随时查内部知识库、历史故障案例;或者把一个专门的分类模型封装成工具,Agent 调用它对日志做分类,只拿结论,不需要自己处理所有细节。

风险等级:低到中。 操作本身不会改变外部系统状态,主要关注检索结果的质量和子模型的可靠性。


这四类工具,风险依次递增,设计 Agent 系统时,每个工具的风险等级直接决定了两件事: 它能不能自主调用?需不需要人工确认? 这是保证 Agent 安全可靠运行的基本原则,不要等出了问题再加。


总结

整理一下这章的核心认知:

工具是 Agent 的「双手」 ,没有工具,Agent 只是一个只会输出文字的大模型;有了工具,Agent 才能真正和外部世界交互、完成具体任务。

一个工具 = 函数本体 + 名称 + 描述 + 参数定义 。大模型看不到函数本体,它靠 name + description + parameters 来判断该不该用这个工具、怎么用。其中 description 最关键 ,是大模型选工具的唯一依据。

四类工具,风险从低到高

类型 典型场景 风险 Agent 能自主调用?
查询类 查天气、读文件、搜索网页 可以
写入类 发通知、改配置、写数据库 高风险操作需人工确认
执行类 跑脚本、重启服务、部署代码 必须人工审批
AI 辅助类 RAG 检索、调用子模型 低~中 通常可以,关注结果质量

工具描述的清晰度决定 Agent 的准确率 ,不是换更聪明的模型,是把 description 写清楚。


后面几章会继续深入这条链路:

  • Function Calling :大模型是怎么把「我要调哪个工具、传什么参数」这个决策,用标准化格式告诉 Agent 的,这是工具调用的底层机制,这章我们只是看到了结果,下一章讲清楚原理

  • RAG :把知识库检索封装成工具,让 Agent 能访问私有数据,重要到单独一章

  • MCP :工具的标准化协议,让你不用每次都从头写工具,直接接入现成的工具生态